问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何根据摩卡托坐标进行POI查询,和计算两点距离

发布网友 发布时间:2022-05-04 16:51

我来回答

1个回答

热心网友 时间:2022-04-25 14:28

1、百度经纬度和摩卡托坐标的相互转换
MercatorProjection类,通过MapType的getProjection方法获得实例。类参考:

百度经纬度转换为摩卡托(worldCoordinate.x和worldCoordinate.y就是平面坐标的x和y)
var projection1 = map.getMapType().getProjection();
var worldCoordinate = projection1.lngLatToPoint(pt);

摩卡托转换为百度经纬度(LngLat.lng和LngLat.lat就是经纬度)
var projection2 = map.getMapType().getProjection();
var LngLat = projection2.pointToLngLat(mctXY);

2、使用坐标进行反地址解析
由于百度地图API只支持百度经纬度的反地址解析,所以,必须先将摩卡托坐标转换为百度经纬度,再使用如下方法。
var gc = new BMap.Geocoder();
gc.getLocation(point, function(rs){
var addComp = rs.addressComponents;
alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
});
});
反地址解析可以返回如下数据:

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(new BMap.Point(108.312241,22.787823),new BMap.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的球面距离。

注意,R = 6370996.81米。

(C) 自己利用平面坐标系计算两点距离的方法:(可以自己后台运算)
由百度经纬度得到摩卡托坐标后,能轻松计算出X和Y的值。最后用勾股定理求得Z。
alert(Math.sqrt(Math.pow((12057394.71 - 12058626.7),2) + Math.pow((2589680.88 - 2592552.85),2)));

全部源代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>摩卡托坐标的反地址解析</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
</head>
<body>
<div style="width:400px;height:650px;border:1px solid gray;float:left;" id="container"></div>
<div style="width:500px;height:270px;float:left;margin:0 0 0 10px;">
<p>摩卡托坐标x:<input type="text" value="12059034.69" id="mctX" /></p>
<p>摩卡托坐标y:<input type="text" value="2590880.82" id="mctY" /></p>
<p id="pointX"></p>
<p id="pointY"></p>
<p id="entertaiment"></p>
<p><input style="width:240px;height:130px;font-size:30px;" type="button" value="MCT反地址解析" onclick="mctGeo();" /></p>
<div id="panel"></div>
</div>
</body>
</html>
<script type="text/javascript">
//以下两句话为创建地图
var map = new BMap.Map("container");
map.centerAndZoom(new BMap.Point(108.318421,22.800617), 15);
//鱼骨控件
map.addControl(new BMap.NavigationControl());

//点击地图进行地址解析
var gc = new BMap.Geocoder();
map.addEventListener("click", function(e){
var pt = e.point;
document.getElementById("pointX").innerHTML = "经纬度lng: " + pt.lng;
document.getElementById("pointY").innerHTML = "经纬度lat: " + pt.lat;

var projection1 = this.getMapType().getProjection();
var worldCoordinate = projection1.lngLatToPoint(pt);
document.getElementById("mctX").value = worldCoordinate.x;
document.getElementById("mctY").value = worldCoordinate.y;

map.clearOverlays();
document.getElementById("panel").innerHTML = "";

gc.getLocation(pt, function(rs){
var addComp = rs.addressComponents;
document.getElementById("entertaiment").innerHTML = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;

var allPois = rs.surroundingPois; //获取全部POI(该点半径为100米内有6个POI点)
for(i=0;i<allPois.length;++i){
document.getElementById("panel").innerHTML += "<p style='font-size:12px;'>" + (i+1) + "、" + allPois[i].title + ",地址:" + allPois[i].address + "</p>";
map.addOverlay(new BMap.Marker(allPois[i].point));
}
},mOption);
});

//摩卡托反地址解析
var mOption = {
poiRadius : 500, //半径为1000米内的POI,默认100米
numPois : 12//列举出50个POI,默认10个
}
function mctGeo(){
map.clearOverlays();
document.getElementById("panel").innerHTML = "";

var mctXX = document.getElementById("mctX").value;
var mctYY = document.getElementById("mctY").value;
var mctXY = new BMap.Pixel(mctXX,mctYY);

var projection2 = map.getMapType().getProjection();
var LngLat = projection2.pointToLngLat(mctXY);

document.getElementById("pointX").innerHTML = "经纬度lng: " + LngLat.lng;
document.getElementById("pointY").innerHTML = "经纬度lat: " + LngLat.lat;

gc.getLocation(LngLat, function(rs){
var addComp = rs.addressComponents;
document.getElementById("entertaiment").innerHTML = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;

var allPois = rs.surroundingPois; //获取全部POI(该点半径为100米内有6个POI点)
for(i=0;i<allPois.length;++i){
document.getElementById("panel").innerHTML += "<p style='font-size:12px;'>" + (i+1) + "、" + allPois[i].title + ",地址:" + allPois[i].address + "</p>";
map.addOverlay(new BMap.Marker(allPois[i].point));
}
},mOption);
}
</script>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑docx怎么转换成word文档电脑上docx格式文件转换方法 电脑白屏是怎么回事啊。??? 电脑开机花屏渐渐地白屏了显示器突然白屏花屏的原因及解决方法_百度知 ... iphone录屏失败因为5823什么意思_iphone录屏失败提示5823代表什么意思... 软考中级:信息安全工程师 求大神解答打印机如何设置默认双面打印 如何更改打印机的打印格式? 经期同房月经没了会怀孕吗 iphone8p轻触解锁设置 宝沃bx5300公里多少油钱 Lat:39.90742;Lon:116.63493转换经纬度坐标 经度和纬度用英语怎么说? lat:36.377917 lng:119.769168转换成经纬度是多少?在线急等 地图:lat:40.776338,lng:107.413585 经纬度是多少? 经纬度lat:48.864981.lng:119.59916299999999是什么意思?这是内蒙 经纬度lat;28.92776,lng;112.880023谁知道地图的什么城市 LAT的纬度 被封三天!怎么办!如何立即解封。 九十年代的家具厂利润率有多少 做家具行业赚钱吗、 做定制家具能赚钱吗? 实木家具行业现在赚钱吗?利润空间多大?投资额多大?要代理家具品牌从何入手? 最近小型家具厂行情怎样?准备开一个,自己没有技术 定制家具利润怎么样高不高 卖家具的利润大概是多少?帮忙介绍一下,谢谢! 小家具厂包工头一月能攒多少钱 家具厂老板很有钱吗,听说一年赚了了260多万(纯收入),是真的吗 家具厂利润怎么算 家具行业的利润是多少 板式家具的利润怎么样? lat:21.29612,lng:113.157337转换经纬度是多少?详细地址是哪里? matlab中plot3(x,y,z)是根据直角坐标系绘图;请问如何利用地球经纬度高度(lat,lon,alt)绘图 各城市经纬度一般取市政府的地理位置吗 知道多个点的经纬度坐标,怎么求这些点的中心点坐标? 中国经纬度范围 二年级作文;春天到了,老师带领同学们来到长城踏青。 大专毕业在深圳能找什么样的工作,家里负担挺重的 大专生在深圳找什么工作好? 大专毕业半年了去深圳能干什么 大专应届毕业生 在深圳能找个啥工作? 大专生在深圳哪个人才市场找工作比较合适 大专生暑假在深圳找什么工作好 我是一名大专毕业生,现在在深圳,我想找个工作养活自己,可是该干什么工作呢?真得很迷茫 大专毕业,物流管理专业,在深圳工作好难找亚,最好找什么职业 大专生如何找工作 - 在深圳大专生如何找工作 大专物流管理专业09应届生在深圳的南山,罗湖,盐田这三个地方可以找到什么样的工作? 我是应届毕业生,大专文凭,没什么一技之长。现在去深圳好找工作吗? 大专学历在深圳好找工作吗 大专毕业到了深圳,去哪里找工作好点啊 请问大专生要去深圳能找什么工作?