在公司内网上创建自己的 OSM.Planet 街道级别地图服务器及其客户端程序

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介:

转自我的BLOG http://blog.csdn.net/goldenhawking/article/details/6402775
 最近经过陛下点拨,涉猎了“OpenStreetMap”,做了不少业余研究,把成果给大家分享一下,特别是提供搭建好的客户端-服务器框架,以及中国国内的OSM开放地图范例。

 

为什么只有中国的??

 

  原因很简单,  由于导入世界范围数据要耗费 100GB以上的磁盘。经过我亲自测试,如果需要导入世界数据的话,在拥有4GB存储器、1TB磁盘阵列的HP 8核服务器上需要近1周的时间(PostgreSQL Shared-Mem 128MB, Work Mem 512MB, Maintain 512MB),且虚拟机与 PostgreSQL服务器并不在同一机器。(数据库服务器要求专用,才能发挥最好效果) 。

    尽管提供的仅是导入中国国内数据的范例服务器, 但是您可以从网站下载完整镜像(2011年4月的约16GB),而后导入本范例的服务器,即可立刻拥有世界范围的数据访问。在导入之前请详细阅读光盘中的文档,特别是 
 1、确保PostgreSQL 的资源充分
 2、确保导入期间PostgreSQL 的"autovacuum" 已经关闭。
 3、确保不要断电

 

我创建的完整范例镜像链接(尽量保持开机上传,请大家有耐心!虚拟机所有口令全部是 1234567, 包括开机和数据库管理员。数据库渲染用户osmrender,口令osmrender):


ed2k://|file|Planet.OSM_Server_and_Client_by_goldenhawking(OSM%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%8A%E8%8C%83%E4%BE%8B%E5%AE%A2%E6%88%B7%E7%AB%AF).iso|4132896768|F6F5774B8E2FD4032F997523FB7BC097|h=PNZKU5WEIGMUUCOQSLFE2EOWMZCXORAL|/

 

说明和截图:

ed2k://|file|Planet.OSM_Server_and_Client_by_goldenhawking(OSM%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%8A%E8%8C%83%E4%BE%8B%E5%AE%A2%E6%88%B7%E7%AB%AF).iso.%E8%AF%B4%E6%98%8E%E5%92%8C%E6%88%AA%E5%9B%BE.rar|619839|32DD6E70287DFEE35E77F77DACF23EEB|h=QBAQ6QZNPOBDP4KL2ZGMD2L5ST5C44LP|/ 

 

    Planet.OSM( Open Street Map) 计划是开放源代码的GIS应用,目前经过全世界热心同仁的更新,其底层数据的质量明显提升,精度、数据量均不是小打小敲的商业地图应用可比拟的(比GoogleMap等还是要朴素)。其地图通过网址 http://www.openstreetmap.org 可以直观访问。不仅如此,如果能够接入Internet, 可以方便的使用其API,支持包括移动设备在内的多种服务。
    http://wiki.openstreetmap.org/wiki/Planet.osm 介绍了她的详细情况。这次,我们要讨论的是在公司内部的专用网路上,如何搭建像模像样的 OSM 服务器。适用的范围:
    1、公司内部网络限制了上网,但又需要GIS应用的地方
    2、需要订制 GIS 应用的地方
    3、需要携带到边远地区的便携式计算机上的情况。

    由于是轻量级的应用,我不实现完整的API, 只是注重显示、运用地图本身作为底图。

 

