Отображение маркеров из XML в зависимости от значения элемента

#javascript #xml #google-maps #google-maps-api-2

#javascript #xml #google-карты #google-maps-api-2

Вопрос:

Кажется, я не могу разобраться с использованием API карт Google. Я пытаюсь отображать маркеры только для тех XML-элементов, которые соответствуют тому адресу, который пользователь ввел в поле ввода.

Мой XML-файл выглядит следующим образом:

 <rentalProperties>
 <property available="yes" contact="0423020892">
 <type>house</type>
 <price>800</price>
 <address>
  <streetNo>116</streetNo>     
  <street>Warrigal Road</street>
  <suburb>Camberwell</suburb>
  <state>VIC</state>
  <zipcode>3124</zipcode>
 </address>
<numberOfBedrooms>4</numberOfBedrooms>
<description>Ideal for the familly...</description>
</rentalProperties>
 

Я также смущен использованием geocoder.getLatLng() для преобразования адреса inputbox в lat и long. Вот мой текущий код javascript.

 var map = null;
var geocoder = null;

var xmlhttp = null;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

function load() 
{
if (GBrowserIsCompatible()) 
{
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    geocoder = new GClientGeocoder();
    geocoder.getLatLng("Melbourne", function(point){map.setCenter(point, 15)}); 
    placeMarkers();
   }
}

function addMarker(){
var street = document.getElementById("street").value;
var suburb = document.getElementById("suburb").value;
var address = street   suburb;
geocoder = new GClientGeocoder();
geocoder.getLatLng(address, function(point) {
    if (!point) {
        alert(address   " not found");
    } 
    else{
        map.setCenter(point, 12);
        map.addOverlay(createMarker(point, address));
        //saveMarker(point, address);
    }
});
}

function placeMarkers() //loading up the XML file
{
GDownloadUrl("http://mercury.it.swin.edu.au/hit3324/7186975/Assignment3/data/apartment.xml", function(data, responseCode) {
    if(responseCode == 200){
        var xml = GXml.parse(data);  //convert the data to an XML DOM fragment; will get from cache if not cleared
        var markers = xml.documentElement.getElementsByTagName("property");  // get the marker elements in the data
        for (var i = 0; i < markers.length; i  ) {
            var xmlStNo = xml.documentElement.getElementsByTagName("streetNo");
            var xmlStreet = xml.documentElement.getElementsByTagName("street");
            var xmlSuburb = xml.documentElement.getElementsByTagName("suburb");
            var xmlAddress = xmlStNo   xmlStreet   xmlSuburb;
            geocoder = new GClientGeocoder(); 
            var point = geocoder.getLatLng(xmlAddress, function(point));
            map.setCenter(point, 12);   //fails if this not used
            map.addOverlay(createMarker(point, markers[i].getAttribute("address"))); 
        }
    }
    else if(responseCode == -1) {
        alert("Data request timed out. Please try later.");
    }
    else { 
        geocoder = new GClientGeocoder();
        geocoder.getLatLng("Paris", function(point){map.setCenter(point, 13)}); 
    }

});
}

function createMarker(point, address) {  
var marker = new GMarker(point); 
GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(address);  });  
return marker;
}
 

Кроме того, если я проделал долгий путь и есть упрощенная версия, это было бы здорово. Любая помощь была бы очень признательна.

Комментарии:

1. Есть ли в коде что-то конкретное, что не работает? Возникли какие-либо ошибки?

2. ошибок нет, но моя карта даже не отображается. В основном я просто хочу иметь возможность использовать свой xml, если ничего другого

3. Прежде чем создавать карту, убедитесь, что DOM загружен. Во-вторых, посмотрите, указаны ли ширина и высота элемента map HTML.

4. Я предлагаю создать jsfiddle, чтобы любой мог взглянуть на полный код, который вы используете — jsfiddle.net

5. отличная идея, jsfiddle.net/QnU6Z я просто хотел бы просмотреть свой XML-файл и отобразить маркеры, но я тоже не могу заставить это работать. Как мне получить доступ к элементам, которые находятся внутри элемента address?