gpt4 book ai didi

javascript - Google map api v2 - 在 map 中查找最近/最近的标记/点?

转载 作者:行者123 更新时间:2023-11-28 10:12:59 26 4
gpt4 key购买 nike

嗨,我正在尝试做似乎几乎不可能的事情...我正在尝试获取三个最近的位置标记对象...这可能吗? ..它不必100%准确...但至少要做一些事情...我在网上找到并尝试过的是:

function find_closest_marker( lat1, lon1 ) {

for(var y = 1; y < 4; y++){

var pi = Math.PI;
var R = 6371; //equatorial radius

for(var i=0;i<markers.length; i++ ) {
//alert(markers.length);
var closest = -1;
var distances = [];

var lat2 = points[i].lat().toFixed(5);
var lon2 = points[i].lng().toFixed(5);

var chLat = lat2-lat1;
var chLon = lon2-lon1;


var dLat = chLat*(pi/180);
var dLon = chLon*(pi/180);

var rLat1 = lat1*(pi/180);
var rLat2 = lat2*(pi/180);

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;


distances[i] = d;
if ( closest == -1 || d < distances[closest] ) {
closest = i;
}
}

var markerImg = "";
if(markers[closest].markerType == 1){
markerImg="/files/billeder/../Templates/Designs/Ideal2011/images/Map/dot_red.jpg"
} else if(markers[closest].markerType == 2){
markerImg="/files/billeder/../Templates/Designs/Ideal2011/images/Map/dot_lblue.jpg"
}else if(markers[closest].markerType == 3){
markerImg="/files/billeder/../Templates/Designs/Ideal2011/images/Map/dot_dblue.jpg"
}else if(markers[closest].markerType == 4){
markerImg="/files/billeder/../Templates/Designs/Ideal2011/images/Map/dot_green.jpg"
}

$('.nearestPlace'+y).html(
"<img src='"+markerImg+"' alt='"+markers[closest].address+"' />"+
"<div class='CompanyName'><strong>"+markers[closest].title+"</strong></div>"+
markers[closest].address+"<br/>"+
markers[closest].postby+"<br/>"+
"Tlf.: "+markers[closest].phone+"<br/>"+
markers[closest].fax+
markers[closest].web+
markers[closest].email
);
//markers.pop(markers[closest]);
//points.pop(points[closest]);
//markers[closest] = "";
//points[closest]= "";
//alert(closest);
//markers.slice(closest,closest+1);
//points.slice(closest,closest+1);
//alert(markers[closest].title)
delete markers[closest];
delete points[closest]
}
}

从代码中的一些注释可以看出我已经尝试了很多不同的事情!他们似乎都不适合我!它给出第一个位置(甚至不是正确的位置),然后只是中断,对第二个和第三个不执行任何操作...

有人能看出其中的错误吗?或者也许更好地了解或可以编写代码来获得所需的功能?

lat1, lon1 - 当前点!

我在不大的区域内有 300 个标记,因此脚本应该不难找到 3 个最近的标记。

最佳答案

如果您迭代标记,您可以对每个标记调用此方法,然后将结果存储在一个数组中,您可以对数组进行排序。这将是一项成本高昂的操作......

    /**
* This will give you the distance in kilometers between 2 positions
*
* @param lat1 - The first positions latitude
* @param lng2 - The first positions longitude
* @param lat2 - The second positions latitide
* @param lng2 - The second positions longitude
*
* @return int- The distance in kilometers between the 2 places
*/
distanceFrom : function(lat1,lng1, lat2, lng2) {
var R = 6371; // km
var dLat = this._toRad((lat2-lat1));
var dLon = this._toRad((lng2-lng1));
var lat1 = this._toRad(lat1);
var lat2 = this._toRad(lat2);

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;

return d;
}

关于javascript - Google map api v2 - 在 map 中查找最近/最近的标记/点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7176991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com