6 Stimmen

Programmatische Erstellung von Vektorpfeilen in KML

Hat jemand praktische Beispiele für das programmgesteuerte Zeichnen von Symbolen als Vektoren in KML? Konkret habe ich Daten mit einem Betrag und einem Azimut bei bestimmten Koordinaten, und ich würde gerne Symbole (oder ein anderes grafisches Element) auf der Grundlage dieser Werte generieren lassen.

Einige Gedanken dazu, wie ich es angehen könnte:

  1. Bildverzeichnis (eine Art rohe Gewalt): Erstellen Sie einen Bildregisseur aus 360 verschiedenen Bilddateien (wahrscheinlich durch Stapeldrehung eines einzelnen Bildes), die jeweils in einem entsprechenden Azimut ausgerichtet sind. Ich habe Dinge gesehen wie " Excel zu KML aber ich suche nach Code, den ich in einem Programm verwenden kann, und nicht nach einem Webprogramm. Ausgabe : Der Pfeil enthält keinen Größenkontext, also müsste das ein Label sein. Ich würde lieber den Pfeil dynamisch verlängern.

  2. Erstellung von Linien in KML : Man könnte eine Formel erstellen, die eine Linie mit dem Ursprung an den Koordinatenpunkten erzeugt, wobei die Länge der Linie proportional zum Magnitudenwert ist und der Winkel vom Azimut abhängt. Es gäbe dann zwei weitere Linien, vielleicht 30 Grad oder so, die vom Ende der vorherigen Linie ausgehen, um die Pfeilspitze zu bilden. Ausgaben : Kein separates Bildsymbol, daher nicht sicher, wie es in KML funktionieren würde. Auch nicht sicher, wie einfach es wäre, diesen Algorithmus zu erzeugen.

  3. Separate Bilderzeugung: Erstellen Sie vielleicht eine PHP-Datei, die imagemagick oder etwas Ähnliches verwendet, um dynamisch eine .png-Datei zu generieren, und verlinken Sie dann mit der URI "domain.tld/imagegen.php?magnitude=magvalue&azimuth=azmvalue" auf das Symbol. Ausgabe : Ich habe immer noch das Problem, den Algorithmus für die Bilderzeugung zu schreiben.

Also, die Frage : Hat jemand eine Lösung für die programmatische Erzeugung von Vektoren (und nicht nur Pfeilen) gefunden?

3voto

Andrew Walker Punkte 2401

Ich habe gesehen, dass dies (in Fortran!) mit einer Variante von Option 1 , wobei jedoch nur ein Bild eines Pfeils verwendet wird und die Größe und Richtung mit dem KML-IconStyle-Element festgelegt werden.

Der Trick besteht darin, zunächst die Vektoren aus dem Format, in dem sie vorliegen, in Überschriften (in Grad im Uhrzeigersinn von Norden aus, also zwischen 0 und 360 Grad) und die Vektorlängen in einen Skalierungsfaktor (eine Gleitkommazahl in Dezimalschreibweise) umzuwandeln. Außerdem müssen Sie jedem Vektor einen eindeutigen Namen geben. Dann erstellen Sie für jeden Vektor ein KML-Stück, z. B. für den Vektor "my-vector-1" mit einem Maßstab von 1,8 und einer Richtung von 90,0 (d. h. Osten):

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

und dann, um den Vektor auf der Karte zu platzieren, verweisen Sie auf den IconStyle:

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

das alles einpacken:

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

und Sie sollten ein Bündel von Vektoren anzeigen. Um den Skalierungsfaktor richtig einzustellen, muss man vielleicht etwas experimentieren (und hängt von der Größe des Pfeilbildes ab), aber dieser Ansatz sollte viel schneller sein als das Laden vieler verschiedener Bilder. Wenn es eine Hilfe ist, könnte ich wahrscheinlich das Fortran dazu ausgraben...

0 Stimmen

Ich kann die Vektorgrafiken nicht zum Drehen bringen, indem ich die Überschrift ändere.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X