#javascript #html #xml
#javascript #HTML #xml
Вопрос:
Я использую следующий код, здесь я показываю адреса properties.xml с маркерами на карте Google. Это не выдает мне ошибки, но также ничего не отображает на карте Google.
Кто-нибудь может сказать мне, в чем проблема в моем коде?
properties.xml файл:
<properties>
<property>
<type>apartment</type>
<address>538 Little Lonsdale Street,Melbourne,VIC </address>
</property>
<property>
<type>apartment</type>
<address>196 Little Lonsdale Street,Melbourne,VIC</address>
</property>
<property>
<type>apartment</type>
<address>5/5 Close Ave,Dandenong,VIC </address>
</property>
</properties>
html-файл:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>property</title>
<script src="http://maps.google.com/maps?file=apiamp;v=2amp;key=ABQIAAAAB1CHU9LrppxpqwUwaxkvTBRIez7zTAJDrX7CdEV86wzEyVzTHBQKDxL9qiopaHZkOJ8F2t0RQW9W8A"
type="text/javascript"></script>
<script type="text/javascript" src="map.js"></script>
</head>
<body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 400px"></div>
</body>
</html>
map.js файл:
var map;
var geocoder;
var xml;
var property;
var address;
function load()
{
map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(-24.994167,134.866944), 4);
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
geocoder = new GClientGeocoder();
GDownloadUrl("../../data/properties.xml", function(data) {
xml = GXml.parse(data);
property = xml.documentElement.getElementsByTagName("property");
for (var i = 0; i < property.length; i ) {
address = property[i].getElementsByTagName("address");
address = address.firstChild.nodeValue;
geocoder.getLocations(address, addToMap);}
});
}
function addToMap(response)
{
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1],
place.Point.coordinates[0]);
marker = new GMarker(point);
map.addOverlay(marker);
}
Ответ №1:
Я попробовал ваш код и получил отображение карт при первой загрузке, но произошла ошибка JS. Это была именно эта строка:
address = address.firstChild.nodeValue;
Должно быть это, чтобы получить текст внутри <address>
:
address = address[0].childNodes[0].nodeValue;
Вот часть карты, когда она работала:
Просто чтобы упомянуть, что сначала я не мог видеть никаких маркеров, поэтому я заменил:
map.setCenter(new GLatLng(37.997022, -122.6), 11);
с:
map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
Не уверен, что это то, чего вы ожидали, но именно так все и получилось.
*ОБНОВИТЬ* Для создания маркера вы можете использовать эту функцию
function createMarker(point, address)
{
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
map.openInfoWindowHtml(point, address);
});
return marker;
}
Примените createMarker
к map.addOverlay
:
map.addOverlay(createMarker(point, response.name));
Комментарии:
1. я использовал значение дочернего узла вашего первого кода, но на карте ничего не отображается. но когда я попробовал ваш второй код для map.setCenter, все исчезло, только серое пустое поле
2. @ash вы просматриваете свою страницу на сервере или в виде локального файла? обязательно запустите его на сервере, чтобы избежать ограничений домена. также проверьте местоположение вашего XML, если оно правильное. Я смог увидеть загруженные карты, когда попробовал это, поэтому единственная проблема, которую мне пришлось исправить, — это ошибка JS.
3. я просматриваю на сервере. да, я вижу карту, загруженную при запуске кода, но на ней не отображаются адреса properties.xml файл на карте с маркером???
4. @ash у вас нет такой функциональности в вашем коде, потому что проблема заключалась в ошибке JS, верно? Я обновил свой ответ, чтобы создать простой маркер, который отображает адрес при нажатии, надеюсь, это поможет.