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(可选的)定义了元素间的关系。
- Node 通过经纬度定义了一个地理坐标点。同时,还可以height=标示物体所海拔;通过layer= 和 level=,可以标示物体所在的地图层面与所在建筑物内的层数;通过place= and name=*来表示对象的名称。同时,way也是通过多个点(node)连接成线(面)来构成的。
- Way
通过2-2000个点(nodes)构成了way。way可表示如下3种图形事物(非闭合线(Open polyline )、闭合线(Closed polyline)、区域(Area ))。对于超过2000 nodes的way,可以通过分割来处理。- Open polyline
非闭合线:收尾不闭合的线段。通常可用于表示现实中的道路、河流、铁路等。 - Closed polyline
闭合线:收尾相连的线。例如可以表示现实中的环线地铁。 - Area
区域:闭合区域。通常使用landuse=* 来标示区域等。
- Open polyline
- Relation
一个Relation是用来描述两个或多个基元的相互关系(nodes, ways 或者其他的relations),相互的关系通过role来定义,包括:- route :定义公路、自行车道、铁路等
- 多个多边形:定义area例如建筑、河堤等
- 边界:装门用来定义行政边界
- 限制:用于描述限制比如“非左转”
- 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。
以上安装包直接官网下载最新版即可
搭建方法
- postgresql+postGIS安装
官网下载postgresql,按照提示一步一步安装即可,快结束的时候勾选stack builder,然后用stack builder安装postGIS插件
这部分很顺利,不再详细讲述,请直接参考教程:Postgresql+Geoserver搭建本地地图服务器(一)/)
需要重点注意是
安装完成后,为了在命令中使用方便我们把Postgresql的bin目录添加到环境变量中,win10很方便,直接搜索框搜索环境变量,把目标目录添加进PATH就行了。
此时在开始菜单打开pgAdmin就可以进入到装好的Postgresql数据库管理工具了,可以在管理界面创建自己的数据库(create database)。
- 利用Osm2pgsql导入osm数据到postgresql
安装好数据库软件,建立了自己的数据库,接下来需要将下载下来的osm数据导入数据库了,由于postgresql数据库不能直接导入osm数据,因此我们需要利用openstreetmap开发的工具Osm2pgsql完成数据导入。安装教程仍参考Postgresql+Geoserver搭建本地地图服务器(一)/)
不过这里并没有那么顺利,遇到了两个问题,记下来
- 第四步添加EPSG: 900913支持时,github上找不到相应的900913文件,后来终于在历史版本中找到了该文件900913.sql所在github目录
- 第五步:添加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)数据搭建一个地图服务