【问题标题】:Set Initial View When Opening KMZ in GE在 GE 中打开 KMZ 时设置初始视图
【发布时间】:2013-06-05 16:27:02
【问题描述】:

我正在创建一个 KMZ 文件作为程序的输出(使用 SharpKML)。如何设置初始视图,以便在 Google 地球中打开此文件时,它会围绕我的数据居中并缩放?

当我在 GE 中打开一个 KML 文件时,默认情况下会出现这种行为,但是当我打开我的 KMZ 时,浏览器只会打开以用户国家为中心的默认全局视图。如果我双击我的 KMZ 文件中的主 KML,那么我会得到正确的缩放并以我的数据为中心。如何在 Google 地球加载 KMZ 时自动实现这一点?

谢谢。

【问题讨论】:

    标签: kml google-earth kmz sharpkml


    【解决方案1】:

    如果您将 LookAtCamera 添加到根 KML 文件(KMZ 中的第一个 .kml 文件)的第一个元素中,则加载该文件时,Google 地球将在该位置启动。

    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Placemark>
        <name>Google office</name>
        <LookAt>
            <longitude>-122.087387</longitude>
            <latitude>37.422130</latitude>
            <altitude>0</altitude>
            <heading>-0.23</heading>
            <tilt>47.81</tilt>
            <range>115.5</range>
            <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
        </LookAt>
        <Point>
            <coordinates>-122.087461,37.422069</coordinates>
        </Point>
    </Placemark>
    </kml>
    

    如果您有多个功能,请将&lt;LookAt&gt; 添加到根级文档。

     <kml>
       <Document>
        <LookAt>
          ...
        </LookAt>
        <Placemark>
        </Placemark>
          ...
    

    【讨论】:

    • 感谢您的回答,JasonM1,但我不知道数据的范围,以便在必须将其添加到根 KML 的根文档时计算 LookAt 元素。在创建 KMZ 存档后,使用 SharpKML 似乎无法更改根 KML,此外,由于我的数据集很大,因此范围的计算并非易事。我正在寻找与 GE 加载后双击 GE 列表中的根 KML 相同的效果。
    【解决方案2】:

    在 Google 地球/Google 地球专业版中还有一种非常简单的方法:

    1. 只需右键单击并在 Places 中调出文件夹的属性。

    2. 转到视图选项卡并单击快照当前视图。

    3. 然后保存位置为更新kmz/kml。

    这会在您单击的级别更新&lt;LookAt&gt; - 因此,在地标级别或您可以在文件夹级别执行此操作。

    【讨论】:

      【解决方案3】:

      我以前用 Javascript 打开我的 kmz 文件,它们会自动居中,但现在几周前,我的地图在北极上方打开。我很久以前就创建了 kmz 文件,我不想查看或编辑它们。是否可以添加一些代码以使其像以前一样工作?我之前有我的开放代码

      var overlay = new GGeoXml(\"http://www.mysite.com/data/file.kmz" ) ;
      map.addOverlay( overlay ) ;
      

      这个看起来很假的代码似乎并没有初始化任何东西,但确实有效

      var bounds = new GLatLngBounds();
      // initialize bounds ??
      
      var SWcorner= new GLatLng(parseFloat(87),parseFloat(-1));
      var NEcorner= new GLatLng(parseFloat(89),parseFloat(1));
      bounds.extend(SWcorner);
      bounds.extend(NEcorner);
      map.setCenter(new GLatLng(88.0, 0), map.getBoundsZoomLevel(bounds), 
                                              G_PHYSICAL_MAP);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-01
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-03
        相关资源
        最近更新 更多