【问题标题】:SQL Spatial Query - Determine Which Polygon A Lat/Long Point Falls IntoSQL 空间查询 - 确定纬度/经度点落入哪个多边形
【发布时间】:2021-11-28 14:02:56
【问题描述】:

通过 ArcMap,我将要素类导入我的 SQL2019 服务器。没有问题,当我检查时,多边形在“空间结果”选项卡中正确显示。在该要素类中,存在三种不同的形状(我们将字段称为 tblGeo.AREA)。

我有另一个带有 LAT/LNG 坐标点的表 (tblPoint.LAT, tblPoint.LNG)。

使用这两个表(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
... ... ... ...

【问题讨论】:

    标签: sql spatial-query


    【解决方案1】:

    样本输入和输出数据会很好。
    你需要convert LAT and LNG to a geometry point
    假设LATLNGDECIMAL(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
    

    如果您提供示例数据,我可以检查我的工作。

    【讨论】:

    • 我添加了一些表格示例。谢谢你的回复。
    • 那么,它对你有用吗?我无法测试,因为您提供的数据无效。例如 '0x2569...' 不是几何图形。另外,您的“样本”表明您正在使用几何,但您的问题说您正在使用地理。也许创建一个数据库小提琴。
    • 它没有用。要素类数据是通过 ArcMap 导入的,并且作为 GEOMETRY 类型存在于数据库中,所以我只假设它正确导入。有一些功能有效(即: tblGeo.SHAPE.STCentroid() 会给我每个几何区域的质心)。但还不知道如何进行连接...
    • 我更新了我的答案。如果您希望我对此进行测试,请提供有效的 DML 以生成示例数据。
    • 使用您的代码让它工作。唯一缺少的部分是连接中的“= 1”。谢谢大家的帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多