构建大型 KML 文件

2023-12-19

我生成的 KML 文件可能有 50,000 个或更多地标,根据特定于域的分组排列在文件夹中。 KML 文件使用打包到 KMZ 文件中的自定义图像。

我希望将单个 KML 文件分解为多个文件,并根据分组进行分区,因此我不会拥有 1 个带有文件夹的大型文档,而是拥有一个根/索引 KML 文件,其中包含链接到较小 KML 文件的文件夹。

但这可能吗?我认为一个 KMZ 文件只能包含 1 个 KML 文件,无论它在 zip 中的位置或名称如何。此外,我不太确定 KML 文件如何链接到另一个 KML 文件。是拥有它的唯一方法<NetworkLink>到本地文件?可以一个<NetworkLink>可以链接到同一 KMZ 中的本地文件吗?


根据设计,您可以在单个 KMZ 文件中包含多个 KML 文件。这样,您可以将许多 KML 文件捆绑在一个 KMZ 文件中,然后通过电子邮件下载、发送或离线访问。

Google 地球可以扩展到大量功能(50,000 或更多)位于单个 KMZ 文件中,前提是要素被拆分为多个 KML 文件,并且 KML 的定义使得所有子 KML 文件不会同时显示。 KML 提供了使用时间、区域或海拔高度过滤来控制显示哪些要素或子 KML 文件的机制。

大型 KML 文件可以使用以下任意技术进行缩放:

  1. 网络链接 https://developers.google.com/kml/documentation/kmlreference#networklink
  2. Regions https://developers.google.com/kml/documentation/kmlreference#region
  3. 文件夹单选样式或显式可见性=0
  4. 每个特征的点数和几何简化

网络链接

您可以在根 KML 文件中拥有任何级别的 NetworkLink,从平面(具有到 KMZ 内所有其他 KML 文件的网络链接的单个 KML 文件)到深层(每个 KML 文件都具有到其他 KML 文件的 NetworkLink,每个文件都有自己的 NetworkLink) 。取决于您需要如何构建 KML 以及数据有多大。

关键是 Google 地球选择第一个 KML 作为根 KML 文件,因此您必须确保第一个文件(通常名为 doc.kml)是通过网络链接加载其他 KML 文件的根 KML 文件。常见的结构是在“kml”子文件夹中包含其他 KML 文件,以将其与根 KML 文件区分开来。

下面是一个包含 4 个文件条目的 KMZ 示例:根 KML 文件 (doc.kml),其中包含指向“的 NetworkLink”kml/sub1.kml” 另一个到“kml/sub2.kml”,它又具有一个到“的 NetworkLink”sub3.kml”也在“kml”子文件夹中。

== test.kmz ==

+doc.kml
   NetworkLink > kml/sub1.kml
   NetworkLink > kml/sub2.kml
+kml/sub1.kml
+kml/sub2.kml
   NetworkLink > sub3.kml
+kml/sub3.kml

这是这样一个结构doc.kml file:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <NetworkLink>
        <name>NetworkLinked sub-item</name>
        <Link>
          <href> kml/sub1.kml </href>
        </Link>
    </NetworkLink>
    <NetworkLink>
        <name>NetworkLinked sub-item</name>
        <Link>
          <href> kml/sub2.kml </href>
        </Link>
    </NetworkLink>
    ...
  </Document>
</kml>

作为最佳实践,如果您在父 KML 文件中包含多个具有基于时间的功能的 NetworkLink,则添加<TimeSpan>NetworkLinks 元素,包括该功能集合的完整时间范围,否则 Google 地球将在启动时自动加载整个文件。

<NetworkLink>
  <TimeSpan>
    <begin>2007-01-14T01:00:00Z</begin>
    <end>2007-01-14T02:00:00Z</end>
  </TimeSpan>
  <Link>
    <href>...</href>
  </Link>
</NetworkLink>

Regions

A Region https://developers.google.com/kml/documentation/kmlreference#region影响地标几何形状或叠加层图像的可见性。区域与 NetworkLink 相结合,可以访问 KML 文件中的大量数据。区域可以选择具有最小和最大海拔以进行海拔水平过滤。

有关更多详细信息,请参阅有关 KML 中的区域的教程
https://developers.google.com/kml/documentation/regions https://developers.google.com/kml/documentation/regions

收音机文件夹

您可以使用以下命令进一步限制在给定时间显示的内容收音机文件夹 https://developers.google.com/kml/documentation/kmlreference#listItemType.

