SQL 空间查询 - 确定 Lat/Long 点落入哪个多边形
SQL Spatial Query - Determine Which Polygon A Lat/Long Point Falls Into
通过 ArcMap,我将一个要素 Class 导入了我的 SQL2019 服务器。当我检查时,没有问题,多边形在 'spatial results' 选项卡中正确显示。在该特征 class 中,存在三种不同的形状(我们称该字段为 tblGeo.AREA)。
我有另一个 table 坐标点 LAT/LNG (tblPoint.LAT, tblPoint.LNG).
使用两个 tables(tblGeo 和 tblPoint),如何确定坐标落入哪个 AREA 字段(如果有)?
tblGeo:
Field Name
Field Type
Sample
GID
INT
1,2,3...
SHAPE
GEOMETRY
0x2569... or 0x110F...
GEOAREA
VARCHAR(50)
Washington, New York,...
tblPoint:
Field Name
Field Type
Sample
PID
INT
1,2,3...
LOCATION
VARCHAR(100)
White House
LAT
DECIMAL(9,6)
38.897957
LNG
DECIMAL(9,6)
-77.036560
期望输出
PID
Location
Lat
Lng
GeoArea
1
White House
38.897957
-77.036560
Washington
2
Empire State Building
40.748817
-73.985428
New York
...
...
...
...
示例输入和输出数据会很好。
您需要 convert LAT
and LNG
to a geometry point.
假设 LAT
和 LNG
是 DECIMAL(9, 6)
...
select g.name as AreaName
, p.name as PointName
from tblGeo g
right outer join tblPoint p on g.AREA.STContains(geometry::Point(p.LAT, p.LNG, 0)) = 1
如果您提供示例数据,我可以检查我的工作。
通过 ArcMap,我将一个要素 Class 导入了我的 SQL2019 服务器。当我检查时,没有问题,多边形在 'spatial results' 选项卡中正确显示。在该特征 class 中,存在三种不同的形状(我们称该字段为 tblGeo.AREA)。
我有另一个 table 坐标点 LAT/LNG (tblPoint.LAT, tblPoint.LNG).
使用两个 tables(tblGeo 和 tblPoint),如何确定坐标落入哪个 AREA 字段(如果有)?
tblGeo:
Field Name | Field Type | Sample |
---|---|---|
GID | INT | 1,2,3... |
SHAPE | GEOMETRY | 0x2569... or 0x110F... |
GEOAREA | VARCHAR(50) | Washington, New York,... |
tblPoint:
Field Name | Field Type | Sample |
---|---|---|
PID | INT | 1,2,3... |
LOCATION | VARCHAR(100) | White House |
LAT | DECIMAL(9,6) | 38.897957 |
LNG | DECIMAL(9,6) | -77.036560 |
期望输出
PID | Location | Lat | Lng | GeoArea |
---|---|---|---|---|
1 | White House | 38.897957 | -77.036560 | Washington |
2 | Empire State Building | 40.748817 | -73.985428 | New York |
... | ... | ... | ... |
示例输入和输出数据会很好。
您需要 convert LAT
and LNG
to a geometry point.
假设 LAT
和 LNG
是 DECIMAL(9, 6)
...
select g.name as AreaName
, p.name as PointName
from tblGeo g
right outer join tblPoint p on g.AREA.STContains(geometry::Point(p.LAT, p.LNG, 0)) = 1
如果您提供示例数据,我可以检查我的工作。