gpt4 book ai didi

kml - 如何使用 NetworkLinkControl 和 Java API for KML (JAK) 正确更新 Google Earth KML?

转载 作者:行者123 更新时间:2023-12-04 17:52:59 26 4
gpt4 key购买 nike

我正在构建一个为独立的 Google 地球客户端提供数据的应用程序。我想发送一组初始数据,然后使用 <NetworkLinkControl> 动态更新它和 <Update><cookie>标签随着服务器上的变化而变化。我正在使用 Java API for KML (JAK) 库生成 KML。不幸的是,虽然我可以确认 GE 正在刷新我的 NetworkLink 并拉下我发送的更新,但我的更新都没有出现在 GE 中。经过大量阅读,似乎更新的 <targetHref> 可能是可能是问题所在,但我 99.9% 确定我发送的是同一个字符串。

让我感到困惑的部分原因是我看到关于 <cookie> 是否存在的相互矛盾的信息。元素的值需要附加到 <targetHref> .当我从静态服务器 URL 提供手写的测试 KML 文件时,我确实看到了一个早期的原型(prototype)更新,所以我怀疑它不是。实际上,这就是目前令人沮丧的地方:我已经看到我自己的机器上的更新工作,但现在无法使用看起来有效且正确的 KML 来工作。

当前的设置看起来像这样(为了清楚起见,无关的 XML 命名空间被剥离;“$CLIENT_ID”是一个类似 GUID 的字符串):

http://server/kml/ 提供的根 KML 文件${CLIENT_ID}:

<kml  xmlns="http://www.opengis.net/kml/2.2" 
xmlns:gx="http://www.google.com/kml/ext/2.2"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><NetworkLink>
<Link>
<href>http://server/kmlupdates/${CLIENT_ID}</href>
<refreshMode>onInterval</refreshMode>
<refreshInterval>1.0</refreshInterval>
<viewRefreshTime>0.0</viewRefreshTime>
<viewBoundScale>0.0</viewBoundScale>
</Link>
</NetworkLink></kml>

http://server/kmlupdates/ 提供的初始内容 KML ${CLIENT_ID}:

<kml><NetworkLinkControl>
<minRefreshPeriod>0.0</minRefreshPeriod>
<maxSessionLength>-1.0</maxSessionLength>
<cookie>cookie=0|kmlRequestType=updates|projectID=6|lastUpdateSeenIndex=-1</cookie>
</NetworkLinkControl>
<Document id="myProject">
<name>My ProjectProject</name>
<Placemark id="pm1"><name>point1</name>
<Point><coordinates>-117.0,35.0</coordinates></Point>
</Placemark>
</Document></kml>

稍后更新从 http://server/kmlupdates/ 提供的 KML ${CLIENT_ID}:

<kml><NetworkLinkControl>
<minRefreshPeriod>0.0</minRefreshPeriod>
<maxSessionLength>-1.0</maxSessionLength>
<cookie>cookie=0|kmlRequestType=updates|projectID=6|lastUpdateSeenIndex=0</cookie>
<Update>
<targetHref>http://server/kmlupdates/${CLIENT_ID}</targetHref>
<Change>
<Placemark targetId="pm1">
<name>Name changed by Update Change</name>
</Placemark>
</Change>
</Update>
</NetworkLinkControl></kml>

如果有人对我在这里遗漏的内容有任何建议,我将不胜感激。谢谢!

最佳答案

我的问题的原始版本遗漏了两个事实证明是相关的事实:1) 我正在使用 KML 的 Java API 生成它,以及 2) <kml> 中的 XML namespace .看完this Google KML Group post我终于明白了这一点无数次。

问题是最后一个 XML 命名空间“xmlns:xal”。出于某种原因,从 KML 中删除它允许 <Update>标签以实际更改 Google 地球中的项目。 JAK 不允许您更改命名空间,但您可以手动将其从编码字符串中删除。

绝对奇怪,但至少我找到了解决方案。

关于kml - 如何使用 NetworkLinkControl 和 Java API for KML (JAK) 正确更新 Google Earth KML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7249565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com