成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

百度地圖API中如何用好摩卡托坐標

開發 開發工具
本文將教授大家如何在百度經緯度和摩卡托坐標系之間切換,這將有助于你用好百度地圖API。

  百度地圖API有兩種坐標系,一種是百度經緯度,一種是摩卡托坐標系。在本章你將學會:

  1、如何相互轉換這兩種坐標;

  2、使用該坐標進行反地址解析;

  3、坐標附近全部POI的查詢;

  4、計算兩點間的距離。

  最終畫面效果圖

  百度地圖API常用兩種坐標系,一是球面坐標系,又稱百度坐標,即point;第二就是平面坐標系,又稱摩卡托坐標,即pixel。

  為了方便用戶調用,API中的參數大多為百度經緯度,又稱球面坐標。而在后臺計算時,為了加快運算速度,一般采取摩卡托坐標系,即平面坐標。(有了平面坐標,用戶能自己快速海量地計算兩點的距離。)

  1、百度經緯度和摩卡托坐標的相互轉換

  MercatorProjection類,通過MapType的getProjection方法獲得實例。類參考:

  百度經緯度轉換為摩卡托(worldCoordinate.x和worldCoordinate.y就是平面坐標的x和y)

  varprojection1 = map.getMapType().getProjection();

  varworldCoordinate = projection1.lngLatToPoint(pt);

  摩卡托轉換為百度經緯度(LngLat.lng和LngLat.lat就是經緯度)

 

  1.   varprojection2 = map.getMapType().getProjection();  
  2.   varLngLat = projection2.pointToLngLat(mctXY); 

 

  2、使用坐標進行反地址解析

  由于百度地圖API只支持百度經緯度的反地址解析,所以,必須先將摩卡托坐標轉換為百度經緯度,再使用如下方法。

 

  1.   vargc = newBMap.Geocoder();  
  2.   gc.getLocation(point, function(rs){  
  3.   varaddComp = rs.addressComponents;  
  4.   alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);  
  5.   });  
  6.   }); 

 

  反地址解析可以返回如下數據:

3、坐標附近全部POI的查詢

  詳細教程請參照文章《【百度地圖API】如何用圓形搜索獲取中心點周圍100米內全部關鍵點?如天安門附近所有的餐廳、加油站、賓館、大廈等》:http://www.cnblogs.com/milkmap/archive/2011/09/16/2178907.html

4、計算兩點間距離的三種方法

  通過本章介紹的經緯度轉換的工具,我們得到如下的一組數據。

  起點:

  摩卡托坐標x:12057394.71

  摩卡托坐標y:2589680.88

  經緯度lng: 108.312241

  經緯度lat: 22.787823

  終點:

  摩卡托坐標x:12058626.7

  摩卡托坐標y:2592552.85

  經緯度lng: 108.323308

  經緯度lat: 22.811744

  (A) 通過百度地圖API調用(這里只能使用百度經緯度),map.getDistance(pointA,pointB),可以得到距離為:

  alert(map.getDistance(newBMap.Point(108.312241,22.787823),newBMap.Point(108.323308,22.811744)));

