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
Google maps 在google地图上查找更接近的点以创建标记_Google Maps_Google Maps Api 3_Google Maps Markers - Fatal编程技术网

Google maps 在google地图上查找更接近的点以创建标记

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

我有一个纬度和经度的多维数组,还有一个单独的标记“m”。我需要从数组中获取距离“m”最近的两个点,以便创建其他两个标记。任何帮助都将不胜感激

这是LAT和LON的数组

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;
}

到目前为止你试过什么吗?也许如果发布你的代码,有人可以给出解决方案。到目前为止,你试过什么吗?也许,如果发布您的代码,有人可以给出解决方案。