このシナリオを考えると:
- 経度と緯度で指定された、世界中の 1,000,000 ポイントのオーダーがあります。
- 点 pc (経度と緯度で指定) と半径 rc に基づく円 c があります。
- どの点が円内にあるかを効率的に判断したい
私は C# と SQL サーバー 2008 に格納されている場所で開発しています。
したがって、私が見ているように、次の3つのオプションがあります。
位置を経度緯度浮動小数点数として保存し、C# で計算を実行します。
場所を地理データ型として保存し、次のように SQL Server 2008 で計算を実行します。
CREATE TABLE UserLocations [UserId] [bigint] NOT NULL, [CurrentLocation] [geography] NOT NULL ALTER PROCEDURE sp_GetCurrentUsersInRange @userPoint geography, @RangeInMeters int AS BEGIN select UserId from UserLocations where @userPoint.STDistance(CurrentLocation) <= @RangeInMeters and UserId <> @userId END
短所: LinqToSQL および LinqToEntities で地理データを使用する際の問題。
利点: 大規模なデータに対して dbms 処理能力を使用し、SQL Server 空間インデックスを使用します。
3.Google の地理位置情報や計算サービスなどの Web サービスの使用。これまでのところ、そのような Web サービスは見つかりませんでした。
あなたの意見では、どれが最も効率的ですか? あなたの答えを正当化してください。
ありがとうございました