Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取谷歌地图标记之间的距离,单位为像素或;视距“;_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 获取谷歌地图标记之间的距离,单位为像素或;视距“;

Javascript 获取谷歌地图标记之间的距离,单位为像素或;视距“;,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在寻找一种方法来计算谷歌地图上标记的可视距离。我不在乎他们之间的英里/公里。例如,我想知道放大时两个标记何时彼此靠近 我很了解MarkerClusterer。我甚至有我自己的大量修改分叉,但它不是我需要为这个项目的方式设置。MarkerClusterer创建的覆盖层无法满足我的需要。这就是我一直看到的在其他问题中向其他人提出的建议 在我的完美世界中,我有一个函数distanceInPx我可以这样使用: if (distanceInPx(marker1, marker2) < 10) {

我正在寻找一种方法来计算谷歌地图上标记的可视距离。我不在乎他们之间的英里/公里。例如,我想知道放大时两个标记何时彼此靠近

我很了解MarkerClusterer。我甚至有我自己的大量修改分叉,但它不是我需要为这个项目的方式设置。MarkerClusterer创建的覆盖层无法满足我的需要。这就是我一直看到的在其他问题中向其他人提出的建议

在我的完美世界中,我有一个函数
distanceInPx
我可以这样使用:

if (distanceInPx(marker1, marker2) < 10) {
  // do my thing
}
if(距离inpx(标记1,标记2)<10){
//做我的事
}

或者,如果有另一种方法在概念上做同样的事情,也会起作用

您可以编写以下函数来获取两个标记之间的距离(以像素为单位)。它假设map已初始化,您拥有全局变量
map
,并且在触发
projection\u changed
事件后执行该函数

function distanceInPx(marker1, marker2) {
    var p1 = map.getProjection().fromLatLngToPoint(marker1.getPosition());
    var p2 = map.getProjection().fromLatLngToPoint(marker2.getPosition());

    var pixelSize = Math.pow(2, -map.getZoom());

    var d = Math.sqrt((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y))/pixelSize;

    return d;
}
有关更多详细信息,请参阅文档:

示例代码

var映射;
函数initMap(){
var Mylatng={lat:41.079351,lng:-0.758057};
var madrid={lat:40.416775,液化天然气:-3.70379};
var barca={lat:41.385064,lng:2.173403};
map=new google.maps.map(document.getElementById('map'){
缩放:4,
中心:myLatLng,
手势处理:“贪婪”
});
var marker1=新的google.maps.Marker({
职位:马德里,
地图:地图,
标题:“马德里”
});
var marker2=新的google.maps.Marker({
职位:巴萨,
地图:地图,
标题:“巴塞罗那”
});
google.maps.event.addListener(映射,“投影已更改”,函数(){
var d=距离inpx(标记1,标记2);
document.getElementById(“距离”).innerHTML=“距离:”+d;
});
google.maps.event.addListener(映射,“zoom_changed”,函数(){
var d=距离inpx(标记1,标记2);
document.getElementById(“距离”).innerHTML=“距离:”+d;
});
}
函数距离inpx(标记1、标记2){
var p1=map.getProjection().fromLatLngToPoint(marker1.getPosition());
var p2=map.getProjection().fromLatLngToPoint(marker2.getPosition());
var pixelSize=Math.pow(2,-map.getZoom());
var d=Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y))/pixelSize;
返回d;
}
#地图{
身高:100%;
}
html,正文{
身高:100%;
保证金:0;
填充:0;
}


听起来像是个XY问题,你想实现什么?看起来您正在尝试查看两个标记是否彼此接近,为什么不能使用公里和/或英里进行此操作?公里/英里不会随着您的放大或缩小而改变。如果我放大到10公里以外的地方,它们会重叠,但如果我放大到超远的地方,它们可能会出现在屏幕的完全不同的侧面。Re:“你想实现什么?”当标记在视觉上靠得很近时,我试图改变一些用户界面。当我缩小它们时,如果它们非常接近,它们就会出现在一个饼图中。如果我放大,如果它们之间有足够的视觉距离,它们就会分开。这是我可以用MarkerClusterer在大部分情况下实现的功能,但不幸的是,OverlyView使我无法添加许多其他功能。根据缩放级别,您可以找到米/像素比(比例)。然后你必须找出两个标记之间的公里距离,用米/像素比将其转换为像素,你就完成了。啊。。。赞成。所以10mi/zoom是2对10mi/zoom是3或其他。谢谢