关于地图的开发,目前有两种,谷歌或者百度地图提供的在线API(目前我使用的),方便有效,但是需要用户可以连接到百度或者谷歌的服务器,即必须在线,对于重视安全隐私的局域网不适合。另一种就是开源组件使用的openlayer组件,提供离线地图,但是开发难度大,需要自己截取区域,并且有点丑。

目前我使用的是前者开发,为了比较两种地图的差异,两种地图都已开发,加载速度还算满意。

1.百度地图的开发:

开发百度地图,准备工作就是要申请一个密钥,引入百度地图的在线API接口:

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=xxx"></script>

这里我使用的是地址解析到经纬度,然后定点标注,根据后台查到的事件的发生地址通过百度的函数解析为经纬度然后在地图上标注出来,并给每个标注点添加提示框,显示事件详情。开发过程中遇到了2个问题:

(1)批量解析的时候,提示框的内容都是最后一个事件的内容,这个问题在网上好多人都遇到了,应该是百度API的问题。我的解决方法是在解析之前取出来想要的提示信息,然后再放到解析函数中,如下图红色代码,

Function bdGEO(){

init();//查到的事件信息保存到数组中

var add = adds[index];

geocodeSearch(add);

index++;

}

function geocodeSearch(add){

if(index < adds.length){

setTimeout(window.bdGEO,1);

}

var p1=title[index];

var p2=time[index];

var p3=info[index];

myGeo.getPoint(add, function(point){

if (point) {

var  content="<b>"+p1+"</b><hr></hr><font color='red'>时间:</font>"+p2+"</br>"+"<font color='red'>地址:</font>"+add+"</br>"+"<font color='red'>描述:</font>"+p3;

var marker = new BMap.Marker(new BMap.Point(point.lng, point.lat));

map.addOverlay(marker);//根据解析的经纬度增加标注点

//鼠标移到标注点显示信息

marker.addEventListener("mouseover", function () {

var infoWindow = new BMap.InfoWindow(content);

this.openInfoWindow(infoWindow);});

}

//鼠标移开标注点关闭信息框

marker.addEventListener("mouseout", function () {

this.closeInfoWindow();});

}, "克拉玛依市");

}

(2)上述代码中的setTimeout(window.bdGEO,1);不能缺少,如果直接用for循环里面调用解析函数会造成只显示一个标注点或者没有标注点,这个问题应该和附件组件提出的异步问题相似,for循环和地图加载异步,线程速度不一样,会造成只显示最后一个标注点。

2.谷歌地图的开发:

谷歌地图的开发一波三折,一开始使用的是v2版的谷歌地图在线API,需要密钥,本地开发测试都成功后,让局域网的他人访问页面测试,总是提示需要密钥,后来通过网上查询得知,v2版仅供本地测试开发,果断更改为v3,且不需要密钥。经过测试后没有问题,不过网上有人说访问次数有限制,所以目前推荐百度地图,百度地图颗粒度也比谷歌地图的高。

谷歌地图和百度地图的函数很相似,百度地图的两个问题谷歌也存在,就列出解析函数:

