osm.pbf

时间:2018-01-29 00:55:33

标签: c# sql-server lucene openstreetmap

我正在尝试从我当前项目的Openstreetmap提取开发一个地址查找API(可能是Json格式)。我的首选语言是C#。

如果有人能解释我osm.pbf提取的数据/节点关系。我已经阅读了wiki,但无法弄清楚这种关系或结构,因此也无法用omssharp做很多事情。

因此,如果有人可以解释我或给我一个任何语言的例子(我只需要理解逻辑/关系)我如何根据建筑物名称/地址字符串/邮政编码进行搜索/查询,并获得相关的行作为回报。正如谷歌地址查询工作,你键入一个地址,它给你建议。

如果有人可以帮我弄清楚数据关系,我宁愿使用任何索引方法(如lucene)来加快查询速度,而不是在SQL Server上加载。

另外,如果可能的话,找出两个地址之间的行驶距离/路线的逻辑非常好。

仅供参考:我使用的是great_britain.osm.pbf(985mb压缩),我可以完全访问Ubuntu服务器,可以安装pgSql。尝试从具有24GB内存,2x6内核2.9ghz cpu和1tb SSD的工作站导入SQL Server Express,但是使用osm2sql会导致内存不足。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:2)

原始OSM数据仅用于地理编码。您必须首先预处理这些数据。

原因是addresses in OSM不必以完整格式指定。例如,使用广泛使用的Karlsruhe Schema,只需指定门牌号和街道名称即可定义单个地址。其他信息,如城市,邮政编码和国家/地区可以留空。这种方法有效,因为在OSM中有单独的administrative boundaries用于定义市镇,县,国家等。

大多数OSM-based geocoders在将OSM数据导入其数据库时执行预先计算步骤。此步骤通过将各个地址标记与其包含的管理边界进行比较来计算完整地址层次结构。

不要重新发明轮子。创建一个好的地理编码器真的很难。请改用现有的基于OSM的地理编码器之一。

答案 1 :(得分:0)

我遇到了同样的问题,所以我创建了一个SQL查询可以为您做到这一点:

https://github.com/francesco1119/OSM_to_MSSQL

您还可以在存储过程中使用它,并每天刷新数据。