2017-07-25 4 views
6

場所の名前(手動でユーザーが入力した)とその場所の緯度と経度(自動的に取得された)を持つDimPlace次元があります。プレイスは手動で入力されるため、同じ場所が複数の時間に別の名前で表示される可能性があります。さらに、2つの別個の場所が互いに非常に近い可能性があります。データウェアハウスのジオゾーンまたはLat&Longの寸法

私たちは、2つの「場所」の間でMPGを分析できるようにしたいと考えていますが、それらをグループ化してより大きな領域にしたいと考えています。つまり、&という緯度を使って、 1つのレコード内の近くの場所。

DimPlaceGeozoneのような新しい次元を作りたいと思っています。私はすべての緯度をロードするのに役立つリソースを探しています& long値は...何かにマップされていますか?たぶん郵便番号、または都市名ですか? DimTimeのような一般的なディメンションを読み込むスクリプトを見つけることができます - 私は北米のlong値で&の値に似たものを愛するでしょうか?

+0

ないこれがdownvotedれた理由、それは興味深い質問であることを確認してください。あなたのグループにはISO-3166やISO-3166-2(https://en.wikipedia.org/wiki/ISO_3166-2)のような構造を使用し、あなたの場所名にジオコーディングAPIを使用することを考えてください。 –

+0

APIをお勧めできますか?だから私は返す場所名を取得するAPIを介して緯度経度を検索する(私は仮定しているSQLではない)スクリプトを書くだろうか? – tember

+1

ここに1つあります:https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse –

答えて

2

私は過去に似たようなことをしてきました...私が前に打ち勝った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、 ジェイソン

+0

これはうまくいくようです - とにかくとても良いスタートです。ありがとうございました! – tember

+0

問題ありません。喜んで助けてください。 –

関連する問題