http://www.cnblogs.com/kevin-zlg/p/4611671.html

  最新公司需要做一个基于gis地图的应用系统,由于之前公司项目中的电子地图模块都是我开发的,所以这个新系统也自然让我先去了解如何开发,可以说做个简单的调研。

        和之前的项目中开发的电子地图模块不同,这次是开发gis地图,是要显示真实的地理位置,能有gps定位功能的。而之前开发过的电子地图功能,都只是基于svg的矢量可配置地图(之前采用batik开发过C/S版,用raphael开发过B/S版,都在项目中正常使用)。
        下面描述下我开始开发前做的准备和了解工作,希望对首次接触并想要开发gis离线地图应用的coder有帮助。

总体要求

        (这里只提取和地图相关的,其他业务需求就不描述了)          
        1. 支持离线使用
        2. 优先支持百度地图,不行选择google也可
        3. 支持地图基本操作,放大、缩小、平移
        4. 支持车载设备的GPS定位显示在地图上
        5. 支持在地图上标注自定义的内容(图标、文字)
        6. 支持自定义内容的操作,拖拽、右键显示信息和菜单
        7. 设计上支持以后替换不同地图引擎,如从google换成高德,替换后尽量少做开发工作就能正常使用。
 

地图显示方案选择

1.调用地图API进行开发

                各个地图开发商都提供了自己的api供大家调用,以方便进行二次开发,如google、百度、高德等,这些api往往比较完善和成熟,可以充分满足我们系统中的业务功能,但有几个要求无法满足:
        1)无法支持离线使用,很多api通过http请求去各个地图开发商服务器获取数据,离线情况下有很多功能限制,其中最主要的GPS定位纠偏api就必须联网。
        2)不易支持多个gis引擎,如果api进行开发,则肯定不兼容其他厂商gis的api,如果通过设计上在每个api上封装一层,则工作量太大。
        所以使用某个厂商的api进行开发的方案基本不可行。

2.使用第三方库openlayers显示地图

         OpenLayers 是一个专为Web GIS 客户端开发提供的JavaScript 类库包,用于实现标准格式发布的地图数据访问。
               使用openlayer进行网页上地图的显示和操作控制,而不去调用各个厂商的api,通过工具获取google的离线地图瓦片数据,存在自己的服务器上,并可进行离线的开发和使用。
        这样理论上只要更换后台服务器上的图片数据,做一些必要的配置,而不用改前台网页显示地图的代码,就可以支持不同厂商的地图展示。
 
        显然在显示地图方案上,是要选择方案2才能满足离线和支持多地图引擎的要求。
 

地图的选择

        原本希望使用百度地图,但是上网查了一圈,发现使用百度地图进行离线开发,似乎不大可行。
        1) 百度官方的api中就不支持web开发离线地图。这个正常,一般的都不支持web离线开发,手机的倒是都支持。
        2) 离线地图的一个需要解决的问题,GPS纠偏,百度地图的似乎不好处理,百度有自己的偏移加密。
        
        这里顺便引用下对坐标系的介绍:
       1.火星坐标系统 GCJ-02
        国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照几行代码的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所               以各地的偏移情况都会有所不同。而加密后的坐标也常被人称为火星坐标系统。
        目前使用火星坐标系的地图商:
        腾讯搜搜地图
        搜狐搜狗地图
        阿里云地图
        高德MapABC地图
        灵图51ditu地图
 
(重要)所有的电子地图所有的导航设备,都需要加入国家保密插件。第一步,地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标的电子地图,加密成
“火星坐标”,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。第二步,所有的GPS公司,只要需要汽车导航的,需要用到导航电子地图的,
统统需要在软件中加入国家保密算法,将COM口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标,这样,GPS导航仪和导航电子地图就可以完全匹
配,GPS也就可以正常工作。
    2.大地坐标系统 WGS-84 
     
用来表述地球上点的位置的一种地区坐标系统。它采用一个十分近似于地球自然形状的参考椭球作为描述和推算地面点位置和相互关系的基准面。一个大地坐标系统
必须明确定义其三个坐标轴的方向和其中心的位置。通常人们用旋转椭球的短轴与某一规定的起始子午面分别平行干地球某时刻的平均自转轴和相应的真起始子午面
来确定坐标轴的方向。若使参考椭球中心与地球平均质心重合,则定义和建立了地心大地坐标系。它是航天与远程武器和空间科学中各种定位测控测轨的依据。若椭
球表面与一个或几个国家的局部大地水准面吻合最好,则建立了一个国家或区域的局部大地坐标系。大地坐标系中点的位置是以其大地坐标表示的,大地坐标均以椭
球面的法线来定义。其中,过某点的椭球面法线与椭球赤道面的交角为大地纬度;包含该法线和大地子午面与起始大地子午面的二面角为该点的大地经度;沿法线至
椭球面的距离为该点的大地高。大地纬度、大地经度和大地高分别用大写英文字母B、L、H表示。
    3.百度坐标系统 BD-09
百度坐标对火星坐标系进行了一次加密,形成了百度坐标系.
目前使用百度坐标系的地图商:
百度Baidu地图
图吧MapBar地图
 
      可见百度地图比较特殊,有着自己的二次加密。
假设以后车载设备将GPS信息实时推送给我们,如果直接将位置坐标输入地图中显示,则会有偏移,这样肯定无法满足要求,所以纠偏一直是开发离线gis应用的难点。
对google离线地图的纠偏,google由于离线开发者多,所以相应的方法也较多,纠偏问题应该能较好的解决,而且查到了别人所谓的纠偏算法,只是没有验证。
百度地图的纠偏相对复杂,一般人使用在线api可以直接调用纠偏接口,而离线则没有很好的方式,其纠偏算法网络上也没有找到,一般百度地图的纠偏数据库也是收费的。
所以在纠偏问题上,百度地图比较难解决,而google地图相对较容易。
     
      总的来看,我应该会选择开发google的离线地图,风险相对小一点,web采用openlayers进行加载显示,正式开发前的准备工作就差不多啦,接下来应该要弄个demo试一下,或者直接开干!            

