我正在设置一个位置感知应用程序,如此处所述。从那以后,我学到了更多关于 GIS 应用程序的知识,并决定更改我最初提出的设置的一些内容——我现在将使用 postgresql 数据库,使用 postgis 扩展来允许几何字段,并使用TIGER/Line 数据来填充它。TIGER/Line 数据似乎以不同的分辨率(层)提供了不同的数据集——有州、县、邮编、街区等的数据。我需要一种方法来使用最精细的粒度分辨率将帖子与地址相关联.
例如,如果可能,我想将帖子与特定街道相关联(最高分辨率)。如果不是街道,则为特定的邮政编码(不太具体)。如果不是邮政编码,则为特定县(不太具体),依此类推。旁注:我想最终将这些都显示在地图上。
这就是我的建议:
地点
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)。
有人知道更好的方法吗?