OSM逆地理服务器搭建(三)之国外地址解析

在前面的几篇博文中我们讲到如何在Windows与Liunx下导入OpenStreetMap地图数据,接下来我们队导入的数据该怎么使用进行学习。

利用OpenStreetMap进行地址解析

由于谷歌地图的地址解析是按调用次数收费的,而且费用还不低,作为像我们这样的中小型车联网智能硬件提供商来说这个费用是很难承受。有人会问为什么不能使用百度与高德地图呢,就百度地图而言,目前虽然也支持很多国外国家定位,但是效果不是很好,第一定位不准,第二地址解析名称不对。高德就不用说了,高德地图目前只能在国内使用。
如何摆脱这个困境,似乎成为了我们这些中小型车联网服务提供商需要面对的一个重要的问题。就目前而言,在国外能达到谷歌对国家区域的覆盖以及解析准确度,目前只有OpenStreetMap可以做到。我之前对国外几个地区的地址解析进行了对比,发现很多地方,OpenStreetMap解析的精确更好。
在这里插入图片描述
OSM逆地理服务器搭建(二)之OSM地图服务器搭建博文中也有提到如何使用搭建起来的OpenStreetMap服务。
http://你服务的IP地址/nominatim/reverse?format=jsonv2&accept-language=en&lat=你的纬度值(如上述表格第一行中的-5.755867) &lon=你的经度值(如上述表格第一行中的34.829398)
得到的结果如下所示:
在这里插入图片描述
返回的是Json格式的数据,一般我们只需要取display_name的内容即可。即:T3, Muhalala, Manyoni, Singida, Central Zone, Tanzania

国外客户如何使用我们的地图服务

由于我国对外带宽很少,我们很难访问到国外的网站,相应的在国外也很难访问到国内的网站,这样以来我们搭建的地图服务岂不是不能使用?如果有条件的情况下,大家可以购买云服务器来进行搭建,例如:阿里云,亚马逊等等。不过这样的一台云服务器价格保守估计在每年5~6万RMB的费用。下面我说一下,我当时是怎么做到的。
我们公司的服务器使用的是阿里云,因为对国外提供服务,所以当时我们在系统部署的时候,在华南一区,以及香港区域都有创建ECS,国外客户访问的是我们香港的ECS,国内客户访问的是华南一区的。
然后我讲你地理服务进行了封装与后台接口一起发布到了服务器,这样国外客户进行翻地理的时候会先请求香港的服务器,然后通过香港服务器的后台再请求到我搭建的这台OpenStreetMap服务器上。其实,说白了就是进行了一次中转。
目前而言,客户都能正常使用,后面我在考虑是不是地图展示方面也将谷歌替换成OpenStreetMap。这样以来就可以完全摆脱谷歌的限制。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现地理编码,我们需要使用一些Java库来解析OSM PBF文件和处理地理数据。下面是一个基本的Java示例,用于解析OSM PBF文件并将其转换为可用于地理编码的数据: ```java import java.io.FileInputStream; import java.io.IOException; import java.util.List; import com.graphhopper.reader.osm.GraphHopperOSM; import com.graphhopper.reader.osm.OSMReader; import com.graphhopper.routing.util.EncodingManager; import com.graphhopper.storage.GraphHopperStorage; import com.graphhopper.util.Helper; import com.graphhopper.util.Parameters; public class OSMParser { public static void main(String[] args) { // 文件路径 String osmFile = "path/to/osm.pbf"; // 存储路径 String graphFolder = "path/to/graph/folder"; // 创建GraphHopperOSM对象 GraphHopperOSM hopper = new GraphHopperOSM().forServer(); // 配置 hopper.setDataReaderFile(osmFile); hopper.setGraphHopperLocation(graphFolder); hopper.setEncodingManager(EncodingManager.create("car")); // 解析文件 hopper.importOrLoad(); // 获取地理编码信息 List<String> locations = hopper.getLocationIndex().find("Berlin"); // 打印结果 for (String location : locations) { System.out.println(location); } // 关闭 hopper.close(); } } ``` 这个示例使用了GraphHopper和OpenStreetMap的Java库来解析OSM PBF文件。GraphHopper是一个流行的Java库,用于路由和地理编码。在示例中,我们创建了一个GraphHopperOSM对象,然后使用OSMReader来解析OSM PBF文件并将其导入内存。然后,我们使用GraphHopperOSM对象的getLocationIndex()方法来获取地理编码信息,并在控制台上打印结果。 需要注意的是,这只是一个基本的示例。实际应用中,您可能需要更复杂的地理编码算法,并且需要使用更多的地理数据来进行编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鱼>

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值