当前位置: 首页 > 面试题库 >

可以使用STWithin或STContains根据多边形关系中的点来更新列吗?

高琛
2023-03-14
问题内容

给出下表:

CREATE TABLE #USGS_24K_TOPOMAP_BOUNDARIES(
    [OBJECTID] [int] NOT NULL,
    [AREA] [numeric](38, 8) NULL,
    [PERIMETER] [numeric](38, 8) NULL,
    [QD24K_GRSM] [numeric](38, 8) NULL,
    [QD24K_GR_1] [numeric](38, 8) NULL,
    [QUADID] [numeric](38, 8) NULL,
    [CENTLAT] [numeric](38, 8) NULL,
    [CENTLONG] [numeric](38, 8) NULL,
    [NAME] [nvarchar](35) NULL,
    [STATE] [nvarchar](2) NULL,
    [LATLONG] [nvarchar](9) NULL,
    [OHIO_INDEX] [nvarchar](8) NULL,
    [GRID60] [nvarchar](5) NULL,
    [Reviewed] [int] NULL,
    [Corrected] [int] NULL,
    [Verified] [int] NULL,
    [GlobalID] [uniqueidentifier] NOT NULL,
    [SHAPE] [geometry] NULL)

CREATE TABLE #tbl_locations(

[OBJECTID] [int] NOT NULL,
[FCategory] [varchar](16) NULL,
[MapMethod] [varchar](4) NULL,
[HError] [varchar](50) NULL,
[MapSource] [varchar](255) NULL,
[SourceDate] [datetime2](7) NULL,
[EditDate] [datetime2](7) NULL,
[Notes] [varchar](255) NULL,
[Species_Community] [varchar](50) NULL,
[Location_ID] [uniqueidentifier] NOT NULL,
[Site_ID] [uniqueidentifier] NULL,
[GIS_Location_ID] [varchar](50) NULL,
[Meta_MID] [varchar](50) NULL,
[X_Coord] [numeric](38, 8) NULL,
[Y_Coord] [numeric](38, 8) NULL,
[Coord_Units] [varchar](50) NULL,
[Coord_System] [varchar](50) NULL,
[UTM_Zone] [varchar](50) NULL,
[Accuracy_Notes] [varchar](255) NULL,
[Unit_Code] [varchar](12) NULL,
[Loc_Name] [varchar](100) NULL,
[Loc_Type] [varchar](25) NULL,
[Updated_Date] [varchar](50) NULL,
[Loc_Notes] [varchar](255) NULL,
[Datum] [varchar](5) NULL,
[Watershed] [varchar](50) NULL,
[StreamName] [varchar](50) NULL,
[NHDReachCode] [varchar](14) NULL,
[TOPO_NAME] [varchar](50) NULL,
[Trail] [varchar](100) NULL,
[Road] [varchar](50) NULL,
[Elevation] [numeric](38, 8) NULL,
[LAT] [numeric](38, 8) NULL,
[LON] [numeric](38, 8) NULL,
[Population_ID] [uniqueidentifier] NULL,
[Year_] [varchar](4) NULL,
[WGS_DAT] [varchar](5) NULL,
[WGS_CS] [varchar](5) NULL,
[County] [varchar](20) NULL,
[State] [varchar](15) NULL,
[IsExtant] [varchar](3) NULL,
[IsSenstive] [varchar](3) NULL,
[SpeciesName] [varchar](125) NULL,
[SpeciesID] [varchar](50) NULL,
[Species_ID] [int] NULL,
[SHAPE] [geometry] NULL)

我想用#USGS_24K_TOPOMAP_BOUNDARIES.Name填充#tbl_locations.Topo_Name。换句话说,我试图确定一个点所在的地形图的名称,并以编程方式将其写入点表。从理论上讲似乎很简单,但tbl_locations包含数千个点,这些点可能出现在36个地形图多边形边界之一中。

我已经走了这么远

Select NAME, Loc_Name, Location_ID
From #USGS_24K_TOPOMAP_BOUNDARIES a, #TBL_LOCATIONS b
where a.Shape.STContains(b.Shape)=1

它返回了一个整齐的表,我可以通过联接跨回tbl_locations,但是我一直坚持通过一个查询更新语句来完成此操作,并且我有很多类似的点-
多边形关系以这种方式实现自动化(例如,分水岭,县,州等)。谢谢!


问题答案:
update TBL_LOCATIONS
set TOPO_NAME = dbo.QD24K_GRSM.NAME
--(SELECT     a.NAME, b.Loc_Name, b.Location_ID
FROM dbo.tbl_locations
inner join dbo.QD24K_GRSM 
on TBL_LOCATIONS.Location_ID = TBL_LOCATIONS.Location_ID
WHERE  (QD24K_GRSM.Shape.STContains(TBL_LOCATIONS.SHAPE) = 1) ;


 类似资料:
  • 问题内容: 我有下面的简单表: 然后,我尝试插入具有多边形的行: 并遇到此错误: 列“ poly”是多边形类型,而表达式是“ geometry”类型 真是la子 所以我的第一个问题是: 我真的必须施展吗? 无论如何,在投射之后它就可以工作了。现在,我正在尝试执行一个简单的ST_Contains查询: 这给出了错误: 我应该做些什么? 以下作品: 但这可能是因为两个参数都属于Geometry类型。针

  • 我的geodataframe如下所示: 我可以在“几何体”列中看到点列表,但我想将这些点拉出并放入列表中。例如,在pandas中,您可以执行类似df['column']的操作。到列表()。但是,在尝试此操作时,我得到一个错误: 你知道我如何去掉“多边形”名称,直接得到组成该多边形的点的列表吗?说清楚,我不想要多边形的外部或边界,我想要边界内的所有点。

  • 我想把点的形状设为一个圆。我就是这样做的: 然后我得到以下结果: 圆圈略微移动。我试图更改,以便根据直线将圆居中,但没有任何效果。什么是使圆圈居中的正确方法?

  • 我有一个geopandas数据框,其中包含一个形状良好的点几何体列表。还有一列包含ID列表,用于指定每个点所属的唯一多边形。简化输入代码为: 我想按多边形ID分组,以便将几何体从点转换为多边形。该输出基本上如下所示: 我想这很简单,但我很难让它工作。我发现下面的代码允许我将其转换为开放式多段线,但无法计算出多边形。有人能建议如何适应这种情况吗? 简单地用多边形替换LineString会导致Type

  • 问题内容: 可以说我有这些专栏 我想要做的就是更新和基于价值。 因此结果将是: 我希望更新操作像标识列一样,而实际上不使其成为标识列。我知道我可以按“ x”排序,结果就是顺序,但是我想生成一个报告,在这里可以逐行查看项目。 这样的事情可能吗? 问题答案: 或在单个查询中进行尝试

  • 问题内容: 我有一个像这样的mongo文件。 我希望能够插入和更新与单个蒙戈命令内不使用条件,然后运行,并根据对象的存在。 这是我要成为选择器的项目。所以如果我用这个更新数组: 我必须使用一个声明 如果我想在数组中插入一个新对象 我必须使用一个声明 我需要一种用于数组项的upsert。 我必须以编程方式执行此操作还是可以通过一个mongo调用来执行此操作? 问题答案: 我不知道在MongoDB 2