1 function setPlace(map,myValue,callback){ 2 function getAddress(){ 3 var pp = local.getResults().getPoi(0).point; //獲取第一個智能搜索的結果 4 map.centerAndZoom(pp, 18); 5 var marker = new BMap.Marker(pp);// 創建標注 6 map.addOverlay(marker); // 將標注添加到地圖中 7 marker.enableDragging(); // 可拖拽 8 9 10 marker.addEventListener('dragend', function (e) {//拖動標注結束 11 var pointNew = e.point; 12 console.log("使用拖拽獲取的百度坐標"+pointNew.lng+","+pointNew.lat); 13 marker.setPosition(pointNew);//設置覆蓋物位置 14 //百度轉GCJ-02 15 var x_pi = 3.14159265358979324 * 3000.0 / 180.0; 16 var x = pointNew.lng - 0.0065; 17 var y = pointNew.lat - 0.006; 18 var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi); 19 var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); 20 var gg_lng = z * Math.cos(theta); 21 var gg_lat = z * Math.sin(theta); 22 //百度GCJ02轉web墨卡托84 23 var earthRad = 6378137.0; 24 pointNew.lng = gg_lng * Math.PI / 180 * earthRad; 25 var a = gg_lat * Math.PI / 180; 26 pointNew.lat = earthRad / 2 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a))); 27 console.log("使用拖拽獲取的百度坐標轉換的WebMercator坐標是("+pointNew.lng+","+pointNew.lat+")"); 28 return callback(pointNew); 29 }); 30 31 32 map.addEventListener("click", function(e){ 33 console.log('換位置百度的經度:'+e.point.lng+' , 緯度: '+e.point.lat); 34 var now_point = new BMap.Point(e.point.lng, e.point.lat ); 35 marker.setPosition(now_point);//設置覆蓋物位置 36 var x_pi = 3.14159265358979324 * 3000.0 / 180.0; 37 var x = now_point.lng - 0.0065; 38 var y = now_point.lat - 0.006; 39 var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi); 40 var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); 41 var gg_lng = z * Math.cos(theta); 42 var gg_lat = z * Math.sin(theta); 43 //GCJ02轉web墨卡托84 44 var earthRad = 6378137.0; 45 now_point.lng = gg_lng * Math.PI / 180 * earthRad; 46 var a = gg_lat * Math.PI / 180; 47 now_point.lat = earthRad / 2 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a))); 48 console.log("WebMercator坐標是("+now_point.lng+","+now_point.lat+")"); 49 return callback(now_point); 50 }); 51 //百度轉墨卡托 52 console.log("使用點擊換位置獲取的百度坐標百度地圖坐標是("+pp.lng+","+pp.lat+")"); 53 //百度轉GCJ-02 54 var x_pi = 3.14159265358979324 * 3000.0 / 180.0; 55 var x = pp.lng - 0.0065; 56 var y = pp.lat - 0.006; 57 var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi); 58 var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); 59 var gg_lng = z * Math.cos(theta); 60 var gg_lat = z * Math.sin(theta); 61 //GCJ02轉web墨卡托84 62 var earthRad = 6378137.0; 63 pp.lng = gg_lng * Math.PI / 180 * earthRad; 64 var a = gg_lat * Math.PI / 180; 65 pp.lat = earthRad / 2 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a))); 66 console.log("使用點擊換位置獲取的百度坐標轉換后的WebMercator坐標是("+pp.lng+","+pp.lat+")"); 67 return callback(pp); 68 } 69 70 var local = new BMap.LocalSearch(map, { onSearchComplete: getAddress}); 71 local.search(myValue); 72 }