支持WEB、Android、IOS的地图解决方案
工具链
GIS工具集
- OpenGeo Suite
包含PostGIS, GeoServer, GeoWebCache, OpenLayers, 和 QGIS
地图准备
QGIS

导入、导出、编辑.shp,postgis,geotiff,geojson,dxf等多种GIS文件,给普通图片配准到地理坐标
教程:http://www.qgistutorials.com/en/DraftSight
编辑CAD文件SketchUp 从CAD文件生成3D视图
地图服务
GeoServer
地图服务发布。作为war放入Tomcat或Jetty即可使用。可发布geotiff,.shp,POSTGIS等多种GIS数据为地图。通过openlayer或QGIS浏览。GeoWebCache
缓存地图瓦片,提高性能。已内置在最新版GeoServer中。TileStream
把.mbtile文件发布为地图服务
离线地图打包
TileMill
将geotiff,geojson,csv,shp,postgis等文件美化、打包为.mbtile瓦片地图文件,存有地图信息的sqlite文件。
教程:https://www.mapbox.com/tilemill/docs/crashcourse/introduction/mbutil
将.mbtile文件分解为普通图片和json文件
地图浏览
Mapbox.js

在浏览器中显示TMS地图(Javascript)。基于Leaflet。可配合TileSteam使用。Example:https://www.mapbox.com/mapbox.js/example/v1.0.0/Mapbox IOS SDK
在IOS设备中显示TMS或.mbtile地图,基于Route-MeMapbox Android SDK
在Android设备中显示TMS或.mbtile地图,基于osmdroid
例程://depot/research/mapstudy/tstmapbox/OsmDroid
在Android设备中显示TMS或.mbtile地图
例程://depot/research/mapstudy/tstosmdroid/osmbonuspack
为OsmDroid增加显示POI等功能
例程://depot/research/mapstudy/tstosmbonuspack/Leaflet
在浏览器中显示TMS地图(Javascript)。OpenLayers
在浏览器中显示TMS、WMS地图(Javascript)。比Leaflet功能强大复杂。Indoor.js
Indoor 工具集,基于OpenSteetMap,TileMill,Leaflet。 目前尚不稳定。d3.js
Javascript数据显示工具
工具链关系图

