谷歌地图 KML 图层初始缩放和居中

Posted

技术标签:

【中文标题】谷歌地图 KML 图层初始缩放和居中【英文标题】:Google maps KML layer initial zoom and centre 【发布时间】:2016-11-28 04:47:18 【问题描述】:

我在网页上有一个现有地图,该地图使用以下脚本段正确缩放和居中: var mapOptions = 中心:纬度:43.57023,液化天然气:-79.48676, 缩放:12 map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

然后我使用以下方法添加 kml 层: var myLayer = new google.maps.KmlLayer( url: "" ); myLayer.setMap(map);

这在去年一直有效。但是我必须更新 kml 文件以包含更广泛的区域。新的 kml 文件有效,但新的缩放和中心位置没有得到尊重。

  map = new google.maps.Map(document.getElementById("map-canvas"), 
  center:  lat: 48.0, lng: -89.0 ,
  zoom: 4 

);

相反,地图被缩小了,所以我看到了 3 个完整的地球,每边都有一点,中心在北极上方。您可以在http://www.a711lions.ca/recycleforsight/locationmap.html 和http://www.a711lions.ca/recycleforsight/locationmap2.html 看到两个不同的结果。

我已经读到我可以使用 layer.preserveViewport 设置来克服这个问题,但我试图理解它为什么会发生。 AFAICT 这些点都在加拿大(它们当然不会像在其他任何地方一样出现在三地球视图中)那么为什么 KML 层如此巨大?

有什么想法吗?

【问题讨论】:

【参考方案1】:

您的 KML 文件包含一个错误点:

<Placemark>
    <name>Dr. Sibbald</name>
    <description><![CDATA[<br><b>Address:</b> Applewood Shopping Ctre, Suite 210, 1077 N. Service Rd<br><b>City:</b> Mississauga<br><b>Postal Code:</b> L5R 2X5<br><b>Telephone:</b> (905)273-9009<br><b>Sponsoring Club:</b> Mississauga Credit Valley Lions Club]]></description>
    <styleUrl>#icon-503-DB4436</styleUrl>
    <Point>
        <coordinates>-3.0,90.0,0.0</coordinates>
    </Point>
    <!-- ... -->
</Placemark>

它位于北极。

【讨论】:

好的,谢谢。我昨天在使用正则表达式对坐标进行了完整性检查后发现了它。尽管如此,它不应该导致这种奇怪的行为。这似乎禁止标记圣诞老人的工作室。 :) 如果我把它放在一个荒谬的位置,比如北纬 91 度,那么我希望它会被忽略或标记为“离开地球”。如果它位于合法位置,则应进行映射。 如果您在北极有一个点,地图将显示它(缩小以包括它),并且 90 度与谷歌地图上使用的墨卡托投影有问题。 这一点似乎被问题所反驳。该位置位于北极(北 90 度),经度不相关 - -3 度与任何其他经度一样有效。实际变焦远大于整个地球,北极没有标记。在这种情况下,投影应该使用 -3 来显示位于本初子午线以西的标记。抱歉,除了 Google 代码中的错误之外,我真的无法将其视为其他任何东西。 我不会评论它是否应该是一个错误,只是虽然在现实世界中 90 度在物理上是可能的,但在墨卡托投影上大于 85 度的纬度没有意义(或在谷歌地图上)。而且由于修复“坏”点可以解决问题,因此不值得花任何时间在(IMO)上。您可以在issue tracker 中创建问题,他们可能会接受。

以上是关于谷歌地图 KML 图层初始缩放和居中的主要内容,如果未能解决你的问题,请参考以下文章

Google 地图 - KML 图层未出现在地图上

单击多边形,然后缩放和居中地图

将谷歌地图中心放在kml上,而不是位置

居中所有标记和折线谷歌地图插件颤振适合屏幕

谷歌地图 api 初始缩放错误

使用谷歌地图加载本地 .kml 文件?