最近因为工作需要,领导要我将51地图API开发的一个应用迁移到百度地图,或者说用百度地图API进行重写,实现同样的功能。我先是把现有的这个51地图的应用了解了一下,然后就试着用百度地图做一些demo,最后就自己动手参照原来的应用的功能,用百度地图实现了一下。下面就给大家介绍一下,百度地图API开发的一些基础技术。

首先,百度地图API的官方首页是:http://dev.baidu.com/wiki/static/index.htm,上面介绍了很多详细的信息,各种版本的API,成功案例,还有在线帮助文档,当然了这些文档也可以下载下来离线查阅。在web中使用百度地图API进行开发,主要是用到百度地图JavaScript版,也就是用JS进行开发。百度地图封装了具体实现的细节,我们作为程序员,只要按照百度地图的API说明文档,结合实例代码,进行开发就可以了。

首先看一下百度地图的Hello World。

操作步骤:

1、建立一个HTML页面,导入百度地图API的JS

  1. <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script>

2、在页面的body部分,插入一个地图容器

  1. <div style="width:520px;height:340px;border:1px solid gray" id="container"></div>

3、键入以下代码,浏览该页面,一个最简单的实例就OK了。

  1. <script type="text/javascript">
  2. var map = new BMap.Map("container");            // 创建Map实例
  3. var point = new BMap.Point(116.404, 39.915);    // 创建点坐标
  4. map.centerAndZoom(point,15);                    // 初始化地图,设置中心点坐标和地图级别。
  5. </script>

主要是有几个概念,就是物体的标注,是通过经纬度来定位的,北纬多少°多少′多少″,东经多少°多少′多少″,这样就能够精确的定位。但是在从51地图迁移到百度地图的时候,遇到了一个问题就是,坐标定位不准的问题,当时也想了很多办法,比如设置一个统一的偏离值来进行坐标的矫正,但是实验后发现一个坐标准了,另一个不一定也是按照同样的规则进行偏移。后来就想百度是否提供了转换坐标系或者直接就是从其它地图系统坐标转换的接口,经过网上的一番搜索,最后发现了两种方法,经过测试发现,这两种方法实现的效果是一样的,都是把原来的GPS地位的坐标转换成了百度地图的坐标(之所以出现坐标偏移的现象,百度官方的解释是根据国家要求需要对地图数据进行加密,百度采用了某种算法,进行了二次加密,所以偏移不统一),这里分享一下具体的方法。

操作步骤:

1、在页面head部分,导入百度坐标转换接口API

  1. <script type="text/javascript" src="http://dev.baidu.com/wiki/static/map/API/examples/script/convertor.js"></script>

2、在js函数里面,键入如下代码,通过回调函数获得p的坐标

  1. BMap.Convertor.translate(ggPoint,2,function(p){
  2. //ggPoint是转换前的坐标,比如51地图坐标;2是转换参数,代表是51地图,0-4有效,代表不同的地图系统
  3. });

这里再附录一下http接口:http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=116.397428&y=39.90923&callback=BMap.Convertor.cbk_7594
通过x跟y的数值,返回结果坐标是通过base64加密的(读者可以自己试一试)。

