在Google地图上绘制KML轨道中点之间的最短线

时间:2015-06-23 20:45:14

标签: google-maps kml google-earth

更新:Google于2016年3月6日修复了此错误 https://code.google.com/p/gmaps-api-issues/issues/detail?id=8003&q=apitype%3AJavascript3%20type%3ADefect&sort=-stars&colspec=ID%20Type%20Status%20Introduced%20Fixed%20Summary%20Internal%20Stars

当最短的线穿过国际日期线时,我无法显示两点之间的最短线。有一个问题的例子:http://cars-suck.com/Test(放大和缩小显示谷歌的目标。)

旧金山和东京之间的一条线应该穿越太平洋,因为这是最短路径。相反,谷歌在北美,大西洋,亚洲等地划了一条线。

我应该改变什么来获得我想要的线?

这是.kml文件的相关块:

<Placemark>
<styleUrl>#multiTrack</styleUrl>
<gx:Track>
    <altitudeMode>clampToGround</altitudeMode>
    <when>2014-09-17T07:25:06.875-07:00</when><gx:coord>-122.4167 37.7833 0</gx:coord>
    <when>2014-09-18T12:06:42.745-07:00</when><gx:coord>139.6833 35.6833 0</gx:coord>
</gx:Track>

这是显示地图的脚本:

    <script>
  function initialize() {
    var mapCanvas = document.getElementById('map_canvas');
    var mapOptions = {
      center: new google.maps.LatLng(21.3114, -179.9999),
      zoom: 2,
      mapTypeId: google.maps.MapTypeId.TERRAIN,
      preserveViewport: true,
    }
    var map = new google.maps.Map(mapCanvas, mapOptions);
    var kmlUrl = 'http://cars-suck.com/Test/Assets/gps_history.kml';
    loadKmlLayer(kmlUrl, map);
  }

  function loadKmlLayer(src, map) {
    var kmlLayer = new google.maps.KmlLayer(src, {
      suppressInfoWindows: false,
      preserveViewport: true,
      map: map
    });
  }

  google.maps.event.addDomListener(window, 'load', initialize);

</script>

完整的.kml文件位于:cars-suck.com/Test/Assets/gps_history.kml

我可能已经失去了理智,但我相信这在1月份正常运作。也许我依赖于被弃用的东西,或者我只是觉得它在起作用。

更新:我没有忘记。有人在此报告了类似的问题:productforums.google.com/forum /#!topic / maps / kQo4IcDRysk

错误报告:https://code.google.com/p/gmaps-api-issues/issues/detail?id=8003&q=apitype%3AJavascript3%20type%3ADefect&sort=-stars&colspec=ID%20Type%20Status%20Introduced%20Fixed%20Summary%20Internal%20Stars

在stackoverflow上:Google Maps mangling KML

还没有解决方案。

2 个答案:

答案 0 :(得分:1)

当Google地球中的几何图形需要跨越国际日期线时,您可以指定度数坐标与预期方向上的“提示”不同。来自Google KML specification

  

指定边界框的西边缘的经度   十进制度从0到±180。对于与子午线重叠的叠加层   经度为180°时,数值可以超出该范围。

在您的情况下,KML将是:

<Placemark>
    <styleUrl>#multiTrack</styleUrl>
    <gx:Track>
        <altitudeMode>clampToGround</altitudeMode>
        <when>2014-09-17T07:25:06.875-07:00</when><gx:coord>-122.4167 37.7833 0</gx:coord>
        <when>2014-09-18T12:06:42.745-07:00</when><gx:coord>-220.3167 35.6833 0</gx:coord>
    </gx:Track>
</Placemark>

P.S。感谢您提供.kml文件,这使调试非常方便!

答案 1 :(得分:1)

这是google地图javascript API中的一个错误。该漏洞于2015年5月推出。Here's the bug report。添加投票可以加快修复速度。