Google maps 在google地图上查找更接近的点以创建标记
我有一个纬度和经度的多维数组,还有一个单独的标记“m”。我需要从数组中获取距离“m”最近的两个点,以便创建其他两个标记。任何帮助都将不胜感激 这是LAT和LON的数组Google maps 在google地图上查找更接近的点以创建标记,google-maps,google-maps-api-3,google-maps-markers,Google Maps,Google Maps Api 3,Google Maps Markers,我有一个纬度和经度的多维数组,还有一个单独的标记“m”。我需要从数组中获取距离“m”最近的两个点,以便创建其他两个标记。任何帮助都将不胜感激 这是LAT和LON的数组 var locations= [ ['loc1', 54.1121824,-1.3983992], ['loc2', 54.2121824,-1.4323992], ['loc3', 54.4121824,-1.599
var locations= [
['loc1', 54.1121824,-1.3983992],
['loc2', 54.2121824,-1.4323992],
['loc3', 54.4121824,-1.5993992],
['loc4', 54.3871874,-1.6773992],
['loc5', 54.1963824,-1.5983992]
];
我想得到最接近m=
54.1143824,-1.4963992
的两个点,以便从它们创建两个标记其中一个组件使用几何体
库函数计算距离(从:LatLng,到:LatLng,半径?:编号)
其中半径
是可选的(地球半径)
必须使用库
参数将几何体
包含在JS API中:
现在,您可以循环浏览数据,保存每个坐标与特殊标记之间的计算距离m
。默认情况下,结果以米为单位(可选地更改半径将获得不同的单位)
对于坐标数据中的每一行,创建一个rowLatLng=new google.maps.LatLng(行[1],行[2])
google.maps.geometry.spherical.ComputedIstanceBeween(rowLatLng,m.getPosition())
然后,我能想到的提取两个最近点的最佳方法是使用对象{locationname:“loc1”,distance:20}
保存与标记“m”比较的点以及计算的距离。更好的方法是保存locations变量中的“row”索引,以便轻松地提取坐标
然后,这些对象的数组可以按距离排序。我在这里找到了一个帖子:按照价格对房屋进行分类的答案如下:
homes.sort(function(a,b) { return parseFloat(a.price) - parseFloat(b.price) } );
其中一个组件正在使用
几何体库函数计算距离介于(从:LatLng到:LatLng,半径?:编号)
其中半径
是可选的(地球半径)
必须使用库
参数将几何体
包含在JS API中:
现在,您可以循环浏览数据,保存每个坐标与特殊标记之间的计算距离m
。默认情况下,结果以米为单位(可选地更改半径将获得不同的单位)
对于坐标数据中的每一行,创建一个rowLatLng=new google.maps.LatLng(行[1],行[2])
google.maps.geometry.spherical.ComputedIstanceBeween(rowLatLng,m.getPosition())
然后,我能想到的提取两个最近点的最佳方法是使用对象{locationname:“loc1”,distance:20}
保存与标记“m”比较的点以及计算的距离。更好的方法是保存locations变量中的“row”索引,以便轻松地提取坐标
然后,这些对象的数组可以按距离排序。我在这里找到了一个帖子:按照价格对房屋进行分类的答案如下:
homes.sort(function(a,b) { return parseFloat(a.price) - parseFloat(b.price) } );
我在我的主计算机上有一些代码,但基本上你要做的是:
- 通过坐标循环并计算每个坐标与m之间的距离(哈弗森公式)
- 将每个距离与位置名称存储在一个数组中
- 对数组进行排序
宾果
编辑:
计算Haversine的一些代码:
Number.prototype.toRad=function() {
return this * (Math.PI / 180);
}
function Haversine=function(lat1, lon1, lat2, lon2) {
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();
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;
}
我在我的主计算机上有一些代码,但基本上你要做的是:
- 通过坐标循环并计算每个坐标与m之间的距离(哈弗森公式)
- 将每个距离与位置名称存储在一个数组中
- 对数组进行排序
宾果
编辑:
计算Haversine的一些代码:
Number.prototype.toRad=function() {
return this * (Math.PI / 180);
}
function Haversine=function(lat1, lon1, lat2, lon2) {
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();
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;
}
到目前为止你试过什么吗?也许如果发布你的代码,有人可以给出解决方案。到目前为止,你试过什么吗?也许,如果发布您的代码,有人可以给出解决方案。