当前位置: 首页 > 面试题库 >

Google Maps API-获取与邮政编码最接近的点

冀嘉木
2023-03-14
问题内容

我正在使用Google Maps API v3和javascript将地图添加到网站中。

我有一个地址列表,并已在地图上成功绘制了它们。当用户输入邮政编码时,地图将重新定位在他们的位置,显示最接近该点的标记。现在,我需要创建一个最接近其邮政编码的3或5个位置的列表视图,并带有用于行驶方向的链接。我被困住了…并且愿意提出建议。


问题答案:

通常的解决方案是使用google.maps.geometry.spherical库computeDistanceBetween(from:LatLng,to:LatLng,radius?:number)方法将数字减少到10,然后使用距离矩阵将行驶距离返回到位置,因此结果可以按行驶距离(实际行进距离)进行排序,并通过请求范围内的实际行进距离缩小到最接近的3-5个位置。
(从FusionTables“比萨店”示例中借用的数据)

  function codeAddress() {
    var address = document.getElementById('address').value;
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
    if (customerMarker) customerMarker.setMap(null);
        customerMarker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location
        });
    closest = findClosestN(results[0].geometry.location,10);
        // get driving distance
        closest = closest.splice(0,3);
        calculateDistances(results[0].geometry.location, closest,3);
      } else {
        alert('Geocode was not successful for the following reason: ' + status);
      }
    });
  }

function findClosestN(pt,numberOfResults) {
   var closest = [];
   document.getElementById('info').innerHTML += "processing "+gmarkers.length+"<br>";
   for (var i=0; i<gmarkers.length;i++) {
     gmarkers[i].distance = google.maps.geometry.spherical.computeDistanceBetween(pt,gmarkers[i].getPosition());
     document.getElementById('info').innerHTML += "process "+i+":"+gmarkers[i].getPosition().toUrlValue(6)+":"+gmarkers[i].distance.toFixed(2)+"<br>";
     gmarkers[i].setMap(null);
     closest.push(gmarkers[i]);
   }
   closest.sort(sortByDist);
   return closest;
}

function sortByDist(a,b) {
   return (a.distance- b.distance)
}

function calculateDistances(pt,closest,numberOfResults) {
  var service = new google.maps.DistanceMatrixService();
  var request =    {
      origins: [pt],
      destinations: [],
      travelMode: google.maps.TravelMode.DRIVING,
      unitSystem: google.maps.UnitSystem.METRIC,
      avoidHighways: false,
      avoidTolls: false
    };
  for (var i=0; i<closest.length; i++) request.destinations.push(closest[i].getPosition());
  service.getDistanceMatrix(request, function (response, status) {
    if (status != google.maps.DistanceMatrixStatus.OK) {
      alert('Error was: ' + status);
    } else {
      var origins = response.originAddresses;
      var destinations = response.destinationAddresses;
      var outputDiv = document.getElementById('side_bar');
      outputDiv.innerHTML = '';

      var results = response.rows[0].elements;
      for (var i = 0; i < numberOfResults; i++) {
        closest[i].setMap(map);
        outputDiv.innerHTML += "<a href='javascript:google.maps.event.trigger(closest["+i+"],\"click\");'>"+closest[i].title + '</a><br>' + closest[i].address+"<br>"
            + results[i].distance.text + ' appoximately '
            + results[i].duration.text + '<br><hr>';
      }
    }
  });
}


 类似资料:
  • 问题内容: 我只是在寻找有关最佳方法的建议… 我需要创建一个搜索功能,以在邮政编码的50英里半径内搜索“用户”。我有一个邮政编码表,其中包含所有美国邮政编码及其纬度/经度,但我只是想找出构造和查询数据的最佳方式… 是否应在用户表中添加纬度/经度列,并在给定邮政编码范围内的所有用户查询它?还是应该在邮政编码表中查询半径范围内的所有邮政编码,然后在用户表中查询所有具有结果(邮政编码)的用户?要么… ?

  • 问题内容: 我正在编写一个特定于美国的Web应用程序,因此其他国家/地区用于邮政编码的格式并不重要。我有一份我们要加载到包含以下内容的数据库表中的邮政编码列表: 5位美国邮政编码 纬度 经度 usps分类代码 状态码 城市 邮政编码是主键,因为这是我要查询的内容。我开始使用中型int 5,但是它会截断前导零的邮政编码。 我考虑使用char5,但担心对char变量建立索引会对性能造成影响。 所以我的

  • 我在时区欧洲/柏林(+02),Postgresql运行在UTC(+00)。我需要在最晚的本地午夜日期(我的时区中当前一天的开始日期)获得带有时区的时间戳。

  • 问题内容: 我正在尝试为Django中的基本商店定位器处理邻近搜索。我不想在我的应用中随身携带PostGIS,而是可以使用GeoDjango的距离过滤器,而是想在模型查询中使用余弦球法则距离公式。为了提高效率,我希望所有计算都可以在一个查询中在数据库中完成。 一个来自Internet的MySQL查询示例,实现了余弦的球形定律,如下所示: 该查询需要引用每个商店的经/纬度值的邮政编码外键。如何在Dj

  • 问题内容: 我正在尝试学习如何“压缩”列表。为此,我有一个程序,在某个特定位置执行以下操作: 这给了我三个列表,,,和,每一个,比方说,大小为20。 现在,我这样做: 但是,当我这样做时: 我得到20,这不是我期望的。我预计三个。我认为我做的事情根本上是错误的。 问题答案: 将三个包含20个元素的列表放在一起时,结果将包含20个元素。每个元素都是一个三元组。 你自己看: 要找出每个元组包含多少个元

  • 本文向大家介绍匹配邮政编码的Java程序,包括了匹配邮政编码的Java程序的使用技巧和注意事项,需要的朋友参考一下 假设我们有以下邮政编码。 现在,设置以下正则表达式以匹配美国的邮政编码。 示例 输出结果