2009-07-24 14 views
5

Est-ce que quelqu'un a des exemples pratiques d'icônes de dessin par programmation en tant que vecteurs dans KML? Plus précisément, j'ai des données avec une magnitude et un azimut à des coordonnées données, et j'aimerais avoir des icônes (ou un autre élément graphique) générées en fonction de ces valeurs.Création par programme de flèches vectorielles en KML

Quelques réflexions sur la façon dont je pourrais aborder:

  1. Répertoire d'images (une manière de la force brute): Faire un directeur d'image de 360 ​​fichiers d'images différentes (probablement par lots tourner une seule image) chaque pointage dans un azimut co -pondant. J'ai vu des choses comme "Excel to KML", mais je cherche du code que je peux utiliser dans un programme, plutôt qu'un utilitaire web. Problème: La flèche ne contient pas de contexte de magnitude, ce qui signifie que cela doit être une étiquette. Je préfère allonger dynamiquement la flèche.

  2. création de la ligne en KML: Peut-être créer une formule qui crée une ligne avec l'origine au niveau des points de coordonnées, avec la longueur de la ligne proportionnelle à la magnitute, et un angle selon l'azimut. Il y aurait alors deux autres lignes, peut-être 30 degrés ou plus, s'étendant de la fin de la ligne précédente pour faire la tête de la flèche. Problèmes: Ce n'est pas une icône d'image distincte, donc je ne sais pas comment cela fonctionnerait en KML. Vous ne savez pas non plus comment il serait facile de générer cet algorithme.

  3. génération d'image séparée: peut-être créer un fichier PHP qui utilise ImageMagick ou quelque chose de similaire pour générer dynamiquement un fichier .png dans une méthode similaire à celle ci-dessus, puis reliez à l'icône en utilisant l'URI « domain.tld /imagegen.php?magnitude=magvalue & azimut = azmvalue ". Problème: Problème d'écriture de l'algorithme pour la génération d'image.

Ainsi, la question: a quelqu'un d'autre de trouver des solutions pour vecteur programmatique (plutôt que simplement flèche) génération?

Répondre

3

J'ai vu cela fait (en Fortran!) Avec une variante de option 1, mais en utilisant une seule image d'une flèche et en définissant la taille et la direction en utilisant l'élément KML IconStyle. L'astuce consiste à convertir d'abord vos vecteurs de n'importe quel format en en-têtes (en degrés dans le sens des aiguilles d'une montre depuis le nord entre 0 et 360 degrés) et les longueurs de vecteurs en un facteur d'échelle (un flottant en notation décimale). Vous devez également donner un nom unique à chaque vecteur. Ensuite, pour chaque vecteur créer un morceau de KML, par exemple pour vecteur « my-vecteur-1 » avec une échelle de 1,8 et un cap de 90,0 (c.-à-est):

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

puis placer le vecteur sur la carte de référence du IconStyle:

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

envelopper tout cela dans:

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

et vous devriez être dis jouer un bouquet de vecteur.Obtenir le facteur d'échelle correct peut prendre quelques expérimentations (et dépendra de la taille de votre image de flèche), mais cette approche devrait être beaucoup plus rapide, puis charger beaucoup d'images différentes. Si c'est n'importe quelle aide, je pourrais probablement creuser dehors le Fortran pour faire ceci ...

+0

ne peux pas obtenir les images de vecteur pour tourner en changeant l'en-tête. Aucune suggestion? –