我从 MSSQL 数据库中的 GPS 跟踪器获得了坐标列表。
我想知道它去过的前 5 个访问量最大的地方(至少在 500 米之内)。
到目前为止,这是我得到的:
SELECT DeviceTime, LastValidLongitude, LastValidLatitude,
(SELECT COUNT(*) FROM
(SELECT CAST(
(SELECT geography::Point(DP1.LastValidLatitude, DP1.LastValidLongitude, 4326).STDistance(geography::Point(DP2.LastValidLatitude, DP2.LastValidLongitude, 4326))) as int
) AS DistanceInMeters FROM DevicePositions AS DP2 WHERE DeviceId = 110204443045041
) AS DIM WHERE DistanceInMeters < 500) AS NumberWithin500
FROM DevicePositions AS DP1 WHERE DeviceId = 110204443045041
DeviceId 是跟踪器的 id DeviceTime 是它跟踪 LastValidLongitude 的时间,LastValidLatitude 是 wgs84 中的坐标
这给了我所有坐标的列表和 500 米内其他坐标的数量。
例子:
DeviceTime LastValidLongitude LastValidLatitude NumberWithin500
2012-10-23 17:46:14.000 9.88183333333333 56.9835 2
2012-10-25 13:45:17.000 9.88183333333333 56.9835 2
2012-09-14 14:08:16.000 10.0173333333333 57.4558333333333 1
但我如何从这里得到?我不能只对 NumberWithin500 进行分组,因为如果有 2 个地方我去过 12 次,我只会看到其中一个。
也将接受 C# 中的解决方案
谢谢