(B) 自己利用球面坐標計算兩點距離的方法:

  設地球半徑為R,地心為0,球面上兩點A、B的球面坐標為A(α1,β1),B(α2,β2),α1、α2∈[-π,π],β1、β2∈[-π/2,π/2 ],

  AB =R·arccos[cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2]

  利用勾股定理與正弦定理則可求出AB兩點間的直線距離,在利用正弦定理可求出AB兩點與地球0點夾角的度數,再利用如下公式:角EOD的度數/360度=E與D之間的球面距離/大圓周長,則可求出AB的球面距離。

  (C) 自己利用平面坐標系計算兩點距離的方法:(可以自己后臺運算

  由百度經緯度得到摩卡托坐標后,能輕松計算出X和Y的值。***用勾股定理求得Z。

  alert(Math.sqrt(Math.pow((12057394.71 - 12058626.7),2) + Math.pow((2589680.88 - 2592552.85),2)));

全部源代碼:

 

  1.   <!DOCTYPE html> 
  2.   <html> 
  3.   <head> 
  4.   <meta http-equiv="Content-Type"content="text/html; charset=gb2312"/> 
  5.   <title>摩卡托坐標的反地址解析</title> 
  6.   <script type="text/javascript"src="http://api.map.baidu.com/api?v=1.2"></script> 
  7. </head> 
  8.   <body> 
  9.   <div style="width:400px;height:650px;border:1px solid gray;float:left;"id="container"></div> 
  10.   <div style="width:500px;height:270px;float:left;margin:0 0 0 10px;"> 
  11.   <p>摩卡托坐標x:<input type="text"value="12059034.69"id="mctX"/></p> 
  12.   <p>摩卡托坐標y:<input type="text"value="2590880.82"id="mctY"/></p> 
  13.   <p id="pointX"></p> 
  14.   <p id="pointY"></p> 
  15.   <p id="entertaiment"></p> 
  16.   <p><input style="width:240px;height:130px;font-size:30px;"type="button"value="MCT反地址解析"onclick="mctGeo();"/></p> 
  17.   <div id="panel"></div> 
  18.   </div> 
  19.   </body> 
  20.   </html> 
  21.   <script type="text/javascript"> 
  22.   //以下兩句話為創建地圖  
  23.   varmap =newBMap.Map("container");  
  24.   map.centerAndZoom(newBMap.Point(108.318421,22.800617), 15);//魚骨控件  
  25.   map.addControl(newBMap.NavigationControl()); //點擊地圖進行地址解析  
  26.   vargc =newBMap.Geocoder();  
  27.   map.addEventListener("click", function(e){varpt =e.point;  
  28.  document.getElementById("pointX").innerHTML ="經緯度lng: "+pt.lng;  
  29.   document.getElementById("pointY").innerHTML ="經緯度lat: "+pt.lat;varprojection1 =this.getMapType().getProjection();varworldCoordinate =projection1.lngLatToPoint(pt);  
  30.   document.getElementById("mctX").value =worldCoordinate.x;  
  31.   document.getElementById("mctY").value =worldCoordinate.y;  
  32.   map.clearOverlays();  
  33.   document.getElementById("panel").innerHTML ="";  
  34.   gc.getLocation(pt, function(rs){varaddComp =rs.addressComponents;  
  35.   document.getElementById("entertaiment").innerHTML =addComp.province +", "+addComp.city +", "+addComp.district +", "+addComp.street +", "+addComp.streetNumber;varallPois =rs.surroundingPois; //獲取全部POI(該點半徑為100米內有6個POI點)  
  36.   for(i=0;i<allPois.length;++i){  
  37.   document.getElementById("panel").innerHTML +="<p style='font-size:12px;'>"+(i+1) +"、"+allPois[i].title +",地址:"+allPois[i].address +"</p>";  
  38.   map.addOverlay(newBMap.Marker(allPois[i].point));  
  39.   }  
  40.   },mOption);  
  41.   });//摩卡托反地址解析  
  42.   varmOption ={  
  43.   poiRadius : 500, //半徑為1000米內的POI,默認100米  
  44.   numPois : 12//列舉出50個POI,默認10個  
  45.   }functionmctGeo(){  
  46.   map.clearOverlays();  
  47.   document.getElementById("panel").innerHTML ="";varmctXX =document.getElementById("mctX").value;varmctYY =document.getElementById("mctY").value; varmctXY =newBMap.Pixel(mctXX,mctYY); varprojection2 =map.getMapType().getProjection();varLngLat =projection2.pointToLngLat(mctXY);  
  48.   document.getElementById("pointX").innerHTML ="經緯度lng: "+LngLat.lng;  
  49.   document.getElementById("pointY").innerHTML ="經緯度lat: "+LngLat.lat;  
  50.   gc.getLocation(LngLat, function(rs){varaddComp =rs.addressComponents;  
  51.   document.getElementById("entertaiment").innerHTML =addComp.province +", "+addComp.city +", "+addComp.district +", "+addComp.street +", "+addComp.streetNumber;varallPois =rs.surroundingPois; //獲取全部POI(該點半徑為100米內有6個POI點)  
  52.   for(i=0;i<allPois.length;++i){  
  53.   document.getElementById("panel").innerHTML +="<p style='font-size:12px;'>"+(i+1) +"、"+allPois[i].title +",地址:"+allPois[i].address +"</p>";  
  54.   map.addOverlay(newBMap.Marker(allPois[i].point));  
  55.   }  
  56.   },mOption);  
  57.   }</script> 

 

原文鏈接:http://www.cnblogs.com/milkmap/archive/2012/01/31/2333875.html

【編輯推薦】

  1. 百度地圖API之如何制作公交導航
  2. 百度地圖API開發指南
  3. 百度地圖API如何批量轉換為百度經緯度
  4. 百度地圖API如何給自定義覆蓋物添加事件
  5. 詳解百度地圖API之自定義地圖類型
責任編輯:彭凡 來源: 博客園
相關推薦

2011-10-21 09:28:25

百度地圖API

2011-09-29 11:00:54

百度地圖API

2011-10-21 10:16:25

百度地圖API

2011-10-24 14:01:29

API

2011-09-16 14:39:02

百度地圖API

2011-09-16 10:37:42

地圖API

2011-09-26 10:05:19

百度地圖API

2011-10-09 11:07:40

百度地圖API

2024-06-11 10:03:56

2011-10-21 09:11:41

百度地圖API

2023-12-20 17:38:44

APIhttp鴻蒙

2021-06-15 14:33:00

高德百度騰訊

2022-03-27 10:04:23

Angular8項目vue

2013-04-08 14:59:54

Android學習筆記百度地圖Overlay

2011-12-29 16:18:14

API

2013-04-08 14:46:42

Android學習筆記百度地圖

2014-07-25 17:12:39

數據庫WOT2014MongoDB

2011-05-25 14:36:17

2012-02-03 14:01:15

地圖

2013-08-22 17:08:50

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产激情偷乱视频一区二区三区 | 国产高清久久 | 国产美女在线免费观看 | 中国一级特黄视频 | 一区二区三区不卡视频 | 欧美片网站免费 | 亚洲一区二区久久久 | 日日夜夜天天 | 国产精品久久久久久妇女6080 | 韩日一区二区三区 | 91精品国产色综合久久不卡蜜臀 | 成人亚洲综合 | 成人在线小视频 | 日日日日操 | 日韩午夜在线播放 | 99tv| 久久99网| 天天影视色综合 | 超碰婷婷 | 国产欧美日韩精品一区二区三区 | 精品九九九| 欧美日高清视频 | 婷婷久久网 | 精品国产视频 | 欧美综合国产精品久久丁香 | 久久激情五月丁香伊人 | 国产在线观看一区二区 | 欧美极品在线 | 呦呦在线视频 | 亚洲69p| 91精品国产91久久综合桃花 | 成人欧美一区二区三区在线播放 | 国产精品日韩一区二区 | 激情久久网 | 91久久精品国产 | 国产日韩欧美激情 | 中文字幕免费在线观看 | 亚洲成色777777在线观看影院 | 黄色大片免费网站 | 欧美日韩亚洲一区 | 国产精品久久久久国产a级 欧美日韩国产免费 |