离线地图制作举例
假设输入为DWG,若原图为位图(JPG/PNG),直接跳到第5步
在SketchUp中导入DWG。并用Make Faces 插件(YouTube)生成面
在SketchUp中拉伸为3D模型
导出,如果用render渲染更好
打开QGIS,"栅格"->配准工具。左边第一个图标打开底图。点击黄色齿轮。设置输出为base.tif。 目标空间参照系统为EPSG:3857. 勾选“完成时载入到QGIS”
在图上任点2点。在弹出框内输入该点坐标值。输入像素坐标即可。
点第二个图标完成配准。
添加一个矢量图层描述信标,类型为“点”,新建属性ccode,类型为整数(信标内容码)。新建属性name,类型为字符串。
点击黄色小铅笔到编辑模式,再点击 * 图标,在图上点击要增加信标的位置。添加3个点,id和ccode分别为1,2,3。再次点击黄色小铅笔退出编辑模式。
添加一个矢量图层描述信标,类型为“多边形”,新建属性name,类型为字符串.
点击黄色小铅笔到编辑模式,再点击 * 图标,在图上勾出围栏区域。并分别命名。
右键位图图层,另存为GeoTiff
右键矢量图层。另存为GeoJson
打开TileMill,Project-->New project
Layers-->Add Layer, 选择刚才导出的base.tif,SRS选择900913. “Save & Style” 。点击图层#base上得放大镜缩放到合适大小。
删除Contries图层和相应的mss。把background-color改为和底图一致
"+ Add Layer" 添加刚才导出的2个geojson文件
选择左侧手指==>Teaser.下面图层选择为hotarea.上面内容框中填入{{{name}}}
Save以后。可以看到热区效果。 当鼠标移到热区时。相应的name会显示。
将polygon-opacity,line-opacity和marker-opacity设为0。点击Export导出mbtiles. 放大图片到zoom 16级,把中心标志放到图中央。shift+鼠标拖动框选地图区域。点击 Export导出为文件。在~/Documents/MapBox/export中可以找到导出的example.mbtiles文件
启动地图服务。在terminal中执行 tilestream --tiles=/Users/fangjian/Documents/MapBox/export 然后访问http://localhost:8888/ 可以看到地图已经生效。访问 http://localhost:8888/v2/example.json 可以下载tilejson. 访问 http://localhost:8888/v2/example.mbtiles可以下载mbtiles文件。 如果只制作离线地图可以跳过这步。
解包example.mbtiles为普通图片和json文件.在.mbtiles所在目录。运行mb-util example.mbtile example
图片文件被解到了example目录下
复制metadata.json为tile.json 改为example.json的格式 。将center和bounds改为数组(如果只做离线文件可以跳过)
参考metadata.json 修改 https://www.mapbox.com/mapbox.js/example/v1.0.0/ 样例
<script>
var map = L.mapbox.map('map');
var stamenLayer = L.tileLayer('./{z}/{x}/{y}.png', {
attribution: 'Map tiles by <a href="http://dreamvoc.com">DreamVoc</a>.',
minZoom:14,
maxZoom:17
}).addTo(map);
map.setView([-0.0047,0.0075], 16);
</script>
拷贝ccode.geojson和hotarea.geojson到当前目录。编辑文件内容为var ccode={... var hotarea={...map.featureLayer.setGeoJSON(ccode); 然后加入以下代码
<script src="ccode.geojson" ></script>
<script src="hotarea.geojson" ></script>
<script>
map.featureLayer.setGeoJSON(ccode);
</script>
<script>
L.geoJson(hotarea).addTo(map);
</script>
加入热区参考文章 http://leafletjs.com/examples/choropleth.html。
支持WEB、Android、IOS的地图解决方案的更多相关文章
- Android WebView常见问题的解决方案总结----例如Web page not available
之前android虚拟机一直都可以直接联网,今天写了一个WebView之后,突然报出了Web page not available的错误,但是查看虚拟机自带的浏览器,是可以上网的,所以检查还是代码的问 ...
- SSM整合 完美支持RESTful(Jsp和客户端<android ios...>)
一 RESTful简介 RESTful是一种网络应用程序的设计风格和开发方式 它结构清晰 符合标准 易于理解 扩展方便 REST 即Representational State Transfer的缩写 ...
- [翻译]Nativescript 中 Web 视图与 Android/IOS 的双向通信
English document From http://shripalsoni.com/blog/nativescript-webview-native-bi-directional-communi ...
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Xamarin.Android 使用百度地图获取定位信息
最近做一个项目,web端使用百度地图,PDA使用手持机自带的GPS定位系统获取经纬度,然后再百度地图上显示该经纬度会有一定距离的差异,这里就像可乐的瓶子拧上雪碧的盖子,能拧的上却不美观.所以为了数据的 ...
- 用HTML5/CSS3/JS开发Android/IOS应用框架大全
现在人人都想成为安卓/IOS应用开发工程师.其实,安卓/IOS应用可以用很多种语言来实现.由于我们前端开发工程师,对HTML5/CSS/JavaScript的网络编程已经相当熟悉了.所以,今天大家将会 ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案
本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
随机推荐
- poj 3262 牛毁坏花问题 贪心算法
题意:有n头牛,每头牛回去都需要一定时间,如果呆在原地就会毁坏花朵.问:怎么安排使得毁坏的花朵最少? 思路: 拉走成本最高的. 什么是成本?毁坏花朵的数量. 例如有两种排序 (这里用(a,b)表示 ...
- logging——日志
导读 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,log ...
- Wannafly模拟赛3
喜欢想飞啊,毕竟这里的题目还都算挺好的中文题,不过做英文题久了还是感觉英文题更好理解一点 反蝴蝶效应 时间限制:1秒 空间限制:65536K 题目描述 一只南美洲亚马孙河流域热带雨林中的蝴蝶,偶尔扇动 ...
- 2017ICPC北京 J:Pangu and Stones
#1636 : Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the fi ...
- DS作业06-图
1.本周学习总结(0--2分) 1.1思维导图 1.2谈谈你对图结构的认识及学习体会. 图这一章的学习,是经过树学习后,难得一章重新寻找到感觉的学习.因为这一章比较少用递归,使用的是结构体,很多东西我 ...
- 九度oj 题目1456:胜利大逃亡
题目描述: Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius ...
- 【Luogu】P2146软件包管理器(树链剖分)
题目链接 上午跟rqy学了一道超难的概率题,准备颓一会,于是水了这么一道水题. 话说这题真的是模板啊.数据范围正好,描述特别贴近(都不给你绕弯子的),连图都给你画出来,就差题目描述加一句“树链剖分模板 ...
- [luoguP2774] 方格取数问题(最大点权独立集)
传送门 引入两个概念: 最小点权覆盖集:满足每一条边的两个端点至少选一个的最小权点集. 最大点权独立集:满足每一条边的两个端点最多选一个的最大权点集. 现在对网格染色,使得相邻两点颜色不同,之后把两个 ...
- vue 配合 element-ui使用搭建环境时候遇到的坑
在需要使用element-ui的时候,直接引入文件,发现会报错,解析不了css文件和字体,需要在webpack里面配置上css-loader和style-loader,最好的做法是把element-u ...
- 关于element-ui select组件change事件只要数据变化就会触发的解决办法
使用select组件和表格组件结合起来用,但是发现在点击下一页的时候,由于select当中的数据发生了变化,所以也会触发select当中的change事件,但是我只希望在我主动改变select组件当中 ...