3

スタンドアロンの Google Earth クライアントにデータを提供するアプリケーションを構築しています。データの初期セットを送信し、サーバー上での変化に応じてタグを使用<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>

ここで私が見逃していることについて何か提案があれば、大いに感謝します。ありがとう!

4

3 に答える 3

4

私の元のバージョンの質問では、関連性があることが判明した2つの事実が省略されていました。1)KML用のJava APIを使用してこれを生成し、2)内部のXML名前空間<kml>。このGoogleKMLGroupの 投稿を何度も読んだ後、私はついにこれを理解しました。

問題は、最後のXML名前空間" xmlns:xal"です。何らかの理由で、KMLからそれを削除すると、<Update>タグが実際にGoogleEarthのアイテムを変更できるようになります。JAKでは名前空間を変更できませんが、マーシャリングされた文字列から手動で名前空間を削除することはできます。

絶対に奇妙ですが、少なくとも私は解決策を見つけました。

于 2011-08-31T15:21:49.003 に答える