【发布时间】:2019-02-11 17:17:06
【问题描述】:
我正在从一个点进行最近点查询。这是顺序。
我在 MSSQLServer 中存储了多个 POI,表为 dbo.Place。第二个表是dbo.Position,它将存储收集到的 GPS 点。
我正在使用存储过程,并且位置的 LatLong 已定义且可用。如何根据以下示例进行查询?
dbo.Place
Id | Name | Lat | Long
1 POI1 1.735 4.73225
2 POI2 1.5665 3.9983
3 Tim2 1.4344 3.1282
Lat Long 变量在存储过程中定义。我想用下面的公式来找到最近的点,我只会从3个查询中取最近的值(假设样本数据是3行)
SQRT(POW(X(`POI.Lat`) - 49.843317 , 2) + POW(Y(`POI.Long`) - 24.026642, 2)) * 100
谢谢。
【问题讨论】:
-
SQL Server 已经具有空间类型和功能。检查Query Spatial Data for Nearest Neighbor。不过,对于简单的点,使用例如
where Lat between targetLat-tolerand and targetLon + tolerance仅选择目标周围的 POI 可能更快,然后才计算距离。您可以在 Lat 和 Lon 字段上使用简单的索引来加快 Lat、Lon 字段的范围搜索
标签: sql sql-server spatial