[英]Google maps custom markers issues
我正在尝试在Google地图上可视化一些融合表数据。 我有一些记录,其中地址按区域号分组。 基本上我想发生的是以下内容:
到目前为止,这是我所做的:
这是对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函数:从字符串地址返回google maps点
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(限制您的请求),但这可能会使地图加载速度太慢。
最佳选择 :离线对地址进行地理编码,并将坐标存储在FusionTable中,在查询中返回它们,然后使用它们来显示标记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.