1、osm 体系一分钟介绍
    在开始之前,有必要介绍一下OSM的体系。(看过英文资料 http://wiki.openstreetmap.org/wiki/Planet.osm的可以略过)。OSMGIS 的底层数据由点、线、面等基本图元构成,这些含有属性(地名等)的几何元素以 XML 格式定期在网站发布:  
   ftp://ftp.spline.de/pub/openstreetmap/
   这些XML格式的图元来自工具"osmosis"导出PostgreSQL数据库的镜像, 这个工具的说明见:
   http://wiki.openstreetmap.org/wiki/Osmosis
   PostgreSQL数据库中的图元对象在 PostGIS的支持下形成供世界各地用户不断完善的数据集。然而,数据本身都是字符串格式的,无法直接进行显示。为此,有不少中间件(渲染引擎)被设计出来,用于把数据库中的字符图元变成可以浏览的图像,其中最著名的就是 Mapnik。 本次,我们采用Ubuntu上的Mapnik作为渲染引擎。 Mapnik 本身是一个C++库,通过绑定在Python上,提供了简便的接口,只要给出生成图像的比例尺、范围,即可生成png,jpg,gif等格式的图像。

 

 

2、投影系
   OSM 与 Google-Map 同样采用摩卡托(http://en.wikipedia.org/wiki/Mercator_projection)投影系,这种投影是保角投影,南北极附近是奇异点,无法显示,也算是他的一大缺陷了。第0级比例尺全世界地图被承载在 256 * 256 大小的图片上,第1级比例尺为 512*512, 分为 两行、两列256*256的图片。第2级比例尺为 1024*1024,即4*4=16个256*256的图片...以此类推, 每一级拥有 2^n 行, 2^n 列个瓦片组成,左上角编号为0,0,右下角为  2^n-1,2^n-1. 具体编号参见更多资料。

 

3、详细搭建方法
   老外已经写得不能再详细了,见http://weait.com/content/build-your-own-openstreetmap-server, 直接按照他说的做,准OK!

 

4、网页服务与客户端程序
   客户端有很多实现方法,这里给出的是 Windows 下的  VC++ 2008/2010的工程。原理很简单,通过读取特定比例尺下的瓦片,在屏幕上拼接显示。对没有渲染的瓦片,登记入数据库,由渲染程序生成。范例中演示的比较简单,希望起到抛砖引玉的效果!

 

注意: 所有口令都是1234567,确保VMWare 共享文件夹可用!光盘中附带了VM软件!界面:




http://bbs.csdn.net/topics/370157384

本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/5556246.html如需转载请自行联系原作者


jiahuafu

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
缓存 监控 Java
Java Socket编程最佳实践:优化客户端-服务器通信性能
【6月更文挑战第21天】Java Socket编程优化涉及识别性能瓶颈,如网络延迟和CPU计算。使用非阻塞I/O(NIO)和多路复用技术提升并发处理能力,减少线程上下文切换。缓存利用可减少I/O操作,异步I/O(AIO)进一步提高效率。持续监控系统性能是关键。通过实践这些策略,开发者能构建高效稳定的通信系统。
|
1月前
|
Java 应用服务中间件 开发者
【实战指南】Java Socket编程:构建高效的客户端-服务器通信
【6月更文挑战第21天】Java Socket编程用于构建客户端-服务器通信。`Socket`和`ServerSocket`类分别处理两端的连接。实战案例展示了一个简单的聊天应用,服务器监听端口,接收客户端连接,并使用多线程处理每个客户端消息。客户端连接服务器,发送并接收消息。了解这些基础,加上错误处理和优化,能帮你开始构建高效网络应用。
|
1月前
|
IDE Java 开发工具
从零开始学Java Socket编程:客户端与服务器通信实战
【6月更文挑战第21天】Java Socket编程教程带你从零开始构建简单的客户端-服务器通信。安装JDK后,在命令行分别运行`SimpleServer`和`SimpleClient`。服务器监听端口,接收并回显客户端消息;客户端连接服务器,发送“Hello, Server!”并显示服务器响应。这是网络通信基础,为更复杂的网络应用打下基础。开始你的Socket编程之旅吧!
|
1月前
|
Java
Java Socket编程与多线程:提升客户端-服务器通信的并发性能
【6月更文挑战第21天】Java网络编程中,Socket结合多线程提升并发性能,服务器对每个客户端连接启动新线程处理,如示例所示,实现每个客户端的独立操作。多线程利用多核处理器能力,避免串行等待,提升响应速度。防止死锁需减少共享资源,统一锁定顺序,使用超时和重试策略。使用synchronized、ReentrantLock等维持数据一致性。多线程带来性能提升的同时,也伴随复杂性和挑战。
|
1月前
|
安全 Java 网络安全
Java Socket编程教程:构建安全可靠的客户端-服务器通信
【6月更文挑战第21天】构建安全的Java Socket通信涉及SSL/TLS加密、异常处理和重连策略。示例中,`SecureServer`使用SSLServerSocketFactory创建加密连接,而`ReliableClient`展示异常捕获与自动重连。理解安全意识,如防数据截获和中间人攻击,是首要步骤。通过良好的编程实践,确保网络应用在复杂环境中稳定且安全。
|
19天前
|
缓存 弹性计算 数据库
阿里云2核4G服务器支持多少人在线?程序效率、并发数、内存CPU性能、公网带宽多因素
2核4G云服务器支持的在线人数取决于多种因素:应用效率、并发数、内存、CPU、带宽、数据库性能、缓存策略、CDN和OSS使用,以及用户行为和系统优化。阿里云的ECS u1实例2核4G配置,适合轻量级应用,实际并发量需结合具体业务测试。
7 0
阿里云2核4G服务器支持多少人在线?程序效率、并发数、内存CPU性能、公网带宽多因素
|
22天前
|
网络协议 网络架构
【网络编程入门】TCP与UDP通信实战:从零构建服务器与客户端对话(附简易源码,新手友好!)
在了解他们之前我们首先要知道网络模型,它分为两种,一种是OSI,一种是TCP/IP,当然他们的模型图是不同的,如下
|
1月前
|
Java 数据安全/隐私保护
深入剖析:Java Socket编程原理及客户端-服务器通信机制
【6月更文挑战第21天】Java Socket编程用于构建网络通信,如在线聊天室。服务器通过`ServerSocket`监听,接收客户端`Socket`连接请求。客户端使用`Socket`连接服务器,双方通过`PrintWriter`和`BufferedReader`交换数据。案例展示了服务器如何处理每个新连接并广播消息,以及客户端如何发送和接收消息。此基础为理解更复杂的网络应用奠定了基础。
|
1月前
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送"Hello, Server!"后关闭。注意Android中需避免主线程进行网络操作。
49 4
|
14天前
|
安全 网络协议 网络安全
SSL(Secure Sockets Layer)是一种安全协议,用于在客户端和服务器之间建立加密的通信通道。
SSL(Secure Sockets Layer)是一种安全协议,用于在客户端和服务器之间建立加密的通信通道。

热门文章

最新文章