2013-02-13 2 views
4

Это основано на API Карт Google v3. Страница обновляется каждые 10 секунд и обновляет положения маркеров на карте с автоматическим центром и автоматическим масштабированием. Ниже приведены вопросы, которые я сталкиваюсь:google maps api v3 автоматический центр автообновление

  1. Каждый раз, когда страница загружается (каждые 10 секунд) карта центрируется в (47.6145, -122.3418) первоначально и затем центров и масштаба на основе позиции маркеров. Если раскомментировать следующую карту не загружается вообще:

центр: новый google.maps.LatLng (47,6145, -122,3418),

Как я могу остановить карту загрузки инициал lat и long (47.6145, -122.3418) каждый раз, когда карта обновляется.

2. Есть ли способ контролировать уровни масштабирования?

Вот код, основанный на API V3 Google Maps

function load() { 
    var map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(47.6145, -122.3418), 
    zoom: 14, 
    mapTypeId: 'roadmap' 
    }); 
    var infoWindow = new google.maps.InfoWindow; 

    downloadUrl("phpsqlajax_genxml2.php", function(data) { 

    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("marker"); 
    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0; i < markers.length; i++) { 
     var UID = markers[i].getAttribute("UID"); 
     var type = markers[i].getAttribute("type"); 
     var point = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("latitude")), 
      parseFloat(markers[i].getAttribute("longitude"))); 
     var html = "<b>" + UID + "</b> <br/>"; 
     var icon = customIcons[type] || {}; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: icon.icon, 
     shadow: icon.shadow 
     }); 
    bounds.extend(point); 
     bindInfoWindow(marker, map, infoWindow, html); 
    } 
    map.fitBounds(bounds); 
    }); 
} 

function bindInfoWindow(marker, map, infoWindow, html) { 
    google.maps.event.addListener(marker, 'click', function() { 
    infoWindow.setContent(html); 
    infoWindow.open(map, marker); 
    }); 
} 


    setInterval(load, 10000); 

function downloadUrl(url, callback) { 
    var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     request.onreadystatechange = doNothing; 
     callback(request, request.status); 
    } 
    }; 

    request.open('GET', url, true); 
    request.send(null); 
} 

ответ

0

Во-первых, чтобы контролировать уровень масштабирования есть метод, называемый setZoom(), что вы можете вызвать на объект карты, в вашем примере переменной map.

map.setZoom(5); 

, но больше к вашей другой проблеме обновления карты. Я предполагаю, что все веб-страница освежает, чтобы обновить содержимое карты - я думаю, вы должны исследовать Ajax вызовов, чтобы обновить данныев карте без обновления всей страницы

У вас уже есть основание, используя метод downloadUrl() - теперь просто поместите это на setInterval() и дайте обновлять данные каждые 30 секунд до 1 минуты.

Я также предлагаю вам очистить карту маркеров до того, как вы добавите новые, иначе у вас будет утечка памяти, создающая повторяющиеся элементы DOM при каждом обновлении данных. Обычно я помещаю ссылки на маркер в массив, а затем перебираю массив и запускаю marker.setMap(null), который удаляет маркер с карты.

EDIT с фрагмента кода

используя фрагмент кода выше позволяет попробовать и сделать эту работу, разделяя код на отдельные функции функции нагрузки и функцию обновления, а также убедитесь, что вы двигаетесь map и infoWindow в глобальный охват.

var map; 
var infoWindow; 
function load() { 
    map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(47.6145, -122.3418), 
    zoom: 14, 
    mapTypeId: 'roadmap' 
    }); 
    infoWindow = new google.maps.InfoWindow; 
    refresh(); 
} 
function refresh(){ 

    downloadUrl("phpsqlajax_genxml2.php", function(data) { 

    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("marker"); 
    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0; i < markers.length; i++) { 
     var UID = markers[i].getAttribute("UID"); 
     var type = markers[i].getAttribute("type"); 
     var point = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("latitude")), 
      parseFloat(markers[i].getAttribute("longitude"))); 
     var html = "<b>" + UID + "</b> <br/>"; 
     var icon = customIcons[type] || {}; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: icon.icon, 
     shadow: icon.shadow 
     }); 
    bounds.extend(point); 
     bindInfoWindow(marker, map, infoWindow, html); 
    } 
    map.fitBounds(bounds); 
    }); 
} 
setInterval("refresh()",60000); 
+0

Благодарим за быстрый ответ. Моя проблема с масштабированием решена. Я попробовал обновить загрузку Url(), но карта и маркеры не обновляются на карте. Только когда я обновляю страницу, карта и маркеры обновляются. Можете ли вы посоветовать мне, как решить эту проблему. Большое спасибо! – user2067337