关闭

创建自己的 OSM.Planet 街道级别地图服务器,汉化地名避免万国语

标签: 服务器postgresql数据库数据库服务器虚拟机server
17827人阅读 评论(17) 收藏 举报
分类:

2012年更新

     经过从2008年以来对OSM的研究与利用,越来越发现OSMGIS的活跃、开放是非常引人注目的事情。尽管缺乏像ARCGIS这样强大的中间服务的支持,其庞大的原始数据集合本身就是一笔可观的财富。

1、硬件准备

     经过测试,导入2012年1月世界范围数据要耗费 200GB以上的磁盘。在拥有8GB存储器、1TB磁盘阵列的服务器上需要近1周的时间(PostgreSQL Shared-Mem 512MB, Work Mem 1024MB, Maintain 512MB),且虚拟机与 PostgreSQL服务器并不在同一机器。(数据库服务器要求专用,才能发挥最好效果) 。

2、网络地图

        Planet.OSM( Open Street Map) 计划是开放源代码的GIS应用,目前经过全世界热心同仁的更新,其底层数据的质量明显提升,精度、数据量均不错。其地图通过网址http://www.openstreetmap.org 可以直观访问,但国内比较慢。不仅如此,如果能够接入Internet, 可以方便的使用其API,支持包括移动设备在内的多种服务。

    http://wiki.openstreetmap.org/wiki/Planet.osm 介绍了她的详细情况。

3、什么情况下需要自己搭建服务器

     这次,我们要讨论的是在公司内部的专用网路上,如何搭建像模像样的 OSM 服务器。适用的范围:
    a、公司内部网络限制了上网,但又需要GIS应用的地方
    b、需要订制 GIS 应用的地方
    c、需要携带到边远地区的便携式计算机上的情况。

  

 4、osm 简介

     OSMGIS 由矢量原始数据服务器、渲染用矢量图元服务器、渲染引擎、瓦片栅格服务器、瓦片版本服务器、Web服务器组成。

     矢量原始数据服务器内存储的是信息完整的矢量数据。   OSMGIS 的底层数据由点、线、面等基本图元构成,这些含有属性(地名等)的几何元素以 XML 格式定期在网站发布: 

   ftp://ftp.spline.de/pub/openstreetmap/
   这些XML格式的图元来自工具"osmosis"导出PostgreSQL数据库的镜像, 这个工具的说明见:
   http://wiki.openstreetmap.org/wiki/Osmosis
   PostgreSQL数据库中的图元对象在 PostGIS的支持下形成供世界各地用户不断完善的数据集。

   渲染用矢量图元服务器、渲染引擎

    由于数据本身都是字符串格式的,无法直接进行显示。为此,有不少中间件(渲染引擎)被设计出来,用于把数据库中的字符图元变成可以浏览的图像,其中最著名的就是 Mapnik。 渲染用矢量图元服务器存放渲染需要的图元的几何信息,数据来自原始数据导出的XML文件,但仅仅导入渲染需要的部分,损失了几何联通等关系信息。像加权最短路径等算法必须使用原始数据。

    Ubuntu上的Mapnik渲染引擎是一个C++库,通过绑定在Python上,提供了简便的接口,只要给出生成图像的比例尺、范围,即可生成png,jpg,gif等格式的图像。Mapnik使用XML文件定制图层,每个图层包含一串SQL语句,以及显示格式定义。比如公路图层就是 select * from 数据表 where 类型=省级公路, 数据用蓝色、9号字显示之类的片段。把一个个图层定义集中起来,放在叫做 OSM.XML的文件里,我们修改这个文件,即可改变渲染的风格。

    瓦片栅格服务器

    为了方便在Web上传输、显示,把世界地图存储为 256 * 256 的一张张贴图,一级比例尺只包含1张(2^0),2级包含 2*2 =4张(2^2),3级为 4*4 = 16张(2^4),4级为8*8=64,2^6张,...直到19级 (2^36) ,包含 这些按照级别、行、列编号的图片被称为“Tile”,就是瓦片。从上面的规模看出,把19级包含的全部瓦片渲染、存储在服务器上是不可能的,实际应用中,仅存储用户访问过的地方。至于大片海洋和荒原,不去渲染。

    瓦片版本服务器

    由于原始数据每天都在更新,所以瓦片也需要不断更新,以体现背后数据的编辑状态。瓦片版本服务器存储了各个瓦片生成时的矢量数据版本,如果矢量数据被编辑,版本服务器会自动定期重新渲染那些过时的瓦片。

    Web服务器

    这个不多说了,展现给用户一个 AJAX的网页,还有一套交互协议(API),我不熟悉啊,有兴趣的何以参考资料。

      综上,OSM系统 的底层数据存储在PostgreSQL服务器中,其服务端定期使用  osmosis 导出XML镜像(或者二进制PBF);为了使矢量数据可视化,人们发明了Mapnik之类的渲染器。由于渲染工作极端占用资源,专门设置了渲染用矢量服务器,仅存储渲染所需的数据;渲染器按照给出的比例尺、范围、图层定义文件OSM.XML把矢量数据画成图;为了节省带宽、提高效率,人们按256*256为单位分割管理栅格数据,按需渲染、定期更新;一组WebService用于提供服务、支持浏览、在线编辑。