附一个asp的动态读取数据库并加载到baidu Map的简单例子。

  1. <div id="container">
  2. <div id="leftBar" class="leftBar">
  3. <center><h4>当前在线单位<font color=red>(<%=rs_kf(0)%>)</font></h4></center>
  4. <script src="http://www.yz91.net/Map2/kefu/kf/index.asp"></script>
  5. </div>
  6. <div id="centerBar" class="centerBar">
  7. <div id="mapDiv" style="width:100%; height:100%;"></div>
  8. </div>
  9. <div id="rightBar" class="rightBar">
  10. <div>
  11. <center><h4>最新招聘信息</h4></center>
  12. <ul id="demo1" style="list-style:none;width:100%;margin-left:5px;padding:0;">
  13. <%
  14. Set conn1 = Server.CreateObject("ADODB.Connection")
  15. constr1="Provider=MSDAORA.1;Password=xxx;User ID=yyy;Data Source=orcl;Persist Security Info=True"
  16. conn1.Open constr1
  17. Dim rs_oracle,strSql_oracle
  18. strSql_oracle="select acb200,acb210,AAB004,ACB216,ACB221||'-'||ACB222,ACB211,ACB212,ACB213,ACB21r,AAC011,NVL(ACC034,ACC214) DY,AAE004,AAE005,aae036,substr(aae020,0,3) from v_cb2021 where substr(aae020,0,3)='xxx'or substr(aae020,0,3)='xxx' or substr(aae020,0,3)='xxx' or substr(aae020,0,3)='xxx' order by aae030 desc"
  19. set rs_oracle=conn1.Execute(strSql_oracle)
  20. %>
  21. <%
  22. Do While Not rs_oracle.Eof
  23. %>
  24. <%
  25. url="http://www.yz91.net/Company/JobDeital/"& rs_oracle("ACB200")
  26. %>
  27. <li>
  28. <a href="<%=url%>" target="_blank"><font color="#0066ff"><%=rs_oracle("AAB004")%></font>   <font color=black><%=rs_oracle("ACB216")%></font></a>
  29. </li>
  30. <%
  31. rs_oracle.MoveNext
  32. Loop
  33. %>
  34. </ul>
  35. </div>
  36. <div id="demo2" style="width:0px;"></div>
  37. </div>
  38. </div>
    1. <script type="text/javascript">
    2. <!--全局变量start-->
    3. var map;//地图容器
    4. var circle;//圆形区域
    5. var centerMaker;//圆形中心点覆盖物
    6. var centerMakerIcon ;//圆形中心点覆盖物图片
    7. var point;//坐标原点
    8. var datas=[];//数据源数组
    9. var myIcon;//图标
    10. <!--全局变量end-->
    11. //双击后重新定位
    12. function dblClickCallBack(Epoint){
    13. delCircleOverlay();
    14. point = Epoint;
    15. addOverlay(point,$("theradius").value);
    16. addCenterMarker(point);
    17. map.setCenter(point);
    18. }
    19. //添加覆盖物
    20. function addOverlay(point,radius){
    21. circle = new BMap.Circle(point,radius,{fillColor:"#123456", strokeColor:"#FF0000", strokeWeight: 2 ,fillOpacity: 0.1, strokeOpacity: 0.3});
    22. map.addOverlay(circle);
    23. }
    24. //添加中心覆盖物
    25. function addCenterMarker(point){
    26. centerMaker = new BMap.Marker(point,{icon: centerMakerIcon});
    27. map.addOverlay(centerMaker);
    28. }
    29. //删除覆盖物
    30. function delCircleOverlay(){
    31. map.removeOverlay(circle);
    32. map.removeOverlay(centerMaker);
    33. }
    34. //通过ip获取地址
    35. function myFun(result){
    36. var cityName = result.name;
    37. //map.setCenter(cityName);
    38. point = map.getCenter();
    39. }
    40. //初始化地图
    41. function initMap(){
    42. map=new BMap.Map("mapDiv");
    43. p1=119.41372;
    44. p2=32.39425;
    45. point=new BMap.Point(p1,p2);
    46. map.centerAndZoom(point,15);
    47. map.enableScrollWheelZoom();//支持鼠标滚轮
    48. map.enableKeyboard();//支持键盘操作
    49. map.disableDoubleClickZoom();//禁用双击放大
    50. map.setDraggingCursor("crosshair");//设置拖拽地图时的鼠标指针样式
    51. var opts = {anchor: BMAP_ANCHOR_TOP_RIGHT, offset: new BMap.Size(10, 10)};
    52. map.addControl(new BMap.NavigationControl(opts)); //添加地图导航面板
    53. centerMakerIcon = new BMap.Icon("images/poin01.png",new BMap.Size(24, 24));
    54. myIcon = new BMap.Icon("images/centerPoi.gif",new BMap.Size(24, 24));
    55. var myCity = new BMap.LocalCity(); //ip定位
    56. myCity.get(myFun);
    57. map.centerAndZoom(point,15);
    58. delCircleOverlay();
    59. addOverlay(point,1000);//初始化半径为1千米的圆
    60. addCenterMarker(point);//添加圆心中央的图片
    61. initData();//初始化地图数据
    62. map.addEventListener("dblclick",function(e){
    63. dblClickCallBack(e.point);
    64. });
    65. $("theradius").onchange=function(){
    66. dblClickCallBack(point);
    67. $("spanRadius").innerHTML=$("theradius").value/1000;
    68. }
    69. }
    70. function initData(){
    71. <%
    72. Dim conn,strConn
    73. Set conn=Server.CreateObject("ADODB.Connection")
    74. strConn="Provider=MSDAORA.1;Password=xxx;User ID=yyy;Data Source=orcl;Persist Security Info=True"
    75. conn.Open strConn
    76. Dim rs,strSql
    77. strSql="select * from V_MAPZP where 1=1"
    78. if(request("AAB301")<>"") then
    79. p1=Split(trim(request("AAB301")),",")(0)
    80. p2=Split(trim(request("AAB301")),",")(1)
    81. qy=Split(trim(request("AAB301")),",")(2)
    82. strSql=strSql+" and ACB200 like "+"'%"&qy&"%'"
    83. end if
    84. if(request("ZPGW")<>"") then
    85. gw=trim(request("ZPGW"))
    86. strSql=strSql+" and ZPGW like "+"'%"&gw&"%'"
    87. end if
    88. set rs=conn.Execute(strSql)
    89. %>
    90. var p1="<%=p1%>";
    91. var p2="<%=p2%>";
    92. var point;
    93. if(p1==0&&p2==0){
    94. point=new BMap.Point(119.41372,32.39425);
    95. }else{
    96. point=new BMap.Point(p1/100000,p2/100000);
    97. }
    98. //map.centerAndZoom(point,15);
    99. //delCircleOverlay();
    100. //addOverlay(point,1000);//初始化半径为1千米的圆
    101. //addCenterMarker(point);//添加圆心中央的图片
    102. var myCity = new BMap.LocalCity(); //ip定位
    103. myCity.get(myFun);
    104. map.centerAndZoom(point,15);
    105. delCircleOverlay();
    106. addOverlay(point,1000);//初始化半径为1千米的圆
    107. addCenterMarker(point);//添加圆心中央的图片
    108. <%
    109. i=0
    110. Do While Not rs.Eof
    111. %>
    112. var ggPoint= new BMap.Point(<%=rs("LNG")%>/100000,<%=rs("LAT")%>/100000);
    113. BMap.Convertor.translate(ggPoint,2,function(p){
    114. var marker = new BMap.Marker(p,{icon: myIcon});
    115. map.addOverlay(marker);
    116. marker.setLabel(new BMap.Label("<%=rs("AAB004")%>",{offset:new BMap.Size(25,2)}));
    117. var opts = {
    118. width : 260,     // 信息窗口宽度
    119. height: 0,     // 信息窗口高度
    120. title : "<b>企业信息</b>"  // 信息窗口标题
    121. }
    122. var html="<div align=left>名称:<%=rs("AAB004")%></div>";
    123. var html=html+"<div align=left>联系人:<%=rs("AAE004")%> 电话:<%=rs("AAE005")%></div>";
    124. var html=html+"<div align=left>地址:<%=rs("AAE006")%></div>";
    125. var html=html+"<div align=center>";
    126. var html=html+"<a class=ORG href=http://www.www.com"+<%=right(rs("ACB200"),14)%>+" target=_blank>招聘信息</a></div>";
    127. var infoWindows = new BMap.InfoWindow(html, opts);  // 创建信息窗口对象
    128. marker.addEventListener("click", function(){
    129. this.openInfoWindow(infoWindows);
    130. });
    131. });
    132. <%
    133. i= i + 1
    134. rs.MoveNext
    135. Loop
    136. %>
    137. }

