javascript - 谷歌地图自定义标记问题

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

我正在尝试在谷歌地图上可视化一些融合表数据。 我有许多记录,其地址按区域编号分组。 基本上我想要发生的事情如下:

  1. 我从 ft 中提取数据
  2. 对于每条记录,我都会对地址进行地理编码 并根据区域编号分配自定义标记
  3. 我可视化按不同标记分组的所有不同记录

这是我到目前为止所做的事情:

这是对 ft 的查询:

var query = "SELECT 'Full Address' , Territory FROM " + tableid;
          query = encodeURIComponent(query);
          var gvizQuery = new google.visualization.Query(
              'http://www.google.com/fusiontables/gvizdata?tq=' + query);

现在我想详细说明查询数据

gvizQuery.send(function(response) {
      var numRows = response.getDataTable().getNumberOfRows();
      // For each row in the table, create a marker
      for (var i = 0; i < numRows; i++) {
        var stringaddress = response.getDataTable().getValue(i, 0);
        var territory = response.getDataTable().getValue(i,1);
        **latlng**(stringaddress,
        function(data){
          console.log(data);
          **createMarker**(data,territory,stringaddress);//callback
        });
      }
    });

这是latlng函数:,它从字符串地址返回谷歌地图点

function latlng(address,callback){
        var latlng;
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode({
            "address": address
        }, function(results,status) {
           if ( status == google.maps.GeocoderStatus.OK ) { 
            latlng= new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
            callback(latlng);
           }
        });
    }

最后是创建标记功能

var createMarker = function(coordinate, territory,address) {
        console.log("now drawing marker for " + coordinate + "found in territory number " + territory);
        var markerpath="images/icon"+territory+".png";
          var marker = new google.maps.Marker({   
            map: map,
            position: coordinate,
            icon: new google.maps.MarkerImage(markerpath)
          });
          google.maps.event.addListener(marker, 'click', function(event) {
            infoWindow.setPosition(coordinate);
            infoWindow.setContent('Address: ' + address + '<br>Territory = ' + territory);
            infoWindow.open(map);
          });
        };

我面临的问题是,虽然我应该为我的 ft 的每条记录调用 createmarker 函数,但它实际上只被调用几次 (共 250 个)并且仅代表一个地区(第 7 名)。 我错过了什么? 感谢您的帮助!

最佳答案

地理编码器受到速率限制和配额的限制,大约 10 次地理编码操作后,您将看到返回的 OVER_QUERY_LIMIT 状态(您的代码会默默地忽略该状态)。要查看问题,请记录返回的状态:

function latlng(address,callback){
    var latlng;
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode({
        "address": address
    }, function(results,status) {
       if ( status == google.maps.GeocoderStatus.OK ) { 
        latlng= new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
        callback(latlng);
       } else {
         console.log("geocode failed: "+status);
       }
    });
}

(或者您可以添加一个警报,这对于 200 个标记来说确实很烦人)

您需要适当处理 OVERY_QUERY_LIMIT(限制您的请求),但这可能会使您的 map 加载速度太慢。

最佳选择:对地址进行离线地理编码并将坐标存储在 FusionTable 中,在查询中返回它们并使用它们来显示标记。

关于javascript - 谷歌地图自定义标记问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29296700/

相关文章:

javascript - 我想将 pubnub 与 zendesk 集成

javascript - 确保变量是数组

android - 从另一台设备实时定位安卓设备

google-maps - 谷歌地图折线和标记在一起

javascript - 从 Google map 视口(viewport)边界中排除重叠元素

google-maps-api-3 - 有没有办法为视网膜显示创建高分辨率的 Google Maps KML 图层?

javascript - 我可以根据路由的模式将中间件应用于路由吗?

Javascript 动画不适用于 IE

javascript - 在 map 上画线并使用javascript获取国家线通过

google-maps - Google Maps v3 getBounds超出了 map 上可见的范围