5、其他知识

      投影系
   OSM 与 Google-Map 同样采用摩卡托(http://en.wikipedia.org/wiki/Mercator_projection)投影系,这种投影是保角投影,南北极附近是奇异点,无法显示,也算是他的一大缺陷了。

     PostgreSQL与PostGIS

     PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大、特性最丰富和最复杂的自由软件数据库系统。它起源于伯克利(BSD)的数据库研究计划,目前是最重要的开源数据库产品开发项目之一, 有着非常广泛的用户。PostGIS在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力,相当于Oracle的spatial部分。PostGIS最大的特点是符合并且实现了OpenGIS的一些规范,是最著名的开源GIS数据库。


6、需求牵引的简化搭建步骤

      对于仅需要地图作为底图的应用,搭建渲染用原始数据服务器、渲染引擎即可,至于瓦片直接用Python脚本生成。如果需要编辑矢量数据、实现API,建议参考国外的资料(完整系统搭建),直接签出别人弄好的代码。

     数据导入与基本设置

     渲染用数据服务器搭建, 老外已经写得不能再详细了:http://switch2osm.org/serving-tiles/manually-building-a-tile-server/

     weait 上的资料不知道怎么了,打不开了。


     前一段时间由于工作很忙,没有时间继续研究了。前面也是浅尝辄止一下,发现以前的参考资料很多不能访问了。现在把网址集中说一下:

     a、数据: 点击打开链接http://wiki.openstreetmap.org/Planet.osm
     b、区域数据:点击打开链接http://download.bbbike.org/osm/
                         可以自己选择区域下载(第三项),很方便
     c、地图XML格式介绍:点击打开链接http://wiki.openstreetmap.org/wiki/OSM_XML

     汉化与地名处理

    OSMGIS数据是万国语言版的,建议使用世界地名大辞典进行自动汉化。我的做法是下载

    http://download.csdn.net/detail/goldenhawking/4556453

    导入到GIS库,而后写程序用正则式模糊匹配替换。别忘了新建一个字段,备份老的name

    实现外围程序

   客户端有很多实现方法,如果只是作为底图,则原理很简单,通过读取特定比例尺下的瓦片,在屏幕上拼接显示。对没有渲染的瓦片,登记入数据库,由渲染程序生成。这里在Ubuntu 11.10 下,采用 mapnik 0.7 (现在出了2.0,但是由于图层定义文件还是0.7的,所以没有采用)搭建了虚拟机。由于是底图需求,连webservice 也是用fcgi写的短小的几十行代码,所有功能就是看看目录里有没有请求的瓦片,有的话返回数据,没有就在版本数据库(也是最傻的)记一下,返回一个“瓦片正在渲染”的白矩形。

    比较复杂的是客户端,从底层实现标图、量测和使用ARCGIS之类的强大服务完全不同,很考验对架构的把握。下面晒一晒我写的外围程序。

设置好共享文件夹后再开机哦

客户端(windows)

 

客户端(Ubuntu, QT)

 

渲染器外壳

5
0
查看评论

为OpenStreetMap瓦片服务器添加3弧秒全球DEM图层

在上一篇文章里,我们试着测试了局部3弧秒(即1/1200度)分辨率的 DEM等高线嵌入OSM图层的效果。下面,来分享一下批量导入全球的DEM数据。
  • goldenhawking
  • goldenhawking
  • 2017-03-16 12:44
  • 1484

基于OpenStreetMap的地图初步实现

  • 2016-01-10 21:39
  • 4.93MB
  • 下载

下载OSM地图数据并导入至postgreSQL数据库中(Ubuntu16.04LTS)

1.下载OSM地图数据。 使用下列指令可以下载整个地球的数据。wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf如果你想下载个别国家或部分区域的数据,点击http://download.geofabrik.de/。可以...
  • sinat_23246437
  • sinat_23246437
  • 2017-01-11 11:27
  • 1079

搭建开源地图服务 - 利用OSMGIS和iD

研究开源地图组建,服务搭建,初步方案为: 服务器操作系统:CentOS7 GIS数据库支持:PostgreSQL9.x + PostGIS 地图数据:OSM 地图瓦片渲染:Mapnik + CartoCSS WMS服务:MapProxy TileStache WEB前端:OpenLayers ...
  • xuaa
  • xuaa
  • 2016-08-20 17:23
  • 2313

搭建Openstreetmap地图服务器(Ubuntu 16.04LTS)

国内关于OpenStreetMap的资料较少,主要通过整理国外网站资料加自己多方尝试,终于成功搭建环境.本教程在Ubuntu16.04中进行了测试,运行良好。Openstreetmap服务器需要至少2GB RAM以及40GB的内存。
  • sinat_23246437
  • sinat_23246437
  • 2017-01-11 14:44
  • 729

在Ubuntu16-04版本上搭建离线免费地图osm(一)

开放街道图OpenStreetMap,也就是osm,是一。个网上地图协作计划,目的是创造一内容自由且能让所有人都编辑的世界地图。这个教程会叫你如何搭建一个自己的OSM服务器,配置是Ubuntu16.04,2GB RAM,40GB硬盘空间。step1:升级软件sudo apt update sudo ...
  • dream_allday
  • dream_allday
  • 2017-03-15 21:12
  • 1168

开源地图OSM

OSM全称为OpenStreetMap,中文维基页面:http://zh.wikipedia.org/wiki/OpenStreetMap,其在线地图网址:http://www.openstreetmap.org/。 OpenStreetMap是在2004年7月由史蒂夫·克斯特始...
  • XiaoFan_Ding
  • XiaoFan_Ding
  • 2014-11-05 22:48
  • 1226

共享免费世界地图OpenStreetMap(OSM)

OpenStreetMap(网址:http://www.openstreetmap.org/)是一个可供自由编辑的世界地图,它是由您这样的用户创造的。OpenStreetMap 允许您查看,编辑或者使用世界各地的地理数据来帮助您。 OpenStreetMap 的主机是由 UCL VR Centre ...
  • liyan_gis
  • liyan_gis
  • 2011-02-12 14:36
  • 11288

创建自己的 OSM.Planet 街道级别地图服务器,汉化地名避免万国语

2012年更新      经过从2008年以来对OSM的研究与利用,越来越发现OSMGIS的活跃、开放是非常引人注目的事情。尽管缺乏像ARCGIS这样强大的中间服务的支持,其庞大的原始数据集合本身就是一笔可观的财富。 1、硬件准备     ...
  • tian_110
  • tian_110
  • 2014-12-20 10:15
  • 469

百度地图省市县乡镇街道对应的zoom级别

转自:http://www.cnblogs.com/yz-blog/p/6484595.html
  • yb305
  • yb305
  • 2017-03-13 11:31
  • 1697
    个人资料
    • 访问:352017次
    • 积分:4822
    • 等级:
    • 排名:第7056名
    • 原创:98篇
    • 转载:3篇
    • 译文:0篇
    • 评论:338条
    最新评论