下面是一个单选文件夹示例,允许用户一次仅选择一个 NetworkLink。 当内容相互排斥并且在任何给定时间只应出现一组功能时使用此方法。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
    <Document>
        <Style id="rf">
            <ListStyle>
                <listItemType>radioFolder</listItemType>
            </ListStyle>
        </Style>
        
        <Folder>        
            <name>One at a time example</name>
            <open>1</open>
            <description>Link 1 visible by default</description>
            <styleUrl>#rf</styleUrl>
            
            <NetworkLink>
                <name>NetworkLinked sub-item-1</name>
                <Link>
                    <href> kml/sub1.kml </href>
                </Link>
            </NetworkLink>
            
            <NetworkLink>
                <name>NetworkLinked sub-item-2</name>
                <visibility>0</visibility>
                <Link>
                    <href> kml/sub2.kml </href>
                </Link>
            </NetworkLink>
            
        </Folder>
    </Document>
</kml>

每个特征的点数和几何简化

KML 文件的大小和要素数量并不是唯一需要考虑的问题。包含具有 350K 点和 7000 个内孔的单个高分辨率多边形的 KML 文件可能会导致 Google 地球性能问题。这种几何形状需要简化并减少点数。您可以使用QGIS https://https//qgis.org/打开 KML 文件,然后对多边形应用简化算法。在 QGIS 中,选择矢量菜单 -> 几何工具 -> 简化,然后保存结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建大型 KML 文件 的相关文章

  • 构建大型 KML 文件

    我生成的 KML 文件可能有 50 000 个或更多地标 根据特定于域的分组排列在文件夹中 KML 文件使用打包到 KMZ 文件中的自定义图像 我希望将单个 KML 文件分解为多个文件 并根据分组进行分区 因此我不会拥有 1 个带有文件夹的
  • 使用 JavaScript 读取 KMZ

    如何使用 JavaScript 读取 KMZ 而非 KML 中的内容 那么您需要看看是否可以解压缩文件 我会看看这个堆栈溢出帖子 https stackoverflow com questions 2095697 unzip files u
  • kml 谷歌扩展不在模式中

    我居住的司法管辖区使用谷歌地球发布了数据 他们指向的kml文件包含
  • 调试 KML 文件

  • 一组值的所有可能分组的数量?

    我想找到一个组合公式 给定一定数量的整数 我可以找到这些整数的所有可能分组的数量 这样所有值都属于一个组 假设我有 3 个整数 1 2 3 将有 5 组 1 2 3 1 2 3 1 2 3 1 2 3 2 1 3 我已经通过计算计算了 N
  • 查找将两个 Numpy 数组平均划分的值

    我有两个数组 x1 and x2 具有相同长度且具有重叠的值范围 我需要找到一个值q这样l1 l2被最小化 并且 l1 x1 np where x1 gt q shape 0 l2 x2 np where x2 lt q shape 0 我
  • 从 Spark 保存分区 parquet HIVE 表时出现问题

    火花1 6 0 蜂巢1 1 0 cdh5 8 0 我在将数据帧从 Spark 保存到镶木地板支持的分区 Hive 表中时遇到一些问题 这是我的代码 val df sqlContext createDataFrame rowRDD schem
  • 谷歌地球热图

    有没有办法在谷歌地球中创建热图 以便具有较高值 某些指定参数 例如人口 的区域显示为热点 这似乎是可能的 例如 看一下这几个链接 免责声明 我没有尝试过这些 HeatMapAPI com http www heatmapapi com An
  • 使用 PHP 解析 KML 文件

    有没有办法用 simple xml load file kml 解析谷歌地图 kml 文件 我需要保存在 KML 文件中注册的每个多边形的数据库名称和坐标 在我的 PHP 脚本中 simple xml load file kml 返回 fa
  • 如何为Android模拟器控制准备KML文件?

    我正在尝试使用位置信息测试我的应用程序 您知道模拟器控件能够从 KML 文件加载 Eclipse gt DDMS gt 模拟器控制 gt 位置控制 gt KML gt 加载 KML 我已经使用 Google Earth 应用程序及其 添加路
  • 什么是表分区?

    什么情况下我们应该使用表分区 一个例子可能会有所帮助 我们每天从 124 家杂货店收集数据 每天的数据都与其他日期完全不同 我们按日期对数据进行分区 这使我们能够更快地 因为oracle可以使用分区索引并快速消除所有不相关的天数 这还使备份
  • 出现未定义的参考错误,但 nm 显示符号存在

    我正在使用 libkml 构建一个大型应用程序 我从这里使用 libkml 的 cmake 端口 https github com rashadkm libkml https github com rashadkm libkml 即使该符号
  • 在postgresql中,分区还是多个数据库更有效?

    有一个应用程序 许多公司在其中发布信息 每个公司的数据都是独立的 没有数据重叠 从性能角度来看 最好是 在每个表的每一行上保留公司 ID 并让每个索引都使用它 根据公司ID对每个表进行分区 分区并创建一个用户来访问每个公司以确保安全 创建多
  • 通过 Javascript 访问 Google 地图叠加层中的 KML 地标?

    我使用 GGeoXml 对象在嵌入式 Google 地图上覆盖了 KML 文件 我希望能够从 Javascript 访问 KML 文件中的特定地标 例如 突出显示地图上选定的多边形以响应用户操作 理想情况下 我想做的是这样的 伪代码 geo
  • 如何覆盖嵌入式 Google 地图中 KML 弹出窗口中的 target=_blank?

    我正在使用 KML 在 Google 地图上叠加形状 与每个形状相对应的信息包含在
  • 在 Apache Spark 中,为什么 RDD.union 不保留分区器?

    众所周知 Spark中的分区器对任何 宽 操作都会产生巨大的性能影响 因此通常在操作中进行定制 我正在尝试以下代码 val rdd1 sc parallelize 1 to 50 keyBy 10 partitionBy new HashP
  • 从 .kml 文件创建 R 的 x 和 y 距离坐标

    我想使用 kml 轨迹文件来制作一组 x y 坐标以在 R 中使用 我现在拥有的是 GoogleEarth 轨道 我相信它是一个 LineString 我听说rgdal包 http cran r project org web packag
  • 将 GeoDataFrame 多边形转换为 kml 文件

    我有一个 geopandas GeoDataFrame 其中包含各种多边形和颜色 我用它来绘制气象数据 我问的另一个问题here https stackoverflow com questions 35516318 plot colored
  • Oracle 12c - 删除表和所有关联的分区

    我在 Oracle 12c 中创建了表 t1 表有数据 它在列表分区上分区 并且还有子分区 现在我想删除整个表和所有关联的分区 和子分区 这是删除全部的正确命令吗 DROP TABLE t1 PURGE 语法是正确的 但不是优选的 只需删除
  • 从给定的数据集 [纬度、经度、密度] 生成 KML 热图

    我希望构建一个静态 KML Google 地球标记 文件 该文件以 lat lon densis 元组的形式显示一些给定数据集的热图样式渲染 我拥有的一个非常简单的数据集是人口密度 我的要求是 必须能够输入给定纬度 经度的数据 必须能够指定

