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 をグループ化することはできません。12 回訪れた場所が 2 つある場合、そのうちの 1 つしか表示されないからです。
C# でのソリューションも受け入れられます
ありがとう