2011-02-26 41 views
0

我有以下類型的輸入:如何表示地理位置查找的街道地址範圍?

Zone 1 => 
    Alabama street, 1 to 135, west side 
    Alabama street, 2 to 144, east side 
    Bahama square, 2 to 4 
Zone 2 => 
    Bahama square, 5 to 8 
    Cecil street, 3 to 27 

這些數據代表的區域內的某些區域。就像一個城市中的一個小區域,由幾條封閉的街道定義。

如果我獲得地理位置(經度,緯度),如何將此值映射到上述上下文中的區域?很顯然,谷歌地圖查詢會給我的地址,但如何從那裏繼續?表示有效區域建立的這種數據(地址範圍)的最佳方式是什麼?

(哇,在1 3個問題)

回答

1

我會採取刺探後續問題。我假設1區的街道1 .. 6是主要街道,澤塔是地址範圍內這些街道之間的小街道。

我的解決方案是爲區域形成shapefile,然後檢查要檢查的地址的lat/lng是否在shapefile中。下面是一些方法細節:

  1. 使用反向API來獲取每個街道端點(例如爲1W阿拉巴馬州,135瓦特阿拉巴馬州等)的緯度/經度。

  2. 使用這些端點在您的區域周圍創建多邊形形狀(shapefile)。

  3. 使用反向API獲取要檢查的地址的緯度/經度。

  4. 檢查此lat/lng是否在多邊形形狀內。

如果您決定使用按地址進行匹配,則此處爲美國郵政地址標準的鏈接。你可以使用這個標準來規範你的地址。

http://pe.usps.gov/text/pub28/welcome.htm

安德魯 在OpenGeoCode.Org

+0

謝謝,就是這樣。 – 2011-03-02 16:38:21

2

假設你將依賴於外部資源(如谷歌或雅虎PlaceFinder)進行反向地理編碼,你會得到一個門牌號和街道(讓我們假設城市,州等全部匹配)。一旦你有了街道和街道號碼,就可以查詢你的區域「數據庫」。

因此,您真正需要的是幫助您識別正確區域的索引。您可以選擇在街道號碼,街道名稱或兩者的組合上進行索引。假設您使用像Yahoo PlaceFinder這樣的常量來源,假設您獲得的輸出將被標準化並且使用(街道號碼,街道)索引可能是可行的。

但是,它可能會更穩健(即,由於名稱+數字變化而導致的錯誤較少),以在街道名稱的規範化形式上創建索引。當你查詢索引時,你會詢問每個街道節點,看看你有的數字是否在範圍內。

因此,舉例來說,你的指數可以是這樣的:

w. alabama ==> 1 <to> 135 ==> zone 1 
e. alabama ==> 2 <to> 144 ==> zone 1 
    bahama ==> 2 <to> 4 ==> zone 1 
      ==> 5 <to> 8 ==> zone 2 
etc. 

上面顯示我已經標準化的街道地址(情況加上佔像「西方」與「東」)在一種與我的外部反向地理編碼器同步的方式。然後,我在索引的第二級實現一個範圍查找(這就是我寫的原因,意味着您需要實現該邏輯),這樣我就不必枚舉它們之間的所有數字。 注意:格式/表示形式的很多細節將取決於您反向地理編碼源遵守的習慣,因此您認爲重要,因爲您認爲此數據的規範化/規範化形式爲,否則您將獲得許多錯誤的否定。

您當然可以在關係數據庫的幫助下完成大部分工作,具體取決於他們對範圍索引的支持情況。但是如果你沒有一個方便或者不想與其整合,我認爲上述自定義索引是可行的。

+0

尼斯和完整的答案隊。但它並沒有解決以下問題:我有地址「Zeta street 5」,它位於6街道定義的1區,它們都不是Zeta。我如何獲得這條街的正確區域? – 2011-02-26 18:39:28

+0

嗯,我剛剛意識到我需要重新解釋我的問題,因爲你的答案對我所問的問題是完美的,但實際上我需要的不僅僅是這些。 – 2011-02-26 18:59:51