1

KML 2.1チュートリアルで説明されているように、kmlを使用して地域の階層を実装しようとしています

リージョンを表すフィーチャ (ポリゴンまたはアイコン) が必要で、リージョンがアクティブになったときに、各リージョンの直下の子を表すフィーチャを表示したいのですが、親リージョンを表すアイコンは表示しません。

たとえば、カナダを表す地域があり、その地域の中央に目印があるとします。カナダ地域がアクティブになったら、カナダの目印を消し、カナダの州の上に目印を表示したいと考えています (BC、アルバータ州などの地域と目印)。次に、BC 地域がアクティブになったら、BC の目印を BC の都市の目印に置き換えたいと思います。

どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

1

あなたは正しい道を進んでいます。地域はあなたが望むものです。詳しい使い方はこちらのページをご覧ください

http://code.google.com/apis/kml/documentation/regions.html

特に、詳細レベル (LOD) を理解する必要があります。LOD は、領域をアクティブ化および非アクティブ化するビュー境界を決定します。最後に、この形式でリージョンを作成する必要があります。

<Region> 
  <LatLonAltBox> 
    <north>50</north> 
    <south>45</south> 
    <east>28</east> 
    <west>22</west> 
  </LatLonAltBox> 
  <Lod>
    <minLodPixels>128</minLodPixels> 
    <maxLodPixels>1024</maxLodPixels> 
  </Lod>
</Region> 

-1 を設定すると、誰かがどれだけズームアウトしても、または上記の値 (128) を使用する場合は、設定した境界ボックスが表示される前に視聴者の画面の 128x128 ピクセルを占める必要があることを意味します。活性化された(見られた)。

は、ズームインするときにビューをオフにするために使用するものです。または、-1 のままにして、誰かがどれだけズームインしてもオフにならないようにします。

あなたの質問では、カナダの真ん中に目印を含む地域があるとします。その地域には -1 の minlodpixels と、別の地域 (州の目印を示す) の minlodpixels に対応する maxlodpixels があり、州ごとに個別に地域を作成します。

トリックはの境界を解決することです-私は4つのポイントを持つ正方形のポリゴンを使用し、そのコードを見てなどを抽出します

実際、ここにリージョンの作成方法を示すすばらしいページがあります。'Screen Overlay Size Guide' という名前の kml をダウンロードしてください。

http://earth.google.ca/intl/en_ca/outreach/tutorial_region.html

于 2012-02-19T21:13:15.267 に答える
0

私は同じことをしようとしていて、うまくいく解決策を思いつきましたが、それはサーバーへの多くの呼び出しを必要とします。

http://example.com/zones.kmlから読み込まれたベースkmlには、

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document id="base">
  <Folder id="1_folder">
    //Region responsible for hiding the current (Canada) Placemark when zoomed in and made inactive ALSO responsible for hiding children(BC, Alberta...) Placemarks when active
    <Region>
      <LatLonAltBox>
          <north>74.79903411865234</north>
          <south>41.508766174316406</south>
          <east>-52.03630065917969</east>
          <west>-139.96746826171875</west>
        </LatLonAltBox>
      <Lod>
        <maxLodPixels>
          1024
        </maxLodPixels>
      </Lod>
    </Region>

    //NetworkLink that hides children Placemarks when zooming out
    <NetworkLink>
      <refreshVisibility>1</refreshVisibility>
      <Link>
        <href>http://example.com/1/hide_children.kml</href>            
        <viewRefreshMode>onRegion</viewRefreshMode>
      </Link>
    </NetworkLink>

    //The Canada Placemark
    <Placemark id="1">
      <name>Canada</name>
      <Point>
        <coordinates>-96.00188446044922,58.153900146484375</coordinates>
      </Point>
    </Placemark>

    //Networklink for Loading Children While Zooming in
    <NetworkLink>
      <refreshVisibility>1</refreshVisibility>
      // Same Region as above but with minLodPixels instead of maxLodPixels
      <Region>
        <LatLonAltBox>
          <north>74.79903411865234</north>
          <south>41.508766174316406</south>
          <east>-52.03630065917969</east>
          <west>-139.96746826171875</west>
        </LatLonAltBox>
        <Lod>
         <minLodPixels>1024</minLodPixels>
        </Lod>
      </Region>
      <Link>
        <href>http://example.com/zones/1.kml</href>                
        <viewRefreshMode>onRegion</viewRefreshMode>
      </Link>
    </NetworkLink>
  </Folder>
</Document>
</kml>

これには、特定の目印の子を非表示または表示するために読み込まれる、さらに2つのkmlファイルが必要です。

子を非表示にするためのkmlはhttp://example.com/1/hide_children.kmlから読み込まれ、子を非表示にするnetworklinkcontrolが含まれています

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
  <NetworkLinkControl>
    <Update>
      <targetHref>http://example.com/zones.kml</targetHref>
      <Change>
        <Folder targetId="1_children"><visibility>0</visibility></Folder>
      </Change>
    </Update>
  </NetworkLinkControl>
</kml>

子を表示するためのkmlはhttp://example.com/1.kmlから読み込まれ、子を表示するためのnetworklinkcontrolが含まれています

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
  <NetworkLinkControl>
    <Update>
      <targetHref>http://example.com/zones.kml</targetHref>
      <Create>
        <Folder targetId="1_folder">
          <Folder id='1_children'>
            //This folder is the same as the original zone
            <Folder id="2_folder">
              //Empty region if the zone has no children
              <Region></Region>

              //No need for networklink to hide children if zone has no children

              //Placemark
              <Placemark id="2">
              <name>BC</name>
              <Point>
                <coordinates>-122.95623779296875, 50.06098937988281</coordinates>
              </Point></Placemark>
            </Folder>

            //Same for other Provinces
            //<Folder id="3_folder"></Folder>
            //<Folder id="4_folder"></Folder>

          </Folder>
        </Folder>
      </Create>
    </Update>
  </NetworkLinkControl>
</kml>

minLod用とmaxLod用の2つの異なるリージョンを定義できれば、サーバーへの呼び出しをそれほど多くする必要がなく、既にロードした子をロードするためにサーバーを呼び出す必要もありませんが、私はこれを行う方法をまだ理解していません。

これはかなり最適化する必要があります。誰かがこれを行うより直接的な方法を見つけるのを手伝ってくれるかどうか私に知らせてください。ありがとう

于 2012-04-27T16:07:49.830 に答える