首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google映射自定义标记问题

Google映射自定义标记问题
EN

Stack Overflow用户
提问于 2015-03-27 08:58:54
回答 1查看 149关注 0票数 0

我试图在google地图上可视化一些融合表数据。我有很多记录,地址都是按区号分类的。基本上,我想要做的是:

  1. 我从ft提取数据
  2. 对于每条记录,我对地址进行地理编码,并根据区域号指定一个自定义标记。
  3. 我把所有不同的记录按不同的标记组合在一起

以下是我迄今所做的工作:

这是查询ft

代码语言:javascript
复制
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);

现在我要详细介绍查询数据

代码语言:javascript
复制
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函数:,它从字符串地址返回google映射点

代码语言:javascript
复制
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);
           }
        });
    }

最后是创建标记函数

代码语言:javascript
复制
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)。我错过了什么?谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2015-03-27 12:50:26

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

代码语言:javascript
复制
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 (节流您的请求),但这可能会使您的地图加载太慢。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29296700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档