GIS开发离线地图应用-初识gis的更多相关文章

  1. ol3开发离线地图

    注意:国内地图均经过加密,尤其是百度地图,经过了二次加密,通常情况下都会存在偏差.所以最好是利用地图下载器下载后面带有“无偏差”的地图,否则需要对经纬度进行转化. 1.需要的前端库文件有jquery. ...

  2. 【BIGEMAP一键离线地图服务】

    地址:http://www.bigemap.com/offlinemaps/ 首页 离线地图 代码示例 项目案例 开发文档 关于我们     [BIGEMAP一键离线服务] 1.快速搭建离线地图服务2 ...

  3. Web GIS 离线地图

    Web GIS 离线地图 1,基于瓦片的离线地图下载 博客园 阿凡卢 提供了离线地图的下载工具,下载地址:http://pan.baidu.com/s/1hqvQr7e 具体使用见 参考资料2 阿凡卢 ...

  4. java离线地图web GIS制作

    因为项目需求,要做一个web地图,之前做过高德的在线地图,它提供了一系列的API,并且由于是国产的,所以开发起来比较容易,现在由于项目是内网使用的,所以需要使用离线地图,由此便开始了: Web GIS ...

  5. SuperMap iClient 7C——网络客户端GIS开发平台 产品新特性

    SuperMap iClient 7C是空间信息和服务的可视化交互开发平台,是SuperMap服务器系列产品的统一客户端.产品基于统一的架构体系,面向Web端和移动端提供了多种类型的SDK开发包,帮助 ...

  6. 3D离线地图开发

    3D离线地图介绍(3D离线采用矢量数据作为地图基础,可保持地图数据最新) 一.开发中引用3D离线地图(可独立部署通过内外IP+端口进行访问,也可拷贝js库文件到项目中通过绝对路径访问) 1).离线AP ...

  7. 百度3D离线地图开发,3D离线地图开发,百度地图离线开发

    3D离线地图介绍(3D离线采用矢量数据作为地图基础,可保持地图数据最新) 一.开发中引用3D离线地图(可独立部署通过内外IP+端口进行访问,也可拷贝js库文件到项目中通过绝对路径访问) 1).离线AP ...

  8. GIS开发之数据查询

    在GIS开发之我们经常会用到属性查询和空间查询,特别是在数据量比较大的时候,如何提高查询效率成为一个问题 1.属性查询 对于属性查询,除了必要的建索引之外,我们还应该考虑使用字段缓存:减少查询字段,减 ...

  9. Android GIS开发系列-- 入门季(14)FeatureLayer之范围查询

    Android GIS开发系列-- 入门季(5),这篇文章中,我们知道如何去查找要素.现在有一个需求,查找某点5000米范围的要素,那如何来做呢?首先我们需要在地图上画个5000米半径的圆,然后根据Q ...

随机推荐

  1. C#中yield return用法

    转载:http://www.jb51.net/article/54810.htm http://www.cnblogs.com/HunterWei/archive/2012/06/13/csharpy ...

  2. java以流的形式输出文件

    原文:http://blog.csdn.net/liutt55/article/details/78126614 public void downProcessFile(HttpServletRequ ...

  3. Android Facebook和Twitter登录和分享完整版

    最近公司的软件需要改国际版,需要Facebook和Twitter的登录和分享. 本人先用Umeng的第三方社会化分享实现了该功能,但是后来一想问题来了,经过查证.Umeng只在中国和美国有服务器,那也 ...

  4. android_我的第一个Android程序

    今天开始学Android开发,搞了一下午就完成了两个小功能,大部分时间都在调试.熟悉环境, Android开发环境对比VS无论是安装.使用.更新都不够方便,不过慢慢适应就好   完成功能如下: 功能一 ...

  5. CSS3 transform变换

    CSS3 transform变换 1.translate(x,y) 设置盒子位移2.scale(x,y) 设置盒子缩放3.rotate(deg) 设置盒子旋转4.skew(x-angle,y-angl ...

  6. javascript 递归函数调用(recursive funciton call)

    所谓的递归函数调用,就是自己调用自己的函数. var timerHandler = null; function a(){ console.log(123); timerHandler = setTi ...

  7. IE8兼容<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

    转自:http://nicyea.iteye.com/blog/719007 前言 X-UA-Compatible是针对ie8新加的一个设置,对于ie8之外的浏览器是不识别的,这个区别与 conten ...

  8. Java基础——Statement与PrepareStatement

    Statement Statement是Java运行数据库操作的一个重要方法.用于在已经建立数据库连接的基础上.向数据库发送要运行的SQL语句.Statement对象,用于运行不带參数的简单SQL语句 ...

  9. C#秘密武器之泛型

    一.简介: 很多初学者在刚开始接触泛型的时候会比较难理解泛型,在这里先把 “泛型”当作一个形容词,这样就方便理解了,因为很多东西都可以是泛型的!比如:“泛型的类”,“泛型的方法”,“泛型的接口”,“泛 ...

  10. java之this关键字

    this使用范围 1.在类的方法定义中使用的this关键字代表调用该方法对象的引用. 2.当必须指出当前使用方法的对象是谁时,要使用关键字this. 3.有时使用this可以处理方法中成员变量和参数重 ...