百度地图LBS应用开发代码的更多相关文章

  1. [github项目]基于百度地图二次开发实现的车辆监管(包含车辆定位、车辆图片和方向控制,电子围栏,图形绘制等功能)前端实现(不包含后端实现)

    前言:基于百度地图javascript版本开发,百度地图中所用的key已承诺仅用于测试,不用于商业用途 注:本文所有代码可以到github上进行下载,github地址:http://map.eguid ...

  2. 使用百度地图LBS创建自定义标注

    <body> <div id="allmap"></div> <div class="sel_container" i ...

  3. 百度地图 JS API开发Demo01

    百度地图DEMO     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  4. 百度地图LBS云平台读写数据操作类

    最近写了个叫<行踪记录仪>的手机软件,用了百度云来记录每个用户的最近位置,以便各用户能在地图上找到附近的人,为此写了个类来读写数据,大致如下: import java.util.Array ...

  5. 带有定位当前位置的百度地图web api 前端代码

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta name="viewport& ...

  6. 百度地图LBS开放平台AK一直没有用

    http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924;114.21892734521,29.57542 ...

  7. 百度地图二次开发Demo

    单点标注:电子显示对应位置的图片,信息框 多点标注(批量点标注): 多点连线(基于多个点形成路径): 若须要Demo源码:请给我发邮箱 1507026255@qq.com 转载请注明小刘

  8. 百度地图四(Android百度地图Poi检索开发总结)

    https://blog.csdn.net/wenzhi20102321/article/details/54575999

  9. iOS开发---集成百度地图完善版

    一.成为百度的开发者.创建应用 http://developer.baidu.com/map/index.php?title=首页 (鼠标移向 然后选择你的项目需要的功能 你可以在里面了解到你想要使用 ...

