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. MathType如何插入连乘

    这个就是连乘符号,只不过看着不习惯......就在眼皮子底下.

  2. delphi杀进程的两种方式

    delphi杀进程的两种方式 uint unit Tlhelp32; 第一种:比较简单,根据标题,找到窗口,再找到进程,杀死进程 procedure KillProgram(WindowTitle : ...

  3. Could not instantiate bean class [org.springframework.data.domain.Pageable]: Specified class is an interface解决方案

    原文:http://pimin.net/archives/432 环境:Eclipse LUNA.Spring 4.1.1.或Spring 4.3.3.Spring Data Elasticsearc ...

  4. linux:使用comm命令比较两个文件:交集、差

    linux:使用comm命令比较两个文件:交集.差 comm命令可以按行比较两个排序好的文件,输出有3列:第一列是file1独有的.第二列是file2独有的,第三列是两者都有的,简单语法如下:NAME ...

  5. nagios系列教程地址

    http://www.sosidc.com/sort/10/page/3 http://www.sosidc.com/sort/10/page/2 http://www.sosidc.com/sort ...

  6. Spark(三) -- Shark与SparkSQL

    首先介绍一下Shark的概念 Shark简单的说就是Spark上的Hive,其底层依赖于Hive引擎的 但是在Spark平台上,Shark的解析速度是Hive的几多倍 它就是Hive在Spark上的体 ...

  7. asp.net权限控制的方式

    我们在使用asp.net开发Web程序的时候经常需要进行一些权限控制,如: 限制用户没有登陆就无法查看一些页面,又或者是说登陆之后如果不是管理员,或是没有响应的权限就无法进行相关的操作. 实现的方法有 ...

  8. Python 自用代码(某方标准类网页源代码清洗)

    用于mongodb中“标准”数据的清洗,数据为网页源代码,须从中提取: 标准名称,标准外文名称,标准编号,发布单位,发布日期,状态,实施日期,开本页数,采用关系,中图分类号,中国标准分类号,国际标准分 ...

  9. Zigbee事件

    ZIGBEE事件有两类.系统定义事件和用户定义事件. 系统类事件是协议栈已定义好的.用户类事件是我们用户层面来定义的. 事件类号採用一个16bit的常量,使用独热码编码,独热码是仅仅有一个bit为1, ...

  10. Django——如何处理请求(URL配置和视图)

    URLconfig—— 为了绑定视图函数和URL,我们使用URLconf. URLconf 就像是 Django 所支撑网站的目录. 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间 ...