Javascript KML文件加载但不加载';为什么不呢?
我有一个GoogleMaps mashup,它可以很好地处理“小”测试文件——我生成的每个文件,即使是60英里的路程,也不到16k 然后,昨天,一个用户向我发送了一个他们遇到问题的KML文件-它的大小超过360k,当它上传正常时,当我调用GGeoXML()时,它似乎加载到Google Maps中正常,但没有出现地图,并且错误“Script error.(main.js,0)”出现在日志中。这在我自己的应用程序中都会发生,如果我尝试将kml文件提供给Google的“代码游乐场”——但该文件在Google Earth中加载良好。如果我将Google Earth中的文件重新保存为kmz格式,这同样有效——但由于该文件不再是XML,我失去了mashup的一些“附加值”功能 我已经扫描了谷歌文档,但找不到任何关于kml文件最大文件大小的参考 有什么建议吗 下面是一个导致代码问题的代码片段:Javascript KML文件加载但不加载';为什么不呢?,javascript,google-maps,Javascript,Google Maps,我有一个GoogleMaps mashup,它可以很好地处理“小”测试文件——我生成的每个文件,即使是60英里的路程,也不到16k 然后,昨天,一个用户向我发送了一个他们遇到问题的KML文件-它的大小超过360k,当它上传正常时,当我调用GGeoXML()时,它似乎加载到Google Maps中正常,但没有出现地图,并且错误“Script error.(main.js,0)”出现在日志中。这在我自己的应用程序中都会发生,如果我尝试将kml文件提供给Google的“代码游乐场”——但该文件在Goo
var map;
function zoomToGeoXML(geoXml) {
var center = geoXml.getDefaultCenter();
var span = geoXml.getDefaultSpan();
var sw = new GLatLng(center.lat() - span.lat() / 2,
center.lng() - span.lng() / 2);
var ne = new GLatLng(center.lat() + span.lat() / 2,
center.lng() + span.lng() / 2);
var bounds = new GLatLngBounds(sw, ne);
map.setCenter(center);
map.setZoom(map.getBoundsZoomLevel(bounds));
}
function initialize() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map_canvas"));
var geoXml = new GGeoXml("http://(my base url)/files/gps/expr.kml",
function() { zoomToGeoXML(geoXml); });
map.addOverlay(geoXml);
}
}
看起来GGeoXml的大小限制是3MB,所以KML文件本身可能有问题
请参阅Pamela的帖子。看起来GGeoXml的大小限制是3MB,因此KML文件本身可能有问题
参见Pamela的帖子。事实证明,真正的问题不是文件大小,而是片段
map = new GMap2(document.getElementById("map_canvas"));
var geoXml = new GGeoXml("http://(my base url)/files/gps/expr.kml",
function() { zoomToGeoXML(geoXml); });
map.addOverlay(geoXml);
根据谷歌地图文档,在构建新地图后,必须立即调用setCenter()。我没有这样做,因为zoomToGeoXML()会这样做
不幸的是,这显然在谷歌地图代码中设置了竞争条件。将代码更改为:
map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(0,0));
var geoXml = new GGeoXml("http://(my base url)/files/gps/expr.kml",
function() { zoomToGeoXML(geoXml); });
map.addOverlay(geoXml);
显然正确地解决了问题。然而,它有一个副作用,那就是在放大到kml文件定义的区域之前,地图最初是整个地球的。事实证明,真正的问题不是文件大小,而是片段
map = new GMap2(document.getElementById("map_canvas"));
var geoXml = new GGeoXml("http://(my base url)/files/gps/expr.kml",
function() { zoomToGeoXML(geoXml); });
map.addOverlay(geoXml);
var map;
function loadMapAndZoomToGeoXML(geoXml) {
center = geoXml.getDefaultCenter();
var span = geoXml.getDefaultSpan();
var sw = new GLatLng(center.lat() - span.lat() / 2, center.lng() - span.lng() / 2);
var ne = new GLatLng(center.lat() + span.lat() / 2, center.lng() + span.lng() / 2);
var bounds = new GLatLngBounds(sw, ne);
map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(center);
map.setZoom(KmlMap.getBoundsZoomLevel(bounds));
map.addOverlay(geoXml);
map.enableScrollWheelZoom();
map.setUIToDefault();
map.addControl(new GLargeMapControl());
}
function initialize() {
if (GBrowserIsCompatible()) {
var geoXml = new GGeoXml("http://(my base url)/files/gps/expr.kml", function() { loadMapAndZoomToGeoXML(geoXml); });
}
}
根据谷歌地图文档,在构建新地图后,必须立即调用setCenter()。我没有这样做,因为zoomToGeoXML()会这样做
不幸的是,这显然在谷歌地图代码中设置了竞争条件。将代码更改为:
map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(0,0));
var geoXml = new GGeoXml("http://(my base url)/files/gps/expr.kml",
function() { zoomToGeoXML(geoXml); });
map.addOverlay(geoXml);
显然正确地解决了问题。但是,它有一个副作用,即在放大到kml文件定义的区域之前,地图最初是整个地球的。如果您重新排列Mike示例中的几行,您将摆脱“在放大到kml文件定义的区域之前,地图最初是整个地球的副作用。”
var map;
function loadMapAndZoomToGeoXML(geoXml) {
center = geoXml.getDefaultCenter();
var span = geoXml.getDefaultSpan();
var sw = new GLatLng(center.lat() - span.lat() / 2, center.lng() - span.lng() / 2);
var ne = new GLatLng(center.lat() + span.lat() / 2, center.lng() + span.lng() / 2);
var bounds = new GLatLngBounds(sw, ne);
map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(center);
map.setZoom(KmlMap.getBoundsZoomLevel(bounds));
map.addOverlay(geoXml);
map.enableScrollWheelZoom();
map.setUIToDefault();
map.addControl(new GLargeMapControl());
}
function initialize() {
if (GBrowserIsCompatible()) {
var geoXml = new GGeoXml("http://(my base url)/files/gps/expr.kml", function() { loadMapAndZoomToGeoXML(geoXml); });
}
}
不幸的是,它将加载地图与缩放地图和将地图居中联系在一起,但这可以进一步重构。我希望尽可能地坚持Mike给出的示例。如果您重新排列Mike示例中的几行,您将消除“副作用,即地图最初是整个地球的,然后再缩放到kml文件定义的区域。”
不幸的是,它将加载地图与缩放地图和将地图居中联系在一起,但这可以进一步重构。我希望尽可能多地坚持迈克给出的例子。在Rafe的代码中更改这一点: map.setZoom(KmlMap.getBoundsZoomLevel(bounds)); setZoom(KmlMap.getBoundsZoomLevel(bounds)); 对此 map.setZoom(map.getBoundsZoomLevel(bounds)); map.setZoom(map.getBoundsZoomLevel(bounds));
在Rafe的代码中更改此项: map.setZoom(KmlMap.getBoundsZoomLevel(bounds)); setZoom(KmlMap.getBoundsZoomLevel(bounds)); 对此 map.setZoom(map.getBoundsZoomLevel(bounds)); map.setZoom(map.getBoundsZoomLevel(bounds));
谢谢-我一直在回顾这个小组,我将在那里发布同样的消息。我怀疑用户跟踪日志中的点数可能有问题-我测试的GPS每隔几百码记录一个位置,他的记录似乎是该分辨率的8-16倍。谢谢-我一直在查看组,我将在那里发布相同的消息。我怀疑用户跟踪日志中的点数可能有问题-我测试的GPS每隔几百码记录一个位置,他的记录似乎是该分辨率的8-16倍。+1通过提供代码片段来完成您的问题。我也在努力解决这个问题,“它有一个副作用,那就是地图在放大到kml文件定义的区域之前,最初是整个地球的”。事实上比这更糟。如果重置映射,它也会返回到全局视图。+1用于通过提供代码片段来完成问题。我也在努力解决这个问题,“它有一个副作用,那就是地图在放大到kml文件定义的区域之前,最初是整个地球的”。事实上比这更糟。如果重置贴图,它也会返回到全局视图。