随机推荐

  • 如何学习编写高效且可维护的 C 代码? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前的编程经验仅限于将一些 shell 脚本和过去的一些程序集组合在一起 不过 我在大学里学过C代码的基本语法 我想学习如何编写高效的 C 代
  • 调用函数的 Excel 单元格[重复]

    这个问题在这里已经有答案了 如何获取调用 VBA 函数的单元格 换句话说 INDIRECT ROW COLUMN 的 VBA 等效项是什么 I m not寻找活性细胞 我想做的是有一个简单的功能ThisRow Col rColumn As
  • SIP 408:在 zoiper 中创建帐户时请求超时

    我已经下载了zoiper220 linux tar gz并解压缩它 但是当我尝试在其中创建帐户时 它显示 SIP 408 请求超时错误 我已经尝试这个好几天了 提前致谢 您必须首先使用 sip conf 中设置的用户名和密码在软电话中注册
  • Reshaper 默认格式和规则列表

    我正在尝试查找 Resharper 强制执行的所有默认格式和规则的列表 不幸的是 我没有任何运气 我们使用该工具 但希望向新员工提供标准文档 以便他们可以在编码之前查看标准 在 ReSharper 菜单下的 选项 下 您将找到 ReShar
  • 如何在绘制多个热图时修复 plt.tight_layout() 错误

    我正在将多个热图绘制在一起 并且不希望它们用轴标签挤满空间 我尝试使用 plt tight layout 但它向我抛出了一些错误 这是我没有 plt tight layout 的结果 没有 plt tight layout 的热图 http
  • 我在实施传单抽奖时做错了什么。在这个具体示例中如何使用 WFST?

    我是地理信息开发领域的新手 我按照下面的管道架构流程来实现基于 GIS 的应用程序问题 PostGIS GeoServer 传单 我已经设置了传单客户端应用程序 它将图块组成地图 我还使用一些传单插件 如绘图 缩放 以便用户可以选择在地图上
  • 一个函数可以检测 NaN、NA、Inf、-Inf 等?

    R 中是否有一个函数可以确定某个值是否为NA NaN Inf Inf 或者不是一个格式良好的数字 你要is finite gt is finite NA 1 FALSE gt is finite NaN 1 FALSE gt is fini
  • {@inheritDoc} 不继承 Eclipse 中的超类 javadoc

    当我使用 inheritDoc 在 Eclipse 中 超类的 javadoc 注释没有出现在我的类的 javadoc 中 我有以下代码 import javax swing table AbstractTableModel public
  • 如何使用 MVC 4 显示数据库中的二进制图像以编辑表单

    我成功地将图像作为二进制图像存储在数据库中 我想在编辑表单中显示这些图像以修改并保存更改 显示数据库中的二进制图像时 以 Edit cshtml 形式抛出 System OutOfMemoryException 有人可以纠正我的代码吗 型号
  • Google App Engine 防火墙和内部访问

    我有两项服务在 Google App Engine flex 同一项目 上运行 我希望一项服务使用 HTTPS 调用另一项服务 最重要的是 我设置了防火墙 只允许0 1 0 40 and 10 0 0 1 我也在设置X Appengine
  • mclapply 与 for 循环绘图:速度和可扩展性焦点

    我正在 R 中运行一个函数 该函数可能需要很长时间才能运行 因为它在将某些数据推入之前执行多个命令来转换和子集一些数据ggplot来策划 我需要多次运行此函数来调整参数值 我将提供的示例是一个简单的示例 但想知道如何加快速度 如果扩大规模
  • C++/CLI .NET 可以使用资源 .resx 文件进行本地化吗?

    我正在尝试将托管 C NET DLL 本地化为多种语言 这些表单非常简单 因为它们的操作就像其他语言一样并创建多个 resx 文件 除了以传统 C 方式使用 RC 字符串表之外 我找不到任何在托管 C 中本地化嵌入字符串的示例 有没有什么方
  • 我可以为任何没有 UDID 的设备分发我的应用程序吗?

    我一直在搜索 stackoverflow 阅读各种博客来获取我的问题的答案 我可以将我的应用程序分发给某人 而不获取他的设备 UDID 吗 我找到的答案都是 不 你必须有 UDID 列表 但是 有人 私营公司 告诉我 他们过去常常在不向开发
  • 64 位模运算的奇怪性能行为

    这些方法调用中的最后三个大约需要花费大约时间 比前四个时间多了一倍 唯一的区别是它们的参数不再适合整数 但这有关系吗 该参数被声明为long 因此无论如何都应该使用long进行计算 模运算是否使用另一种数字 gt maxint 算法 我使用
  • 有没有办法让 Activity 知道刚刚创建了什么片段?

    An Activity可能会膨胀任意布局 xml 该布局可能有也可能没有Fragment其中的占位符 如果是的话 Fragment将被实例化并附加到Activity 有什么办法可以参考一下Fragment来自Activity那已经附加了吗
  • JSF 2 默认日期时间转换器模式

    我的 JSF 页面以以下格式显示托管 bean 的日期时间 MM dd yyyy h mm a 我想避免在不同页面中重复声明转换器
  • protobuf-net 是否支持 C# 9 位置记录类型?

    我正在尝试将 protobuf net 与 C 位置记录类型一起使用 并且遇到了此异常 10 18 48 048 EROR 010 Microsoft AspNetCore Server Kestrel Connection id 0HM4
  • 无法在 itunes connect 中更改捆绑包 ID?

    我的第一个应用程序被拒绝 因为它的捆绑包 ID 中有 Youtube 一词 从那时起 我更改了 plist info 中的包 ID 和 Xcode 中的包标识符 我还在 Apple 开发者网站的会员中心的标识符部分下创建了一个新的应用程序
  • 以下划线开头的名称显示错误 gh-pages 分支的页面不存在

    我对 github 的 gh pages 有疑问 以 下划线 开头的 html 页面显示错误 Page does not exist Read the Full Documentation Instructions for setting
  • 构建大型 KML 文件

    我生成的 KML 文件可能有 50 000 个或更多地标 根据特定于域的分组排列在文件夹中 KML 文件使用打包到 KMZ 文件中的自定义图像 我希望将单个 KML 文件分解为多个文件 并根据分组进行分区 因此我不会拥有 1 个带有文件夹的