gpt4 book ai didi

javascript - 诺基亚/Ovi map 问题 - 标记的动态刷新

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:20:45 25 4
gpt4 key购买 nike

我在使用动态 Ovi/诺基亚 map 时遇到问题,我想每 30 秒重新加载一次标记 - 标记是从 XML 中读取的并且具有动态内容。除了气泡,一切正常。它仅在加载时显示,然后在第一次刷新时显示标记不再可单击(单击时更改为缩放)。我希望更新后的标记也能在气泡中显示最新的 html 内容:

<script> 
var markerCoords;
var mapContainer;
var container;
var myMap;
var bubbles=new Array();

// When the HTML page body section is loaded this function will be called.
// This function gets passed the marker XML data file name
var updateTime=30;
var updateTime=1000*updateTime;
var markerUpdate=self.setInterval("placeMarkersOnMaps('geomarkers.xml')",updateTime);
function placeMarkersOnMaps(filename)
{
var counter = 0;
$.ajax({
type: "GET",
url: filename ,
dataType: "xml",
success: parseXml,
error : err
});

}
function err (){
alert("An Error has occurred.");
}

// Here we create an Nokia Maps within a Container.

mapContainer = document.getElementById("mapContainer");


myMap = nokia.maps.map,
map = new myMap.Display(mapContainer, {
center: [52.59, 13.3], zoomLevel: 2,
components: [ new myMap.component.Behavior(),
new nokia.maps.map.component.ZoomBar(),
new nokia.maps.map.component.Overview(),
new nokia.maps.map.component.TypeSelector(),
new nokia.maps.map.component.ScaleBar()
]
});



placeMarkersOnMaps('geomarkers.xml');






function deleteMarker(coords) {
var marker;
for (i=0; i< map.objects.getLength(); i++) {
if ( map.objects.get(i) instanceof nokia.maps.map.StandardMarker ) {
if ( coords.latitude == map.objects.get(i)..coords.latitude
&& coords.longitude == map.objects.get(i)..coords.longitude ){
marker = map.objects.get(i);
marker.removeListener("click", function(evt) { infoBubbles.addBubble(evt.target.$html, evt.target.coordinate);}, false);;
map.objects.remove (marker);
break;
}
}
}
return marker;
}
function parseXml(xml)
{
var infoBubbles = new nokia.maps.map.component.InfoBubbles();
map.addComponent( infoBubbles);
var container = new nokia.maps.map.Container();
$(xml).find("marker").each(function(){

//Read the name, address, latitude and longitude for each Marker
var nme = $(this).find('name').text();
var address = $(this).find('address').text();
var lat = $(this).find('lat').text();
var lng = $(this).find('lng').text();
var zhtml = $(this).find('zhtml').text();
var zcolor = $(this).find('zcolor').text();

//Put each marker on the map as the data has been read.

var markerCoords = new nokia.maps.geo.Coordinate(parseFloat(lat), parseFloat(lng));

var marker = new nokia.maps.map.StandardMarker(markerCoords, {text:nme, brush:{color:zcolor}, $html:zhtml});
marker.addListener('click' , function(evt) { infoBubbles.addBubble(evt.target.$html, evt.target.coordinate);}, false);
container.objects.add(marker);

});
// Add the marker container .
map.objects.add(container);
// Zoom into the markers.



}


</script>

最佳答案

看起来初始化信息气泡的行在错误的位置:

var infoBubbles = new nokia.maps.map.component.InfoBubbles();   
map.addComponent( infoBubbles);

应该放在行前

  placeMarkersOnMaps('geomarkers.xml');

否则,您将在每次运行 placeMarkersOnMaps() 时尝试添加一个信息气泡组件。通常只有一个。

您的 deleteMarkers 函数也可以替换为

 myMap.objects.clear();

关于javascript - 诺基亚/Ovi map 问题 - 标记的动态刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9212776/

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