SQL空间查询:判断经纬度坐标点所属多边形区域的实现方法
实现方案
核心使用SQL Server原生空间函数STContains()判断点是否在多边形范围内,配合左关联实现无匹配时返回空值。
第一步:先确认空间参考ID(SRID)
执行以下语句查询tblGeo中SHAPE字段的统一SRID,后续查询需保持SRID一致:
SELECT DISTINCT SHAPE.STSrid FROM tblGeo
常用的WGS84坐标系对应SRID为4326,可根据实际查询结果替换后续代码中的对应参数。
第二步:执行关联查询
SELECT p.PID, p.LOCATION AS Location, p.LAT AS Lat, p.LNG AS Lng, g.GEOAREA AS GeoArea FROM tblPoint p LEFT JOIN tblGeo g -- 先将经纬度转为和SHAPE字段同SRID的geometry点类型,参数顺序为 经度、纬度 ON g.SHAPE.STContains(geometry::Point(p.LNG, p.LAT, 4326)) = 1
注意事项
- 若你导入的
SHAPE字段是GEOGRAPHY类型而非GEOMETRY,则点的创建方式改为geography::Point(p.LAT, p.LNG, 4326),注意GEOGRAPHY类型的参数顺序为先纬度、后经度 - 数据量较大时可给
SHAPE字段创建空间索引提升查询效率,参考创建语句:
CREATE SPATIAL INDEX IX_tblGeo_SHAPE ON tblGeo(SHAPE) USING GEOMETRY_AUTO_GRID WITH (BOUNDING_BOX = (XMIN=-180, YMIN=-90, XMAX=180, YMAX=90)) -- 边界范围根据你的实际数据调整
- 若存在单个点匹配到多个多边形的情况,可根据业务需求添加去重或优先级判断逻辑。
内容的提问来源于stack exchange,提问作者rak11
相关产品推荐
相关产品推荐

