【发布时间】:2013-11-30 05:37:02
【问题描述】:
我想用来自openstreetmap的数据查询postgis数据库的地址,检查数据库中是否存在这样的地址,如果存在,获取坐标。使用渗透从 .pbf 文件填充数据库。这是数据库http://pastebin.com/Yigjt77f 的架构。我有城市名称、街道名称和街道编号形式的地址。对我来说最重要的是这张桌子:
CREATE TABLE node_tags (
node_id BIGINT NOT NULL,
k text NOT NULL,
v text NOT NULL
);
k 列是标签的形式,我感兴趣的是:addr:housenumber、addr:street、addr:city,v 是对应的值。首先,我正在搜索城市名称是否与数据库中的一个匹配,而不是在结果集中我正在搜索街道和门牌号码。问题是我不知道如何进行 SQL 查询,只需询问一次即可获得此结果。我可以首先只询问城市名称,获取与我的城市匹配的所有 node_id 并将它们保存在 java 程序中,而不是查询每个找到的(匹配我的城市)id_number(来自我的 java 程序的列表)街道,依此类推.这种方式真的很慢,因为要求更详细的信息(城市比街道比数字)我必须进行越来越多的查询,而且我必须检查很多地址。一旦我有匹配的 node_id 我可以很容易地找到坐标,所以这不是问题。
此表示例:
node_id | k | v <br>
123 | addr:housenumber | 50
123 | addr:street | Kingsway
123 | addr:city | London
123 | (some other stuff) | .....
100 | addr:housenumber | 121
100 | addr:street | Edmund St
100 | addr:city | London
我希望我清楚地解释了我的问题。
【问题讨论】:
标签: sql postgresql openstreetmap postgis