【问题标题】:County KML data that works with Google Maps与 Google 地图配合使用的县级 KML 数据
【发布时间】:2016-05-22 16:22:03
【问题描述】:

我想在我的地图上显示县线。我发现了几个 KML 转换后的人口普查数据作为各种分辨率但显示。

我创建了一个 Google 站点地图并上传了几个 KML,包括 Google 用作示例的 CTA.kml。 CTA(芝加哥)显示没有问题,所以我知道我的网站设置正确。但是当我链接到 gz_2010_us_050_00_20m.kml(来自美国人口普查局)或 cb_2014_us_county_20m.kml 时,什么都没有出现。

我认为 kml 格式对 Google 地图无效,但我没有收到错误或任何消息。它只是没有出现。

我包含了一个小测试脚本,我知道它是正确的,因为它是从 Google 窃取的。

如果是 KML 格式问题,有人知道美国县线的 KML 吗?

Link to My Site

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="initial-scale=1.0">
    <meta charset="utf-8">
    <title>KML Layers</title>
    <style>
        html, body {
            height: 100%;
            margin: 0;
            padding: 0;
        }
        #map {
            height: 100%;
        }
    </style>
</head>
<body>
<div id="map"></div>
<script>

    function initMap() {
        var map = new google.maps.Map(document.getElementById('map'), {
            zoom: 11,
            center: {lat: 41.876, lng: -87.624}
        });

        var ctaLayer = new google.maps.KmlLayer({
            url: 'https://sites.google.com/site/countykmltester/gz_2010_us_050_00_20m.kml',
            map: map
        });
    google.maps.event.addListener(ctaLayer, "status_changed", function() {
       alert( "Kml Status:"+ctaLayer.getStatus());
    });
    }

</script>
<script async defer
        src="https://maps.googleapis.com/maps/api/js?callback=initMap">
</script>
</body>
</html>

【问题讨论】:

  • 在 KmlLayer 上触发 'status_changed' 事件时查看 KmlStatus。我怀疑它是“DOCUMENT_TOO_LARGE”。请提供一个 Minimal, Complete, Tested and Readable example 来证明您的问题 (your posted code returns "OK")。
  • 我已将文件更改为给我问题的文件。我还添加了一些 Changed Status 监听器,但是当我运行时,它不会返回任何内容。
  • It returns "INVALID_DOCUMENT" for me(您的代码正在写入ctaLayer 的innerHTML 属性,这没有任何用处)。
  • 我收到了 INVALID_DOCUMENT 状态。是否有任何有效的县线 KML 文件?
  • 我的猜测是文件太大,而不是无效,但我不确定。 KmlLayer 解析器似乎最近发生了变化,并且表明文档无效(根据 jEdit,您的文件是有效的)。

标签: google-maps google-maps-api-3 kml


【解决方案1】:

将您的 KML 文件分成 3 份,将每一份都压缩(使其成为 KMZ)。他们工作(状态正常)。似乎原始错误消息具有误导性...

姓名 |公里大小 | kmz 尺寸 | ------------------------------------------------- gz_2010_us_050_00_20m_A | 2,687,331 | 932,267 | gz_2010_us_050_00_20m_B | 2,633,246 | 836,947 | gz_2010_us_050_00_20m_C | 2,696,354 | 927,571 | ----- 原始文件 ----------------- gz_2010_us_050_00_20m | 8,015,535 | 2,693,916 |

来自这个问题:Max. Number of Placemarks in KML for Google Maps:

此信息曾经在文档中,但不再可用,link on archive.org

updated link to documentation

Google 地图中 KML 渲染的大小和复杂性限制

Google 地图目前对加载的 KML 文件的大小和复杂性有特定限制。以下是当前限制的摘要: 注意:这些限制是暂时的,可能随时更改。 最大获取文件大小(原始 KML、原始 GeoRSS 或压缩 KMZ)3MB 最大未压缩 KML 文件大小 10MB 最大网络链接数 10 文档范围内总特征的最大数量 1,000

proof of concept fiddle

代码 sn-p:

var geocoder;
var map;

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 11,
    center: {
      lat: 41.876,
      lng: -87.624
    }
  });

  var layerA = new google.maps.KmlLayer({
    url: 'http://www.geocodezip.com/geoxml3_test/kmz/gz_2010_us_050_00_20m_A.kmz',
    map: map
  });
  google.maps.event.addListener(layerA, 'status_changed', function() {
    document.getElementById('status').innerHTML += "layerA:" + layerA.getStatus() + "<br>";
  })
  var layerB = new google.maps.KmlLayer({
    url: 'http://www.geocodezip.com/geoxml3_test/kmz/gz_2010_us_050_00_20m_B.kmz',
    map: map
  });
  google.maps.event.addListener(layerB, 'status_changed', function() {
    document.getElementById('status').innerHTML += "layerB:" + layerB.getStatus() + "<br>";
  })
  var layerC = new google.maps.KmlLayer({
    url: 'http://www.geocodezip.com/geoxml3_test/kmz/gz_2010_us_050_00_20m_C.kmz',
    map: map
  });
  google.maps.event.addListener(layerC, 'status_changed', function() {
    document.getElementById('status').innerHTML += "layerC:" + layerC.getStatus() + "<br>";
  })
}
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="status"></div>
<div id="map"></div>

【讨论】:

  • 谢谢,在我看到有人说限制为 3 兆但我没有压缩它之后,我早些时候将其配对到 2.8 兆。我会这样做,看看。
  • 我使用 MS compress 压缩较小的 KML 并将其重命名为 KMZ。好的,这将起作用。得到了一些奇怪的初步结果,因为我只发布了前 1/3,但我想我现在可以得到它。谢谢
  • 它有效,但有问题。我丢失了点击事件,但可以处理。我希望为 KML 设置 z-Index,但显然它没有。我还尝试将 PolyStyle 颜色设置为 00ffffff,我认为这会给我一个 0 和蓝色的 alpha。但这似乎不起作用。它是不透明的。我想要的只是边界线。边界可以转换成边界线吗?
  • 这些是新问题,应该按原样发布(经过一些研究以验证它们不是重复的)。修改 KML 生成的多边形样式的最简单方法是修改 KML 样式。
  • 谢谢 GCZ -- 我会打一段时间的野兽,但我会及时回到低谷。我将一份文件精简到一个县,以使其易于研究。我也可以将它作为 KML 工作,这更容易。我相信我会回到这里,但要等到打架之后。
猜你喜欢
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
相关资源
最近更新 更多