2011-08-30 2 views
3

독립 실행 형 Google 어스 클라이언트에 데이터를 제공하는 애플리케이션을 구축 중입니다. 초기 데이터 집합을 보내고 서버에서 변경 될 때 <NetworkLinkControl><Update><cookie> 태그를 사용하여 동적으로 업데이트하려고합니다. KML (JAK) 라이브러리 용 Java API를 사용하여 KML을 생성합니다. 유감스럽게도 GE가 내 네트워크 링크를 새로 고침하고 내가 보내는 업데이트를 철회했음을 확인할 수는 있지만 업데이트 된 정보는 GE에 표시되지 않습니다. 독서를 많이 한 후에는 업데이트의 <targetHref>이 문제 일 수 있지만 99.9 %는 동일한 문자열을 보내고 있음을 알 수 있습니다.NetworkLinkControl 및 KML (JAK) 용 Java API를 사용하여 Google 어스 KML을 올바르게 업데이트하는 방법은 무엇입니까?

내가 혼란스러워하는 부분은 <targetHref><cookie> 요소의 값을 추가해야하는지 여부에 대한 상반되는 정보를 보았습니다. 정적 서버 URL에서 손으로 직접 작성한 테스트 KML 파일을 제공 할 때 실제로 초기 프로토 타입을 업데이트하는 것을 보았 기 때문에 실제로는 그렇지 않다고 생각됩니다. 사실 그것은 실망 스럽습니다. 저는 제 기계에서 작업을 업데이트하는 것을 보았습니다 만, KML처럼 정확하고 올바른 것으로 보이는 것은 작동하지 않습니다.

현재 설정은 다음과 같습니다 (명확성을 위해 제거 외부 XML 네임 스페이스; "$ CLIENT_ID"는 GUID와 같은 문자열) :

<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> 
:

루트 KML 파일이 http://server/kml/ $ {CLIENT_ID}에서 제공이 KML은 http://server/kmlupdates/ $에서 제공 업데이트 이후

<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> 

:

초기 내용 KML은 http://server/kmlupdates/ $ {CLIENT_ID}에서 제공 {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> 

여기에 누락 된 내용에 대한 제안 사항이 있으면 누구나 문의 해 주시면 감사하겠습니다. 감사!

답변

4

질문의 원래 버전은 관련성이있는 것으로 밝혀진 두 가지 사실을 제외 시켰습니다. 1) KML 용 Java API를 사용하여 이것을 생성하고 2) XML 네임 스페이스를 <kml> 안에 있습니다. 나는 마침내 this Google KML Group post을 읽은 후 마침내 이것을 알아 냈습니다.

문제는 마지막 XML 네임 스페이스 "xmlns:xal"입니다. 어떤 이유로 KML에서 태그를 제거하면 <Update> 태그가 Google 어스의 항목을 실제로 변경할 수 있습니다. JAK는 네임 스페이스를 변경할 수 없지만 마샬링 된 문자열에서 수동으로 제거 할 수 있습니다.

확실히 기괴하지만 적어도 해결책을 찾았습니다.

-1

내가 다른 여기에 어쩌면 당신에 관한 일을하기 위해 다른 방법을 사용하여 몇 가지 예제가 (당신의 목적으로 "데이터의 초기 설정을 보내을, 다음 태그를 사용하여 동적으로 업데이트") :

https://sites.google.com/site/canadadennischen888/home/kml/auto-refresh-3d-tracking

접근 방식은 서버에서 온 모든 변경 사항입니다. 희망이 도움이됩니다.세부 사항과 같은 :

동적 자동 3D 추적 새로 만드는 방법 : (위의 링크와 같은 내부 KML 샘플)

  • 내 다른 JSP를

    1. 는 DB에서 KML 파일을 생성하는 RESTful 서비스를 준비를 코드는 내 Restful 서비스에 대한 링크가있는 KMZ 파일을 생성합니다. KMZ 파일에는 onInterval이 있습니다 (하단과 같습니다)

    2. Jsp 웹 페이지에서는 KMZ 파일을 다운로드 할 수 있습니다.

    3. 구글 어스 공개 KMZ 파일은 구글 어스가 자동 새로 고침

    4. 매번 상쾌 그 RESTful 서비스의 새로운 데이터를 얻을 수, 서버가 GE에 새 데이터와 최신 업데이트 KML 데이터를 보낼 것입니다

      .

    KMZ 샘플 :

    <?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" 
        xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"> 
        <NetworkLink> 
        <name>[email protected]</name> 
        <open>1</open> 
        <Link> 
        <href>http://localhost:9080/google-earth-project/rest/kml/10001/20002</href> 
        <refreshMode>onInterval</refreshMode> 
        </Link> 
        </NetworkLink> 
        </kml> 
    
  • +0

    링크 전용 답변이 유용하지 않습니다; 답안에 관련 코드가 포함 된 코드를 포함시킬 수 있습니까? –

    +0

    이미 자세한 내용을 업데이트 중 ... –

    관련 문제