与Google地图配合使用的县KML数据 [英] County KML data that works with Google Maps
问题描述
我创建了一个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:// //maps.googleapis.com/maps/api/js\">< / script>< div id =status>< ;
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?
<!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)
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
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屋!