Извлечь координаты GPS из файла XML и вставить в Google Maps? - PullRequest
0 голосов
/ 12 марта 2011

Я пытаюсь извлечь координаты имени и спутника из файла XML, а затем подключить их к обзору карты Google с маркерами, но у меня возникают трудности.

У меня уже есть код php, где яИзвлеките мои элементы, которые мне нужны, но чтобы перейти к фактическому подключению их к картам Google, я прислонился головой к стене.

У меня есть этот код, который я нашел, и опробую:

<script src="http://maps.google.com/maps?file=api&v=2&key=my_google_api_key" type="text/javascript"></script>
 <script type="text/javascript">
 //<![CDATA[
 var map = null;
 var geocoder = null;
 function load() {
 if (GBrowserIsCompatible()) {
 map = new GMap2(document.getElementById("map"));
 map.addControl(new GSmallMapControl());

geocoder = new GClientGeocoder();

// my XML file
GDownloadUrl("maste.xml", function(data) {
var xml = GXml.parse(data);
//MasteIBrug is the tag around each child
var markers = xml.documentElement.getElementsByTagName("MasteIBrug");
for (var i = 0; i < markers.length; i++) {
//Positionsvejnavn is my first attribute in the XML file
 var name = markers[i].getAttribute("Positionsvejnavn");
//Geografisk_placering is my second attribute in the XML file
 var coordination  = markers[i].getAttribute("Geografisk_placering");
 showCoor(coordination,name);
}
});

}
}

function showCoor(coordination, name) {
if (geocoder) {
geocoder.getLatLng(
name+","+coordination,
function(point) {
if (!point) {
 alert(coordination + " not found");
} else {
map.setCenter(point, 13);
var marker = createMarker(point, name, coordination);
map.addOverlay(marker);
}
});

}

}

function createMarker(point, name, coordination) {
var marker = new GMarker(point);
var html = "<b>" + name + "</b> <br/>" + coordination;
GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml(html);
});

return marker;
}

//]]>

</script>

</head>

<body onload="load()" onunload="GUnload()">
<div>
<div id="map" style="width: 1000px; height: 600px"></div>
</div>
</body>

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

Любая помощь илиСовет будет очень признателен.

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

Ваш кодовый фрагмент

var markers = xml.documentElement.getElementsByTagName("MasteIBrug");
for (var i = 0; i < markers.length; i++) {
    // Positionsvejnavn is my first attribute in the XML file
    var name = markers[i].getAttribute("Positionsvejnavn");
    // Geografisk_placering is my second attribute in the XML file
    var coordination = markers[i].getAttribute("Geografisk_placering");
}

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

во-вторых, ваш xml-файл должен быть открыт в текстовом редакторе или где-либо еще (даже отображается как xml на веб-странице на отдельной вкладке или в окне), ТОГДА в цикле for добавьте эту строку кода после анализа xml.

document.getElementbyId("map").innerHTML = "Positionsvejnavn = " + name;

это должно остановить выполнение скрипта после анализа первого атрибута в xml-файле и распечатать его на экране, и вы ожидаете увидеть, какое значение содержится в xml atributre Positionsvejnavn

если есть какой-либо вывод на экран, и он такой же, как в Positionsvejnavn повторите еще раз, как это

document.getElementbyId("map").innerHTML = "Geografisk_placering = " + coordination; 

и посмотрите, отображает ли это то, что находится в xml «Geografisk_placering», если это так, то вы правильно анализируете xml, если вы не знаете, как это исправить, прежде чем продолжить.

и правильный код должен выглядеть так с целью надежной отладки

document.getElementbyId("map").innerHTML = "cordination = " + coordination;

легко проследить, легче понять, отладить и сосредоточиться на том, какие переменные выполняют, какую функцию они выполняют, какую функцию они выполняют, и помнить, что вы ожидаете от их вывода.

Наконец, Google ожидает, что маркеры XML будут иметь определенный формат в файле XML. это так

<markers>
    <marker name="my name whatever" 
        address="an address of somewhere"
        lat="52,00"
        lng="0.223"
    </marker>
    <marker name="my friends whatever" 
        address="an address of somewhere else"
        lat="-52,00"
        lng="-120.223"
    </marker>
</markers>

и есть ли у вас все файлы в одном каталоге и правильно указаны ссылки на некоторые веб-сборщики и текстовые редакторы, помещенные в дополнительные / в каталог hrefs и т. Д., Другие пропускают их.

так что вы можете получить разные URL из разных приложений, как это

APP A может изменить URL-адрес, чтобы быть таким /directory/file.xml
Приложение B может изменить его, чтобы это было так //directory/file.xml
и вы должны добавить или удалить косую черту в зависимости от вашей настройки.

и вы пытались поместить все файлы на локальный сервер и запустить оттуда и / или комбинацию всего вышеперечисленного.

2 голосов
/ 12 марта 2011

Если вы готовы использовать для этого библиотеку, jquery-ui-map может вам очень помочь. Он поддерживает создание маркеров Google Maps из JSON, HTML и т. Д. Я только что работал с ним над проектом, и он мне очень помог.

...