随机推荐

  1. C++ 过载,重写,隐藏

    1.过载:在一个类中(也就是一个作用域),方法名相同,形参表不同的方法. 2.重写:父类方法使用virtual,子类方法和方法的方法名,形参表,返回类型相同,子类可以不使用virtual,但是建议使用 ...

  2. 基于新浪sae使用php生成图片发布图文微博

    1.生成图片的代码: <?php header ("Content-type: image/png"); mb_internal_encoding("UTF-8&q ...

  3. [MODx] 6. Cache '!' with login package

    1. Install login package. 2. Create a Template called 'login': [[!Login? &loginResourceId=`13` / ...

  4. Android在MediaMuxer和MediaCodec用例 - audio+video

    在Android多媒体类,MediaMuxer和MediaCodec这是一个相对年轻,他们是JB 4.1和JB 4.3据介绍. 前者被用来产生一个混合的音频和视频的多媒体文件.的缺点是,现在可以只支持 ...

  5. 06---Java基础、面向对象

    一.Java基础 1.Java概述 Java语言特点:                     简单性.解释性.面向对象.高性能.分布式处理                     多线程.健壮性.动 ...

  6. android131 360 01 闪屏页和主页面

    主界面: 软件升级流程: 清单文件: <?xml version="1.0" encoding="utf-8"?> <manifest xml ...

  7. android116 轮播 viewPager实现

    布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...

  8. Android Studio无法启动 打开, Android Studio gradle下载不了

    Google在2013年I/O大会上发布了Android Studio,AndroidStudio是一个基于IntelliJ思想的新的Android开发工具.下面介绍一下Android Studio安 ...

  9. 关于"干货集中营"的一个开源App

    中秋佳节,玩了一天,撸了两天代码,搞出这么个东东,共享出来,小伙伴们如果有兴趣,欢迎添砖加瓦. 数据接口为干货集中营的数据,接口地址:http://gank.io/api 使用到的技术清单如下: 1. ...

  10. Android(java)学习笔记118:类继承的注意事项

    /* 继承的注意事项: A:子类只能继承父类所有非私有的成员(成员方法和成员变量) B:子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法. C:不要为了部分功能而去 ...