GIS

OpenStreetMap

开放街道图(OpenStreetMap,简称OSM)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图,其osm数据开源,可以自由下载使用。https://www.openstreetmap.org/

北京osm数据beijing.osm
中国osm数据china.osm

优势

  • 地图数据开源,人人可以编辑,并且可以完整的下载,部署私有的地图服务器
  • 内容丰富,比起ESRI Shapefiles的点、面、线,支持更多复杂的元素
  • 生态圈活跃,从地图数据、数据库、地图渲染、瓦片服务器、前端API,到桌面、Web地图设计工具,具有大量优秀的开源组件

osm数据结构

OpenStreetMap包括空间数据以及属性数据。其中空间数据主要包括三种:点(Nodes)、路(Ways)和关系(Relations),这三种原始构成了整个地图画面。其中,Nodes定义了空间中点的位置;Ways定义了线或区域;Relations(可选的)定义了元素间的关系。

  1. Node 通过经纬度定义了一个地理坐标点。同时,还可以height=标示物体所海拔;通过layer= 和 level=,可以标示物体所在的地图层面与所在建筑物内的层数;通过place= and name=*来表示对象的名称。同时,way也是通过多个点(node)连接成线(面)来构成的。
  2. Way
    通过2-2000个点(nodes)构成了way。way可表示如下3种图形事物(非闭合线(Open polyline )、闭合线(Closed polyline)、区域(Area ))。对于超过2000 nodes的way,可以通过分割来处理。
    • Open polyline
      非闭合线:收尾不闭合的线段。通常可用于表示现实中的道路、河流、铁路等。
    • Closed polyline
      闭合线:收尾相连的线。例如可以表示现实中的环线地铁。
    • Area
      区域:闭合区域。通常使用landuse=* 来标示区域等。
  3. Relation
    一个Relation是用来描述两个或多个基元的相互关系(nodes, ways 或者其他的relations),相互的关系通过role来定义,包括:
    • route :定义公路、自行车道、铁路等
    • 多个多边形:定义area例如建筑、河堤等
    • 边界:装门用来定义行政边界
    • 限制:用于描述限制比如“非左转”
  4. Tag
    标签不是地图基本元素,但是各元素都通过tag来记录数据信息。通过’key’ and a ‘value’来对数据进行记录。例如,可以通过highway=residential来定义居住区道路;同时,可以使用附加的命名空间来添加附加信息,例如:maxspeed:winter=*就表示冬天的最高限速。

数据下载

GeoFabrik:http://www.geofabrik.de/

Metro Extracts:http://metro.teczno.com/

HOT Exports:http://hot.openstreetmap.org/

BBBike:http://extract.bbbike.org/


GIS体系结构

  • 客户端 - 这里所说的客户端是多样化的,可以是 Web 客户端,移动设备或者是通过 HTTP 连接到 Internet 服务或连接到 GIS Server 的桌面应用程序。
  • Web 服务器 – Web 服务器包含 Web 应用的部署,以及 Web 服务,它们均使用 GIS Server 上的服务资源。
  • GIS 服务器 – GIS 服务器主要是提供了地理信息可视化、空间数据管理及分析等一系列服务
  • GIS 渲染引擎– GIS 渲染引擎能够将地图相关数据可视化,并且提供给用户可交互的平台。
  • 空间数据存储库 – 空间数据存储库可以是不同的数据形式,包括空间数据库、矢量数据文件和光栅数据文件。

系统搭建

系统环境 Windows10 64bit

所需工具

  • postgresql+postGIS——Postgresql是一种对象关系型数据库,具备地理信息处理扩展,从而可实现对地理信息的存储;postgis是一个空间数据库,它扩展自Postgresql对象关系型数据库,它添加了地理信息对象通过本地的SQL查询。因为在安装Postgresql是可以选择下载安装postgis所以它是可选的

  • QGIS——

  • Mapserver
  • OpenLayers
  • osm2pgsql——是由OpenStreetMap开发的一个命令行工具负责将OSM数据导入到基于PostgresSql的Postgis的数据库中,这样GeoServer才能调用数据发布服务器。其次我们还要指定osm2pgsql的gitHub地址因为我们需要的两个文件在里面可以找到一个是900913.sql一个是default.style。

以上安装包直接官网下载最新版即可

搭建方法

  1. postgresql+postGIS安装

官网下载postgresql,按照提示一步一步安装即可,快结束的时候勾选stack builder,然后用stack builder安装postGIS插件
这部分很顺利,不再详细讲述,请直接参考教程:Postgresql+Geoserver搭建本地地图服务器(一)/)

需要重点注意
安装完成后,为了在命令中使用方便我们把Postgresql的bin目录添加到环境变量中,win10很方便,直接搜索框搜索环境变量,把目标目录添加进PATH就行了。
此时在开始菜单打开pgAdmin就可以进入到装好的Postgresql数据库管理工具了,可以在管理界面创建自己的数据库(create database)。

  1. 利用Osm2pgsql导入osm数据到postgresql

安装好数据库软件,建立了自己的数据库,接下来需要将下载下来的osm数据导入数据库了,由于postgresql数据库不能直接导入osm数据,因此我们需要利用openstreetmap开发的工具Osm2pgsql完成数据导入。安装教程仍参考Postgresql+Geoserver搭建本地地图服务器(一)/)

不过这里并没有那么顺利,遇到了两个问题,记下来

  1. 第四步添加EPSG: 900913支持时,github上找不到相应的900913文件,后来终于在历史版本中找到了该文件900913.sql所在github目录
  2. 第五步:添加OSM数据到数据库 osm2pgsql -U postgres -d osm -s -S ./default.style ./shanghai.osm时提示no password supplied 无法连接到数据库。

参考了博客PostgreSQL+PostGIS+OpenStreeMap+GeoServer环境搭建给出的解决办法:在C:\Users\asus\AppData\Roaming\postgresql路径下有一个pgpass.conf文件,每个用户在登陆postgres并且保存密码后都会在该用户目录下保存一个pgpass.conf 文件,里面有该用户的密码按照如下格式进行设置:hostname:port:database:username:password
例如:localhost:5432:osm:postgres:123456

在搜索栏输入“%AppData%”回车进入文件夹,但是发现Roaming文件夹下并没有postgresql以及下面的pgpass.conf,查了很久,最后直接在AppData\Roaming文件夹下自己建postgresql\pgpass.conf按上面的方法配置好久可以了

参考资料

利用 OpenScales+MapServer+PostGIS 快速构建GIS应用

Postgresql+Geoserver搭建本地地图服务器(一)/)

利用OpenStreetMap(OSM)数据搭建一个地图服务

PostgreSQL+PostGIS+OpenStreeMap+GeoServer环境搭建

Mr.An 的专栏

黄大仙儿的专栏