6

プログラムでアイコンを KML のベクトルとして描画する実用的な例はありますか? 具体的には、特定の座標における大きさと方位角を含むデータがあり、これらの値に基づいてアイコン (または別のグラフィック要素) を生成したいと考えています。

私がそれにどのようにアプローチするかについてのいくつかの考え:

  1. 画像ディレクトリ(強引な方法): 対応する方位角をそれぞれ指す 360 の異なる画像ファイル (おそらく単一の画像をバッチ回転) の画像ディレクトリを作成します。「Excel から KMLへ」などを見たことがありますが、Web ユーティリティではなく、プログラム内で使用できるコードを探しています。問題: 矢印にはマグニチュード コンテキストが含まれていないため、ラベルにする必要があります。矢印を動的に長くしたいです。

  2. KML での線の作成: おそらく、座標点を原点とし、線の長さがマグニチュートに比例し、方位角に従って角度が付けられた線を作成する式を作成します。さらに 2 本の線があり、おそらく前の線の端から 30 度ほど伸びて矢印の頭になります。問題: 個別の画像アイコンではないため、KML でどのように機能するかわかりません。また、このアルゴリズムを生成するのがどれほど簡単かはわかりません。

  3. 別の画像生成:おそらく、imagemagick などを使用して、上記と同様の方法で .png ファイルを動的に生成する PHP ファイルを作成し、URI "domain.tld/imagegen.php?magnitude=" を使用してアイコンにリンクします。 magvalue&azimuth=azmvalue". 問題: 画像生成のアルゴリズムを実際に記述するという問題がまだ残っています。

それで、質問: 他の誰かがプログラムによるベクトル (単なる矢印ではなく) 生成の解決策を思いつきましたか?

4

1 に答える 1

3

オプション 1のバリアントを使用して (Fortran で) これが行われるのを見たことがありますが、矢印のイメージを 1 つだけ使用し、KML IconStyle 要素を使用してサイズと方向を設定します。

秘訣は、最初にベクトルを任意の形式から見出し (北から時計回りに 0 から 360 度の間) に変換し、ベクトルの長さを縮尺係数 (10 進表記の浮動小数点数) に変換することです。また、各ベクトルに一意の名前を付ける必要があります。次に、ベクトルごとに KML のチャンクを作成します。たとえば、スケールが 1.8 で見出しが 90.0 (東) のベクトル「my-vector-1」を作成します。

<IconStyle id="my-vector-1">
    <scale>1.8</scale>
    <heading>90.0</heading>
    <Icon>
        <href>/path/to/arrow.png</href>
    </Icon> 
</IconStyle>

次に、マップにベクターを配置するには、IconStyle を参照します。

<Placemark>
  <styleUrl>#my-vector-1</styleUrl>
  <Point>
     <coordinates>-10.5,10.8</coordinates>
  </Point>

すべてを次のようにまとめます。

<kml><Document> ... </Document></kml> 

ベクトルの束を表示する必要があります。縮尺係数を正しくするには、いくつかの実験が必要になる場合があります (矢印イメージのサイズによって異なります) が、このアプローチは、多くの異なるイメージをロードするよりもはるかに高速です。それが助けになれば、おそらくこれを行うためにFortranを掘り下げることができます...

于 2010-03-31T20:28:57.810 に答える