Google maps 将地理编码结果附加到Infowindow内容
我想问一下如何将地理编码结果附加/显示到infowindow内容中。在这种情况下,我有多个标记。我尝试在infowindow内容上使用div,并在获得地理代码结果后更新div内容(使用回调),但它不起作用。如何解决这个问题Google maps 将地理编码结果附加到Infowindow内容,google-maps,jquery,google-maps-api-3,Google Maps,Jquery,Google Maps Api 3,我想问一下如何将地理编码结果附加/显示到infowindow内容中。在这种情况下,我有多个标记。我尝试在infowindow内容上使用div,并在获得地理代码结果后更新div内容(使用回调),但它不起作用。如何解决这个问题 <html> <head> <title>Reverse Geocoding v3 Example</title> <script type="text/javascript" src="http://maps.googl
<html>
<head>
<title>Reverse Geocoding v3 Example</title>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3&sensor=false"></script>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="markerwithlabel.js"></script>
<script type="text/javascript">
var locations = [
{"name":"A","lat":"25.113787","lon":"-102.233276"}, {"name":"B","lat":"25.798243","lon":"-102.96936"}, {"name":"C","lat":"27.033032","lon":"-103.974609"}, {"name":"D","lat":"26.370545","lon":"-103.112183"},
{"name":"E","lat":"26.636002","lon":"-100.794067"}, {"name":"F","lat":"25.699288","lon":"-98.827515"}, {"name":"G","lat":"24.805019","lon":"-100.332642"}, {"name":"H","lat":"24.285358","lon":"-101.705933"}
];
var geocoder;
var map;
var marker;
var lat_longs = new Array();
var infoWindow = null;
var markers = new Array();
var poi = new Array();
var fitMap = 0;
var timer = null;
totUpdateOld = new Array();
streetLocation = new Array();
ident = 0;
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(26.291773,-100.914917);
var mapOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
infoWindow = new google.maps.InfoWindow();
updatetimer(function() {
fitMapToBounds();
});
}
var updatetimer = function showCarPosition(){
if (markers.length>0){
ident = 2;
}
for (var i = 0; i < locations.length; i++) {
var coordinate = new google.maps.LatLng(locations[i].lat, locations[i].lon);
var windowContent =[
'<div class="windowcontent"><ul class="nav infowindow nav-pills nav-stacked">',
'<li><div id="pos'+i+'"></div><li>'].join('');
if (ident == 0){
codeLatLng(function(addr, divid){
streetLocation.push(addr);
console.log(divid+'-'+addr);
$("#"+divid).html(addr);
}, coordinate, "pos"+i);
var marker = createMarker({
map: map,
position: coordinate,
labelContent: (locations[i].name),
labelAnchor: new google.maps.Point(32, 0),
labelClass: "unitlabel",
labelStyle: {opacity: 1.0}
});
bindInfoWindow(marker, 'click', windowContent);
google.maps.event.addListener(infoWindow, 'domready', function(){
$('.viewlog').click(function() {
$.history.load($(this).attr('href'));
return false;
});
});
}
}
fitMapToBounds();
};
function codeLatLng(callback, coordinate, divid) {
if (geocoder) {
geocoder.geocode({'latLng': coordinate}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
callback(results[1].formatted_address, divid);
}else {
callback("unknown", divid);
}
}else {
return "Geocoder failed due to: " + status;
}
});
}
}
function createMarker(markerOptions) {
var marker = new MarkerWithLabel(markerOptions);
markers.push(marker);
lat_longs.push(marker.getPosition());
return marker;
}
function updateMarker(markerOptions,id) {
var marker = new MarkerWithLabel(markerOptions);
markers[id] = marker;
lat_longs[id] = marker.getPosition();
return marker;
}
function fitMapToBounds() {
var bounds = new google.maps.LatLngBounds();
if (fitMap == 0){
if (lat_longs.length>0) {
for (var i=0; i<lat_longs.length; i++) {
bounds.extend(lat_longs[i]);
}
map.fitBounds(bounds);
fitMap = 1;
}
}
}
function bindInfoWindow(marker, event, windowContent) {
google.maps.event.addListener(marker, event, function() {
infoWindow.setContent(windowContent);
infoWindow.open(map, marker);
});
}
function loadScript() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://maps.googleapis.com/maps/api/js?key=AIzaSyDAT9KcSpQ7RNfg5iQHsivb4-72lNLanH0&sensor=false&callback=initialize";
document.body.appendChild(script);
}
$(document).ready(function() {
initialize();
});
</script>
</head>
<body>
<div id="map_canvas" style="height:400px; border:1px 00f solid;"></div>
</body>
</html>
反向地理编码v3示例
变量位置=[
{“名称”:“A”,“lat”:“25.113787”,“lon”:“-102.233276”},{“名称”:“B”,“lat”:“25.798243”,“lon”:“-102.96936”},{“名称”:“C”,“lat”:“27.033032”,“lon”:“-103.974609”},{“名称”:“D”,“lat 26.370545”,“lon”:“-103.112183”},
{“名称”:“E”,“lat”:“26.636002”,“lon”:“-100.794067”},{“名称”:“F”,“lat”:“25.699288”,“lon”:“-98.827515”},{“名称”:“G”,“lat”:“24.805019”,“lon”:“-100.332642”},{“名称”:“H”,“lat”:“24.285358”,“lon”:“-101.705933”}
];
var地理编码器;
var映射;
var标记;
var lat_longs=新数组();
var infoWindow=null;
var markers=新数组();
var poi=新数组();
var-fitMap=0;
var定时器=null;
TotUpdateLod=新数组();
streetLocation=新数组();
ident=0;
函数初始化(){
geocoder=新的google.maps.geocoder();
var latlng=新的google.maps.latlng(26.291773,-100.914917);
变量映射选项={
缩放:8,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById(“map_canvas”),mapOptions);
infoWindow=new google.maps.infoWindow();
updatetimer(函数(){
fitMapToBounds();
});
}
var updatetimer=函数showCarPosition(){
如果(标记长度>0){
ident=2;
}
对于(变量i=0;i”,
“”]。加入(“”);
if(ident==0){
codeLatLng(功能(地址、分区ID){
街道定位。推送(addr);
console.log(divid+'-'+addr);
$(“#”+divid).html(addr);
},坐标,“pos”+i);
var marker=createMarker({
地图:地图,
位置:坐标,
标签内容:(位置[i]。名称),
新的google.maps.Point(32,0),
labelClass:“unitlabel”,
标签样式:{不透明度:1.0}
});
bindInfoWindow(标记“单击”,windowContent);
google.maps.event.addListener(infoWindow,'domready',function(){
$('.viewlog')。单击(函数(){
$.history.load($(this.attr('href'));
返回false;
});
});
}
}
fitMapToBounds();
};
函数codeLatLng(回调、坐标、divid){
if(地理编码器){
geocoder.geocode({'latLng':坐标},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
如果(结果[1]){
回调(结果[1]。格式化的\u地址,divid);
}否则{
回调(“未知”,divid);
}
}否则{
return“由于:+状态,地理编码器失败;
}
});
}
}
函数createMarker(markerOptions){
var标记=新标记WithLabel(标记选项);
标记器。推(标记器);
lat_longs.push(marker.getPosition());
返回标记;
}
函数更新标记器(标记选项,id){
var标记=新标记WithLabel(标记选项);
标记器[id]=标记器;
lat_longs[id]=marker.getPosition();
返回标记;
}
函数fitMapToBounds(){
var bounds=new google.maps.LatLngBounds();
如果(fitMap==0){
如果(横向长度>0){
对于(var i=0;i我只会在点击标记时对点进行反向地理编码,并在从地理编码器返回数据时将其附加到信息窗口中。类似如下:
function bindInfoWindow(marker, event, windowContent) {
google.maps.event.addListener(marker, event, function() {
infoWindow.setContent(windowContent);
geocoder.geocode({latLng: marker.getPosition()}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
infoWindow.setContent(infoWindow.getContent()+"<br>"+results[1].formatted_address+"<br>status="+status);
infoWindow.open(map, marker);
}
} else {
infoWindow.setContent(infoWindow.getContent()+"<br>revere geocode failed:"+status);
infoWindow.open(map, marker);
}
});
});
}
函数bindInfoWindow(标记、事件、windowContent){
google.maps.event.addListener(标记、事件、函数(){
setContent(windowContent);
geocoder.geocode({latLng:marker.getPosition()},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
如果(结果[1]){
infoWindow.setContent(infoWindow.getContent()+“
”+结果[1]。格式化地址+”
状态=“+status”);
信息窗口。打开(地图、标记);
}
}否则{
infoWindow.setContent(infoWindow.getContent()+“
尊重地理编码失败:“+状态);
信息窗口。打开(地图、标记);
}
});
});
}
您可以通过存储反向地理编码的结果来提高效率,如果以前单击过该点,则不必再次对其进行反向地理编码。内容(windowContent)不是div(节点),而是字符串。感谢您的回复。我将使用效率更高的内容