MapBox+iServer构建地图服务

最近终于闲下来,偷偷做点自己的项目。于是向表弟勒索了支付宝账号,开了个学生服务器。接下来搞点事情。去Github上转一转,遭遇一只叫MapBox的开源项目(附上GitHub地址 https://github.com/mapbox/mapbox-gl-js)。发现MapBox渲染的地图效果还不错,但是由于是国外的服务器,数据服务完全访问不到,于是开始了步一个构建地图服务的不归路。走了很多弯路,下面直接挑干货。
1.下载MapBox官网的MapBox-gl的Demo 会发现相应的代码


但是Mapbox的服务器访问不了,我们只能找另外的服务了。

2.OpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。OSM也属于瓦片地图服务,支持MapBox的渲染。我们可以从OSM服务器下载相应的瓦片。

"sources": {
  "osm-tiles": {
    "type": "raster",
    'tiles': [
          "http://c.tile.openstreetmap.org/{z}/{x}/{y}.png" 
      ],
    'tileSize': 256
  }
}

mapBox-gl的style支持第三方的资源 可以在style中添加“sources”属性,type指定为“raster” 表示栅格切片数据源。由 Mapbox 托管的数据源,the "url" 值应以 mapbox://mapid形式表示。我们选择用osm托管的数据源。osm链接支持a.tile,b.tile,c.tile(具体区别和应用可维基百科查询)
我还在添加了geocoder插件可用于地图地点的搜索mapbox-gl-geocoder链接
这样我们就可以在服务器上部署一个tomcat项目。如下

MapBox+iServer构建地图服务_第1张图片
地图.png

但是osm的数据源访问的数据有点慢,再搞点事情。

3.iServer 是基于跨平台 GIS 内核的云 GIS 应用服务器,是云端一体化技术的重要组成部分。我们可以用IServer做一个缓存服务。(iServer 是收费的但是可以试用3个月)

docker search iserver  //安装完docker后搜索iserver
docker pull supermap/iserver
docker run --name iserver1 -d -p 1521:8090 -v /home/data:/home supermap/iserver  
// -p表示映射端口 前面表示宿主机的端口 后面表示容器端口  
// -v表示 宿主机和容器的共享文件
// 不要问我为什么用1521ORACAL端口 因为我忘了设置阿里云安全组了 手动滑稽 

进入后配置管理员账号,进入管理员界面

MapBox+iServer构建地图服务_第2张图片
发布服务.png

选择rest服务
MapBox+iServer构建地图服务_第3张图片
缓存.png

SMTiles 表示缓存图层生成sqlite数据库本地文件
然后进入服务列表选择我们刚创建的服务,默认有normal,transport,humanitarian,cycle四种样式
但是没有想要的mapbox样式 于是在服务中配置
MapBox+iServer构建地图服务_第4张图片
QQ截图20170930231748.png

我选择了mapbox的map_outdoor样式
http://c.tiles.mapbox.com/v4/mapbox.outdoors/{z}/{x}/{y}.png?access_token={key}
然后修改js中的链接地址为 http://{ip}:1521/iserver/services/map-OSM/rest/maps/OSM/zxyTileImage.png?z={z}&x={x}&y={y}
重新部署启动tomcat就ok了

总结:
这个地图看看地形还是不错的,玩了好一会地图,缓存文件已经5G了。。。iserver还支持分布式切片服务,可以把切片分布式先下载到本地(= = 我的1G内存40G磁盘9.9元包邮渣服务器还是算了吧,别吐槽我的服务器慢了)还有本来想用水经注万能下载器下一堆切片到服务器,但是一个中国的数据到22层级都快PB级别了还是算了吧。有能力的同学可以试试配个mongoDB试试。
(ps:markdown好强大,都不怎么会用。国庆到了,好好休息,大家国庆快乐。)

你可能感兴趣的:(MapBox+iServer构建地图服务)