緯度/経度座標を使用して2点間の距離を計算するSQL関数があります。この関数を使用すると、次のように、特定のポイントの距離に基づいて、大きなセット( GEOCODESテーブル)から場所のセットを候補リストに入れることができます。
DECLARE @LAT1 float, @LNG1 float,
SET @LAT1 = '34.169540'
SET @LNG1 = '-92.590990'
SELECT E.* FROM GEOCODES E
WHERE dbo.fnGetDistance(E.lat, E.lng, @LAT1, @LNG1, 'miles') < '20'
次の形式のポイント間の距離を示す2番目のテーブル(GEOMILES )があります。
LOCATION1 | STATE1 | LOCATION2 | STATE2 | DISTANCE
-----------+---------+-------------+----------+---------
New York | NY | Boston | MA | 220
私が達成しようとしているのはSELECT
、出発点がニューヨークから20マイル以内にあり、到着点がボストンから20マイル以内にある場合に、220の距離を返すクエリです。これまでのところ、これはありますが、lat / lngポイントなどが加算されることを手動で確認しても、何も返されません。どんな助けでも大歓迎です!
DECLARE @FROM_LOC VARCHAR(100), @FROM_STA VARCHAR(2), @TO_LOC VARCHAR(100), @TO_STA VARCHAR(2)
SET @FROM_LOC = 'NEWARK'
SET @FROM_STA = 'NJ'
SET @TO_LOC = 'MEDFORD'
SET @TO_STA = 'MA'
SELECT G.DIST FROM GEOMILES G, GEOCODES E
JOIN GEOCODES C ON C.asciiname = @FROM_LOC AND C.admin1 = @FROM_STA
JOIN GEOCODES D ON D.asciiname = @TO_LOC AND D.admin1 = @TO_STA
WHERE dbo.fnGetDistance(E.lat, E.lng, C.lat, C.lng, 'miles') < '20'
AND dbo.fnGetDistance(E.lat, E.lng, D.lat, D.lng, 'miles') < '20'