与Google地图配合使用的县KML数据 [英] County KML data that works with Google Maps

查看:136
本文介绍了与Google地图配合使用的县KML数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的地图上显示县县行。我已经发现了几种KML格式的转换后的人口普查数据,并将其作为不同的分辨率显示出来。



我创建了一个Google Site map并上传了几个KML,包括Google使用的CTA.kml举个例子。 CTA(芝加哥)显示无问题,所以我知道我的网站设置正确。但是,当我链接到gz_2010_us_050_00_20m.kml(来自美国人口调查局)或cb_2014_us_county_20m.kml时,什么都不会显示。我认为,kml格式不适用于Google地图,但我没有收到任何错误或消息。它只是不显示。

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



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

< a href =https://sites.google.com/site/countykmltester/cta.kml =nofollowtitle =MySite>链接到我的网站

 <!DOCTYPE html> 
< html>
< head>
< meta name =viewportcontent =initial-scale = 1.0>
< meta charset =utf-8>
< title> KML层< / title>
< style>
html,body {
height:100%;
保证金:0;
padding:0;
}
#map {
height:100%;
}
< / style>
< / head>
< body>
< div id =map>< / div>
< script>

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


解决方案

将您的KML文件拆分为3个部分, (使其成为KMZ)。他们工作(状态确定)。似乎原来的错误信息是误导性的...

 
名称| kml尺寸| 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 |

在SO上的这个问题:最大。 KML中用于Google地图的地标数量



此信息曾用于文档中,但不再可用, archive.org上的链接



更新的文档链接



Google地图中KML呈现的大小和复杂性限制

 
Google地图目前对加载的KML文件的大小和复杂性有特定的限制。以下是当前限制的总结:

注意:这些限制是暂时的,并且可能随时发生变化。

最大获取文件大小(原始KML,原始GeoRSS或压缩KMZ)3MB
最大未压缩KML文件大小10MB
网络链接的最大数量10
最大数量的文件范围功能1,000

概念证明小提琴



代码段:

<

  var geocoder; var map;函数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}); content.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%;宽度:100%; margin:0px; < script src =https://   


I want to display county lines on my maps. I have found a several KMLs of converted Census data as various resolution but display.

I created a Google Site map and uploaded several KMLs, including the CTA.kml that Google uses as an example. The CTA (Chicago) displays w/o issue so I know my site is set up correctly. But when I link to gz_2010_us_050_00_20m.kml(from the US Census Bureau) or cb_2014_us_county_20m.kml, nothing appears.

my belief is that the kml format is not valid for Google Maps but I do not get an error or any message. It just doesn't appear.

I included a little test script that I know is correct since I have stolen it from Google.

If it is a KML format issue, does anyone know of a KML for US county lines?

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>

解决方案

Split your KML file into 3 pieces, zip each one up (to make it KMZ). They work (status OK). Seems that the original error message was misleading...

name                    | kml size  | kmz size  |
-------------------------------------------------
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   |
----- original file -----------------------------
gz_2010_us_050_00_20m   | 8,015,535 | 2,693,916 |

from this question on SO: Max. Number of Placemarks in KML for Google Maps:

(this information used to be in the documentation, but is no longer available there, link on archive.org)

updated link to documentation

Size and Complexity Restrictions for KML Rendering in Google Maps

Google Maps currently has specific limitations to the size and complexity of loaded KML files. Below is a summary of the current limits:

Note: these limits are temporary and are subject to change at any time.

Maximum fetched file size (raw KML, raw GeoRSS, or compressed KMZ)  3MB
Maximum uncompressed KML file size  10MB
Maximum number of Network Links 10
Maximum number of total document-wide features  1,000

proof of concept fiddle

code snippet:

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>

这篇关于与Google地图配合使用的县KML数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