私は過去に似たようなことをしてきました...私が前に打ち勝った1つの障害は、同じ場所にある2つの場所よりも境界に跨った2つの場所が物理的に近いことでした。
私は、それぞれの場所を4つのエリアに分類する「ダブルグリッド」システムを作成して、その周りに乗りました。そうすれば、少なくとも1つの "エリア"を共有する2つの場所があり、それらはお互いの範囲内にあることがわかります。
ここでは、米国のほとんどをカバーし、例です...
IF OBJECT_ID('tempdb..#LatLngAreas', 'U') IS NOT NULL
DROP TABLE #LatLngAreas;
GO
WITH
cte_Lat AS (
SELECT
t.n,
BegLatRange = -37.9 + (t.n/10.0),
EndLatRange = -37.7 + (t.n/10.0)
FROM
dbo.tfn_Tally(1030, 0) t
),
cte_Lng AS (
SELECT
t.n,
BegLngRange = -159.7 + (t.n/10.0),
EndLngRange = -159.5 + (t.n/10.0)
FROM
dbo.tfn_Tally(3050, 0) t
)
SELECT
Area_ID = ROW_NUMBER() OVER (ORDER BY lat.n, lng.n),
lat.BegLatRange,
lat.EndLatRange,
lng.BegLngRange,
lng.EndLngRange
INTO #LatLngAreas
FROM
cte_Lat lat
CROSS JOIN cte_Lng lng;
SELECT
b3.Branch_ID,
b3.Name,
b3.Lat,
b3.Lng,
lla.Area_ID
FROM
dbo.ContactBranch b3 -- replace with DimPlace
JOIN #LatLngAreas lla
ON b3.Lat BETWEEN lla.BegLatRange AND lla.EndLatRange
AND b3.lng BETWEEN lla.BegLngRange AND lla.EndLngRange;
HTH、 ジェイソン
ないこれがdownvotedれた理由、それは興味深い質問であることを確認してください。あなたのグループにはISO-3166やISO-3166-2(https://en.wikipedia.org/wiki/ISO_3166-2)のような構造を使用し、あなたの場所名にジオコーディングAPIを使用することを考えてください。 –
APIをお勧めできますか?だから私は返す場所名を取得するAPIを介して緯度経度を検索する(私は仮定しているSQLではない)スクリプトを書くだろうか? – tember
ここに1つあります:https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse –