Postgresql 使用PostGIS将帖子分配到位置的好方法

Postgresql 使用PostGIS将帖子分配到位置的好方法,postgresql,database-design,postgis,shapefile,Postgresql,Database Design,Postgis,Shapefile,如前所述,我正在设置一个位置感知应用程序。从那以后,我学到了很多关于GIS应用程序的知识,并决定对我最初提议的设置做一些更改——我现在将使用postgresql数据库,使用postgis扩展来允许几何字段,并使用TIGER/Line数据来填充它。TIGER/Line数据似乎以不同的分辨率(层)提供不同的数据集——有州、县、ZIP、块等的数据。我需要一种方法,使用尽可能精细的分辨率将帖子与地址关联起来 例如,如果可能的话,我想把一个帖子和一条特定的街道联系起来(最好的分辨率)。如果不是街道,则是特

如前所述,我正在设置一个位置感知应用程序。从那以后,我学到了很多关于GIS应用程序的知识,并决定对我最初提议的设置做一些更改——我现在将使用postgresql数据库,使用postgis扩展来允许几何字段,并使用TIGER/Line数据来填充它。TIGER/Line数据似乎以不同的分辨率(层)提供不同的数据集——有州、县、ZIP、块等的数据。我需要一种方法,使用尽可能精细的分辨率将帖子与地址关联起来

例如,如果可能的话,我想把一个帖子和一条特定的街道联系起来(最好的分辨率)。如果不是街道,则是特定的邮政编码(不太具体)。如果不是邮政编码,则是特定的县(不太具体),依此类推。旁注:我想最终在地图上显示所有这些

我的建议如下:

地点

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
邮政编码

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

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
状态表是相似的,等等

如您所见,locations表将通过设置任何字段来决定特定性的级别。邮政编码、县和州表不是通过外键绑定在一起的(太复杂,无法确定在任何地方都有效的适当层次结构),但是,我相信有一种方法可以使用几何体字段确定它们的关系(例如,查询某个邮政编码所在的州或某个州的邮政编码)

我认为这是一个很好的设置,因为如果数据库增长(假设我决定在数据库中包含地区或街区的数据),那么我可以为该数据添加另一个表,然后向locations表添加另一个外键(例如block_id)


有人知道更好的方法吗?

一条街道可能属于两个不同的县吗?或者两个邮政编码吗?在我的国家,这是可能的,特别是在城市。如果可能的话,你的模式就不起作用了

不管我之前说过什么,我会添加街道的几何图形(开放街道地图),而不将其链接到邮政编码、县甚至州,然后通过一个简单的查询,将街道的几何图形与其他表相交,您可以获得该信息,并填充另一个具有该关系的表