我正在构建一个为独立的 Google 地球客户端提供数据的应用程序。我想发送一组初始数据,然后在服务器上发生变化时使用标签动态更新<NetworkLinkControl>
它<Update><cookie>
。我正在使用 Java API for KML (JAK) 库生成 KML。不幸的是,虽然我可以确认 GE 正在刷新我的 NetworkLink 并拉下我发送的更新,但我的更新都没有出现在 GE 中。经过大量阅读,似乎更新<targetHref>
可能是问题所在,但我 99.9% 确定我正在发送相同的字符串。
让我感到困惑的部分原因是,我看到关于<cookie>
元素的值是否需要附加到<targetHref>
. 当我从静态服务器 URL 提供手写的测试 KML 文件时,我确实看到了一个早期的原型更新,所以我怀疑它不是。实际上,这正是目前令人沮丧的地方:我已经在自己的机器上看到了更新工作,但现在无法使用看起来有效且正确的 KML 进行工作。
当前设置如下所示(为了清楚起见,去除了无关的 XML 命名空间;“$CLIENT_ID”是一个类似 GUID 的字符串):
从http://server/kml/ ${CLIENT_ID} 提供的根 KML 文件:
<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/ ${CLIENT_ID} 提供的初始内容 KML:
<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/ ${CLIENT_ID} 提供的 KML:
<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>
如果有人对我在这里缺少的内容有任何建议,我将不胜感激。谢谢!