【问题标题】:Extract GPS coordinations from XML file and insert into Google Maps?从 XML 文件中提取 GPS 坐标并插入谷歌地图?
【发布时间】:2011-03-12 12:41:09
【问题描述】:

我正在尝试从 XML 文件中提取名称和卫星坐标,然后将它们插入到带有标记的 Google 地图概览中,但我遇到了困难。

我已经有了 php 代码,我可以在其中提取我需要的元素,但从那里开始将它们实际插入谷歌地图是我头疼的地方。

我找到并试用了这段代码:

<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>

这是我第一次使用 Google 地图 API,所以我可能有问题或使用错误的代码来创建,但我似乎无法进一步了解。

非常感谢任何帮助或建议。

【问题讨论】:

  • 那么发生了什么?出了什么问题?
  • 好吧,其实没什么。它在地图周围或地图所在的位置绘制框架,但仅此而已。没有错误或任何东西。我猜它不会从 XML 文件中加载数据

标签: php xml google-maps google-maps-api-3 coordinates


【解决方案1】:

你的代码 sn-p

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 属性 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>

您是否将所有文件放在一个目录中,并正确引用了一些 web 构建器和文本编辑器,在目录中添加了额外的 / 等其他文件。

这样你可能会从不同的应用程序中获得不同的网址

APP A 可能会将 url 修改为 /directory/file.xml
APP B 可能会把它弄成这样 //directory/file.xml
您必须根据您的设置添加或删除斜线。

您是否尝试过将所有文件放入本地服务器并从那里运行和/或以上所有方法的组合。

【讨论】:

    【解决方案2】:

    如果您愿意为此使用库,jquery-ui-map 可以帮助您很多。它支持从 JSON、HTML 等创建 Google 地图标记。我刚刚在一个项目中使用它,它对我帮助很大。

    【讨论】:

    • 谢谢,我去看看:-)
    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多