2012-01-14 29 views
2

我正在設置一個位置感知應用程序,如here所述。之後我學到了更多關於GIS應用程序的知識,並決定改變一些我最初提出的設置的東西 - 我現在要使用Postgres數據庫使用postgis擴展來允許幾何字段,並使用TIGER/Line數據來填充它。 TIGER/Line數據似乎以不同的分辨率(圖層)提供不同的數據集 - 有州,縣,拉鍊,塊等數據。我需要一種方法將帖子與地址關聯起來,使用最好的顆粒分辨率。用PostGIS指定帖子到位置的好方法

例如,如果可能的話,我想將一個帖子與特定的街道(最好的分辨率)聯繫起來。如果不是街道,那麼一個特定的郵政編碼(不太具體)。如果不是郵政編碼,那麼特定的縣(不太具體)等等。旁註:我想最終在地圖上顯示這些內容。

這是我的建議:

位置

id    -- int 
street_name  -- varchar -- NULL 
postal_code_id -- int  -- NULL 
county_id  -- int  -- NULL 
state_id  -- int 

郵政編碼

id  -- int 
code -- varchar 
geom -- geometry 

id  -- int 
name -- varchar 
geom -- geometry 

的狀態表相似,等等...

正如你所看到的,位置表將決定以任何字段設置的特異性水平。郵政編碼,縣和州表不是通過外鍵綁定在一起(過於複雜以至於無法確定適當的層次結構),但是,我相信有一種方法可以使用幾何字段來確定它們之間的關係(例如,查詢某個郵政編碼包含在什麼狀態或哪些郵政編碼屬於某個州)。

我認爲這是一個很好的設置,因爲如果數據庫增長(可以說我決定在數據庫中包含區或塊的數據),那麼我可以爲該數據添加另一個表,然後向該位置添加另一個外鍵表(例如,block_id)。

有沒有人知道更好的方法來做到這一點?

回答

1

一條街可能屬於兩個不同的縣嗎?或兩個郵政編碼?,在我的國家這是可能的,特別是在城市。如果這是可能的,那麼你的模式將無法工作。

儘管我之前說過,我會添加街道的幾何圖形(開放式街道地圖),而不將其鏈接到郵政編碼或縣甚至州,然後用一個簡單的查詢來交叉幾何圖形在其他表格中可以獲得這些信息,並填充另一張具有該關係的表格。