1

我从 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# 中的解决方案

谢谢

4

0 回答 0