1

緯度/経度からメートル法への計算に関する多くのスレッドがあることは知っています。これは私の問題の最初の部分を解決します。

私の問題の2番目(主要部分)はこれです:

  • 私は地図アプリとしてグーグルマップを持っています。
  • ポイントの緯度と経度のペアがあります
  • 私はメートル距離を持っています.30メートルとしましょう。
  • SQLクエリを実行するにはポイントが必要です。

なんで?

この緯度と経度のペアで特定できる POI の記録がたくさんあります。すべての結果を取得したくありません (理由: パフォーマンスの向上)。

次のような方法はありますか:

select * from myTable where lat> .... and lat < ... and long > ... and long < ...?

これは可能ですか?その場合、これらの値を で取得するにはどうすればよい...ですか?

よろしく!

4

2 に答える 2

2

記事を見てください:境界円内の点の選択

およびSOの質問:緯度経度に基づいて半径検索を実行するためのSQLクエリ

これらはあなたが始めるはずです。

于 2012-05-03T20:29:30.330 に答える
1

サプライヤのlat/lngとlat/lngペアのデータベース間の距離を返すサンプルクエリを次に示します。

DECLARE
@Latitude float,
@Longitude float

SET @Latitude = 46.51257000000000
SET @Longitude = -84.33660900000000

DECLARE @SampleData TABLE
(
Name varchar(100),
Lat float,
Lng float
)

INSERT INTO @SampleData
(Name, Lat, Lng)
SELECT 'Point1', 46.52450048415351,-84.35223018530274
UNION
SELECT 'Point2', 46.51835838382206,-84.30279170874024
UNION
SELECT 'Point3', 46.522138220045285,-84.2622796237793
UNION
SELECT 'Point4', 46.54056115608927,-84.223140829834

SELECT 
    Name,
    Lat,
    Lng,
    -- using spherical law of cosines, where 6371 is the earth's radius in km. Returns km.
    Distance = ACOS(SIN(RADIANS(@Latitude))*SIN(RADIANS(Lat))+COS(RADIANS(@Latitude))*COS(RADIANS(Lat))*COS(RADIANS(Lng-@Longitude)))*6371  
FROM 
    @SampleData
于 2012-05-04T10:33:39.753 に答える