gpt4 book ai didi

c# - 谷歌地图信息窗口显示以前的地理结果而不是当前结果

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:22 25 4
gpt4 key购买 nike

有人可以帮我解决这个问题吗?我不知道我的代码出了什么问题,我想在信息窗口中显示位置地址,但每次它都显示以前的结果而不是当前结果。例如,当我第一次单击一个位置时,它会添加一个标记,但显示的地址是未定义的(这是以前的结果)。然后我点击另一个点,它显示了第一个地址。

我如何解决这个问题以显示当前标记位置的地址?请。多谢。下面是我的代码..

var map;
var marker;
var markersArray = [];

var infoWindow;
var buffer;

var geocoder, regeocoder;

function initialize() {

window.onunload = google.maps.Unload;

// Creating an option object for the map

var myOptions = {
zoom: 16,
center:COUNTRY,
mapTypeId: google.maps.MapTypeId.ROADMAP
};

// Initializing the map

map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

// Add onClick event to the map

google.maps.event.addListener(map, 'click', function(event) { placeMarker(event.latLng, true); });
}

function placeMarker(location, flag) {

// Get clicked location <Latitude, Longtitude>

var clickedLocation = location;

if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}

// Create a new marker

marker = new google.maps.Marker({
position: clickedLocation,
map: map,
icon: 'image/blue-dot.png',
title: "Select this location",
clickable: true
});

if (flag == true) {

// Start reverse Geocode

regeocoder = new google.maps.Geocoder();

if (regeocoder) {
regeocoder.geocode({'latLng': clickedLocation, 'region': region}, function(results, status){

if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) { buffer = results[0].formatted_address; }
}
else { }
});
}

setHiddenValue(buffer);

setMarkerInfo(buffer, clickedLocation);

}

// Attach mouseover event to a marker that will trigger the markerInfo

google.maps.event.addListener(marker, 'mouseover', function() { infowindow.open(map,marker); });

// Attach mouseout event to the marker that will delete the markerInfo

google.maps.event.addListener(marker, 'mouseout', function() { if (infowindow) infowindow.close(); });

markersArray.push(marker);

map.setCenter(clickedLocation);
}


function setMarkerInfo(title, textbody) {

// Initialize the contentString

var contentString = '<div id="content">'+'<div id="siteNotice">'+'</div>'+
'<br/><h3 id="firstHeading" class="firstHeading">' + title + '</h1>'+
'<div id="bodyContent">'+
'<p>Map Coordinates: <br/>' + textbody + '</p>'+
'</div>'+
'</div>';

infowindow = new google.maps.InfoWindow({ content: contentString });
infosArray.push(infowindow);
}

function setHiddenValue(data) {
var hiddenVal = document.getElementById('getLoc');
if (hiddenVal) { hiddenVal.value = data; }
}

function searchMap(info) {

var address = info;
var loc;
var addr;

geocoder = new google.maps.Geocoder();

if (geocoder) {
geocoder.geocode({'address': address, 'region': region}, function(sresults, sstatus){
if (sstatus == google.maps.GeocoderStatus.OK) {

if (sresults[0]) {

loc = sresults[0].geometry.location;

geocoder.geocode({'latLng': loc}, function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) { addr = results[0].formatted_address; }
}
else { alert("No Matching Results"); }
});

}

}else { alert("No Matching Results"); }

});
}

if (geocoder) {
geocoder.geocode({'address': address, 'region': region}, function(sresults, sstatus){
if (sstatus == google.maps.GeocoderStatus.OK) {

if (sresults[0]) {

loc = sresults[0].geometry.location;

geocoder.geocode({'latLng': loc}, function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) { addr = results[0].formatted_address; }
}
else { alert("No Matching Results"); }
});

}

}else { alert("No Matching Results"); }

});
}

setHiddenValue(addr);

setMarkerInfo(addr, loc);

placeMarker(loc, false);

}

最佳答案

您的问题与地址信息异步到达的事实有关,因此您在从以下位置获取相对格式的地址之前执行所有代码:

geocoder.geocode({'latLng': loc}, function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) { addr = results[0].formatted_address; }
}
else { alert("No Matching Results"); }
});

我建议将所有内容链接到组合函数调用中:

google.maps.event.addListener(marker, 'mouseover', function() { 

而不是:

infowindow.open(map,marker); });

你打电话:

new google.maps.InfoWindow({ content:

而不是:

contentString });

你打电话:

geocoder.geocode({'latLng': loc}, function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) { addr = results[0].formatted_address; }
} else {
* alert("No Matching Results"); */
}
});

并在此处将格式化后的结果转换为您想要的 css 形式,并将其作为字符串返回。

这样,每当您经过标记时,您就可以查询相对地址并即时创建信息窗口。

希望对您有所帮助。

关于c# - 谷歌地图信息窗口显示以前的地理结果而不是当前结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com