Как обновить контакты Google Map без обновления всей карты? - PullRequest
1 голос
/ 30 декабря 2011

Я пытался создать карту Google, которая бы показывала несколько маркеров в разных местах. Эта карта связана с базой данных, где хранятся широта и долгота. Я хочу сделать эту карту, чтобы я мог изменить широту и долготу в базе данных, чтобы маркеры могли обновляться и перемещаться в новое местоположение. Но я не хочу перезагрузить всю карту, только данные. Вот код, и спасибо за вашу помощь!

<script type="text/javascript">
//<![CDATA[

var iconBlue = new GIcon(); 
iconBlue.image = 'mm_20_blue.png';
iconBlue.shadow = 'mm_20_shadow.png';
iconBlue.iconSize = new GSize(16, 25);
iconBlue.shadowSize = new GSize(27.5, 25);
iconBlue.iconAnchor = new GPoint(7.5, 25);
iconBlue.infoWindowAnchor = new GPoint(5, 1);

var iconRed = new GIcon(); 
iconRed.image = 'mm_20_red.png';
iconRed.shadow = 'mm_20_shadow.png';
iconRed.iconSize = new GSize(16, 25);
iconRed.shadowSize = new GSize(27.5, 25);
iconRed.iconAnchor = new GPoint(7.5, 25);
iconRed.infoWindowAnchor = new GPoint(5, 1);

var customIcons = [];
customIcons["1"] = iconBlue;
customIcons["2"] = iconRed;

function load() {
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map"));
    map.setUIToDefault();
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(34.081187, -83.980721), 8);
    geocoder = new GClientGeocoder();


    GDownloadUrl("genxml2.php", function(data) {
      var xml = GXml.parse(data);
      var markers = xml.documentElement.getElementsByTagName("marker");
      for (var i = 0; i < markers.length; i++) {
        var Names = markers[i].getAttribute("Names");
        var phoneNum = markers[i].getAttribute("phoneNum");
        var gender = markers[i].getAttribute("gender");
        var homeAd = markers[i].getAttribute("homeAd");
        var lat = markers[i].getAttribute("latitudeE6")
        var lng = markers[i].getAttribute("longitudeE6")
        var point = new GLatLng(parseFloat(markers[i].getAttribute("latitudeE6")),
                                parseFloat(markers[i].getAttribute("longitudeE6")));
        var marker = createMarker(point, Names, phoneNum, gender, homeAd, lat, lng);
        map.addOverlay(marker);
      }
    }
    );
  }
}

function createMarker(point, Names, phoneNum, gender, homeAd, lat, lng) {
  var marker = new GMarker(point, customIcons[gender]);
  place = marker

  var html = "<b>Name: " + Names + "</b> <br/>Phone #: " + phoneNum + "</b> <br/>Home Address: " + homeAd + "</b> <br/>Current Address: " + place.address
  + "</b> <br/>Latitude: " + lat + "</b> <br/>Longitude: " + lng;
  GEvent.addListener(marker, 'click', function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
};

//]]>

(некоторая часть кода была исключена, например, клавиша MD5)

Ответы [ 2 ]

0 голосов
/ 30 декабря 2011

Вам следует переключиться на Google Maps API v3, где указатели связаны с картой, а не наоборот. Кроме того, вы получите множество интересных новых функций бесплатно!

0 голосов
/ 30 декабря 2011

Первая функция make с именем load_marker

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

Также вы можете перезагрузить маркеры в событии карты. есть два полезных события, которые вы можете использовать.

drag_end и zoom_changed. Вы можете зарегистрировать их с помощью функции gmap.registerEvent

edit: добавлен пример кода / ваш код должен быть таким.

function load() {
 if (GBrowserIsCompatible()) {
 var map = new GMap2(document.getElementById("map"));
 map.setUIToDefault();
 map.addControl(new GMapTypeControl());
 map.setCenter(new GLatLng(34.081187, -83.980721), 8);
 geocoder = new GClientGeocoder();
}

function load_markers() {
/*clear all*/
map.clearOverlays();

GDownloadUrl("genxml2.php", function(data) {
  var xml = GXml.parse(data);
  var markers = xml.documentElement.getElementsByTagName("marker");
  for (var i = 0; i < markers.length; i++) {
    var Names = markers[i].getAttribute("Names");
    var phoneNum = markers[i].getAttribute("phoneNum");
    var gender = markers[i].getAttribute("gender");
    var homeAd = markers[i].getAttribute("homeAd");
    var lat = markers[i].getAttribute("latitudeE6")
    var lng = markers[i].getAttribute("longitudeE6")
    var point = new GLatLng(parseFloat(markers[i].getAttribute("latitudeE6")),
                            parseFloat(markers[i].getAttribute("longitudeE6")));
    var marker = createMarker(point, Names, phoneNum, gender, homeAd, lat, lng);
    map.addOverlay(marker);
  }
}
);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...