function geocodeSearch(address) {

if(index < adds.length-1){

setTimeout(window.bdGEO,1);

}

var geocoder = new google.maps.Geocoder();

var  content="<font color='red'>"+title[index]+"</font>"+"<hr></hr>时间:"+time[index]+"</br>"+"地址:"+address+"</br>"+"描述:"+ info[index];

geocoder.geocode( { 'address': address}, function(results, status) {

if (status == google.maps.GeocoderStatus.OK) {

//      console.log(results[0].geometry.location);

map.setCenter(results[0].geometry.location);

var infowindow = new google.maps.InfoWindow({

content: content

});

var marker = new google.maps.Marker({

map: map,

position: results[0].geometry.location

});

google.maps.event.addListener(marker, 'mouseover', function() {

infowindow.open(map,marker);

});

google.maps.event.addListener(marker, 'mouseout', function() {

infowindow.close();

});

其中console.log(results[0].geometry.location);本是用来控制台调试的,却造成了整个页面的困扰,导致后面好多代码不执行,可能单线程吧,被占用了。

总结;

,综合比较下来,在线的话 还是使用百度地图比较好,因为加载速度快,地图的颗粒度更高,显示的内容更细致,相反谷歌浏览器效果不是那么理想。当然现在的在线地图显然不能满足现实,所以后期还是要开发离线地图方便局域网使用。

效果图:

谷歌地国

:

百度地图:

地图的开发研究---在线地图相关推荐

  1. 地图的开发研究--基于openlayers+geoserver+tomcat的离线地图--postgis空间数据库

    此节主要介绍以下内容: 1.安装配置postgresql和postgis,升级postgresql为空间数据库,导入.shp格式的地图,转化为空间数据. 2.深入研究geoserver的用法和功能,实 ...

  2. iOS定位服务与地图应用开发:高德地图开发

    2019独角兽企业重金招聘Python工程师标准>>> 由于博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/419 ...

  3. Arcgis加载在线地图(内涵各种在线地图)

    一.连接在线地图 1.首先打开Arcgis,找到GIS服务器,双击添加WMTS服务器: 2.在URL框中填入在线地图URL:http://xdc.at/map/wmts/,点击获取图层,加载出在线图层 ...

  4. java 地图控件_控件交互-与地图交互-开发指南-Android 地图SDK | 高德地图API

    控件是指浮在地图图面上的一系列用于操作地图的组件,例如缩放按钮.指南针.定位按钮.比例尺等. UiSettings 类用于操控这些控件,以定制自己想要的视图效果.UiSettings 类对象的实例化需 ...

  5. 基于高德地图JSAPI 开发移动端地图红包

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  6. (转载)基于LBS地图的开发,满足地图上有头像的需求

    最近做的项目主要是LBS这块 主打成员定位功能 我们的UI设计是这样的 乍一看上去是挺好挺美观的 不同的人会显示不同的头像 可是当人扎堆的时候 问题就来了 当人多的时候(例如上图所示) 地图滑动起来就 ...

  7. android高德地图截屏,地图截屏功能-与地图交互-开发指南-Android 地图SDK | 高德地图API...

    /** * 对地图进行截屏 */ aMap.getMapScreenShot(new OnMapScreenShotListener() { @Override public void onMapSc ...

  8. ios 点生成线路 百度地图_iOS开发-集成百度地图(OC语言)

    一.申请安全码 图1-1 申请安全码 二.导入SDK,添加依赖库 1.根据项目需求(定位?路径规划?)下载所需要的SDK包,传送门:下载百度地图SDK,并拖进项目中. 图2-1 导入SDK 2.添加依 ...

  9. 高德地图JavaScript API开发研究

    高德地图JavaScript API开发研究 原文:高德地图JavaScript API开发研究 高德地图JavaScript API是一套用JavaScript 语言编写的应用程序接口,可以通过各种 ...

最新文章

  1. [CareerCup] 11.2 Sort Anagrams Array 异位词数组排序
  2. python【蓝桥杯vip练习题库】ADV-288成绩排名
  3. FFmpeg流媒体处理-收流与推流
  4. 2018美团笔试字符串问题
  5. 《软件工艺师:专业、务实、自豪》一第3章
  6. luogu P3295 [SCOI2016]萌萌哒
  7. jQuery 的各种练习
  8. java抽象类例子_关于java抽象类的例子
  9. Python编程进阶,Python如何实现多进程?
  10. Vant 3 - 有赞出品的开源移动UI组件库,基于 Vue3 重构发布
  11. QT移植Linux平台
  12. 负整数的取模与取整的问题
  13. 装了卡巴电脑更卡?原来是Trojan-PSW.Win32.QQPass等盗号木马群作梗2
  14. ADB卸载OPPO浏览器
  15. 安装ecshop的方法·
  16. 【牛腩】过程或函数 ‘news_selectByCaId‘ 需要参数 ‘@caid‘,但未提供该参数
  17. ThinkCMF知识点汇总
  18. PostgreSQL11 MYSQL_postgresql11 备份
  19. windows文件副檔名說明
  20. 面向广义的rl代理商

热门文章

  1. bootloader stage1 and stage2
  2. 强强联手 华云数据与南湖实验室签署战略合作协议
  3. 基于单片机万年历仿真设计(含AD原理图)
  4. 将字符串“I am a college student at CCBUPT”中的大写字 母改小写字母,小写字母改为大写字母,打印输出,并显示程序运行时 间(毫秒)。
  5. android ondraw动画,android实现动画效果的方法onDrawFrame
  6. AAC格式音频的结构分析
  7. 总结collection类
  8. Springboot项目通过logstash将日志分类写入Elasticsearch
  9. centos安装rocketmq
  10. “湘潭禽流感传染人”传言调查