【问题标题】:How do I mark multiple locations on Google Maps using address? [duplicate]如何使用地址在 Google 地图上标记多个位置? [复制]
【发布时间】:2019-10-30 07:42:29
【问题描述】:

我有一个包含多个地址的数据库,我正在尝试使用 Google Maps API 标记所有地址。我以前使用过此代码,但它一次只允许我使用一个位置。

<!DOCTYPE html>
<html> 
<head> 
   <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
   <title>Google Maps Geocoding Demo 1</title> 
   <script src="http://maps.google.com/maps/api/js?sensor=false" 
           type="text/javascript"></script> 
</head> 
<body> 
   <div id="map" style="width: 400px; height: 300px;"></div> 

   <script type="text/javascript"> 

   var address = 'London, UK';

   var map = new google.maps.Map(document.getElementById('map'), { 
       mapTypeId: google.maps.MapTypeId.TERRAIN,
       zoom: 6
   });

   var geocoder = new google.maps.Geocoder();

   geocoder.geocode({
      'address': address
   }, 
   function(results, status) {
      if(status == google.maps.GeocoderStatus.OK) {
         new google.maps.Marker({
            position: results[0].geometry.location,
            map: map
         });
         map.setCenter(results[0].geometry.location);
      }
   });

   </script> 
</body> 
</html>

【问题讨论】:

  • 有多少个地址?您可以将坐标存储在数据库中吗?您是否搜索过您的问题的重复项?
  • 我有大约 20 个左右,我只能使用城市、邮政编码和地址。前段时间我在上面找到了这段代码 sn-p,它可以满足我的需求,但我需要使用多个地址。
  • 20 是可行的,但您需要处理查询速率限制。这里有几个重复的,我会在时间允许的时候尝试挖掘一个。
  • 好的,非常感谢!
  • 有没有办法通过支付更多来提高查询速率限制,或者如果我获得更多地址,我必须将请求分成许多小请求?钱不是问题。

标签: javascript google-maps google-maps-api-3


【解决方案1】:

您可以使用 PHP 脚本从数据库中返回地址,然后在 Javascript 中循环。

function getAddresses() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            a = JSON.parse(this.responseText);
            placeMarkers(a);
        }
    };
    xhttp.open("GET", "getaddresses.php", true);
    xhttp.send();
}
function placeMarkers(a) {
    var geocoder = new google.maps.Geocoder();
    for(var x=0; x<a.length; x++) {
        geocoder.geocode({
            'address': a[x]
         }, 
         function(results, status) {
            if(status == google.maps.GeocoderStatus.OK) {
               new google.maps.Marker({
                  position: results[0].geometry.location,
                  map: map
               });
               map.setCenter(results[0].geometry.location);
            }
         });
    }
}

getaddresses.php

<?php 
$query = mysqli_query($link, "SELECT Address FROM AddressTable");
$addresses = [];
while($queryinfo = mysqli_fetch_array($query)) {
    array_push($addresses, $queryinfo['Address']);
}
$addresses = json_encode($addresses);
print $addresses;
?>

然后只需调用 getAddresses()

刚刚在多个地址上进行了测试,在 10 次查询后我收到了 Over_Limit 错误。

【讨论】:

  • 大约 10 个结果后,此解决方案将遇到来自地理编码器的 OVER_QUERY_LIMIT 响应(并且由于它不报告失败,因此会静默失败)。这个问题已经存在多年,因此网站上有多个重复项。
  • @geocodezip 状态确实返回“OVER_QUERY_LIMIT”,所以我猜可以测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多