javascript - KML 文件加载但不显示 - 为什么不呢?

标签 javascript google-maps

我有一个 google-maps mashup,它可以很好地处理“小”测试文件 - 我生成的每个文件,即使是 60 英里的旅行,也小于 16k。

然后,昨天,一位用户向我发送了一个他们遇到问题的 KML 文件 - 它的大小超过 360k,虽然它可以上传,但当我调用 GGeoXML() 时,它似乎可以正常加载到 Google map 中,但是没有 map 出现,并且日志中出现错误“脚本错误。(main.js,0)”。这种情况在我自己的应用程序中以及如果我尝试将 kml 文件提供给 Google 的“Code Playground”时都会发生 - 但该文件在 Google Earth 中加载良好。如果我将 Google 地球中的文件重新保存为 kmz 格式,这也是可行的 - 但由于该文件不再是 XML,因此我会失去混搭的一些“增值”功能。

我已扫描了 Google 文档,但找不到任何有关 kml 文件最大文件大小的引用。

有什么建议吗?

这是在代码 Playground 中导致问题的代码片段:

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);
  }
}

最佳答案

如果重新排列 Mike 示例中的几行,您就可以消除“在放大到 kml 文件定义的区域之前 map 最初是整个地球的副作用。”

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); });
    }
}

不幸的是,它占用了加载 map 、缩放 map 和居中 map 的业务,但这可以进一步重构。我想尽可能坚持迈克给出的例子。

关于javascript - KML 文件加载但不显示 - 为什么不呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1087785/

相关文章:

javascript - 从 computeDigest(algorithm, value) byte[] 取回字符串表示

javascript - 为什么我的 Google map 中的 map 与其容器不对齐

android - 如何解决 "Places API for Android does not seem to be enabled for your app"

r - get_map 未传递 API key (HTTP 状态为 '403 Forbidden' )

javascript - 算法停止了,我不知道为什么

javascript - JQuery Tablesorter - 货币列不排序?

java - 用java画路网?

android - 我们如何找到 google_maps_api.xml 文件

javascript - Qualtrics 通过创建新按钮将文本输入存储到嵌入数据

javascript - 如何使用 Vue CLI3 将代码拆分为多个包