Comment implémenter le calcul du champ de vision?

11

Je cherche un moyen d'implémenter la visibilité (aka viewshed). J'ai trouvé une précédente question GIS SE qui suggérait quelques applications SIG (pas ce dont j'avais besoin - j'essaie d'intégrer les calculs), ainsi que SAGA. SAGA ressemble plus à ce que je recherche (classes C ++, Java, C #), mais je ne comprends pas assez la documentation de l'API pour comprendre quelles classes j'ai même besoin d'instancier (ou sous-classe).

Je ne suis pas lié à l'idée de SAGA - je recherche juste une bibliothèque / un moteur capable de faire des calculs d'intervisibilité.

Les contraintes sont qu'il doit être:

  • raisonnablement "léger" (car j'aimerais pouvoir couvrir les applications embarquées / mobiles)
  • raisonnablement open source (puisque mon application sera open source, bien que je sois flexible sur quelle licence exactement tant que sa (L) GPL est compatible).

Quelqu'un peut-il recommander une telle bibliothèque ou un tel moteur et fournir une description ou un lien vers le bit de la bibliothèque ou du moteur que je dois utiliser pour visualiser les calculs?

Alternativement / en plus, j'apprécierais également les références à des articles ou des tutoriels qui expliquent comment effectuer ces calculs de manière efficace (comme applicable aux appareils intégrés / mobiles, donc une implémentation basée sur GPU peut ne pas être aussi utile que quelque chose qui est plus général, et gère les appareils de faible puissance)

Ma préférence est une implémentation existante, plutôt que de créer quelque chose moi-même (qui est une option de sauvegarde).

Edit: C ++ n'est pas une exigence ferme - tout ce qui est raisonnablement portable (C #, C ++, Java) fera l'affaire. J'essaie une bibliothèque ou des modèles plutôt que d'intégrer une grande application.

BradHards
la source
2
Avez-vous réellement besoin d'un algorithme ZTV complet? Peut-être modéliser le terrain dans OpenGL et analyser les résultats de cela? Les smartphones ont une accélération graphique de plus en plus bonne que vous pouvez exploiter. OpenGL prend même en charge les projections orthographiques.
Matthew Snape
Je suis content tant qu'il produit les «bonnes» réponses, donc OpenGL vaut le détour. Avez-vous un exemple / pointeur qui le fait à partir de données de type SIG?
BradHards

Réponses:

8

Comme vous l'auriez vu dans la question référencée GIS SE , il ne semble pas y avoir grand-chose en termes de packages autonomes avec vue au moins sur le marché Open Source au-delà de SAGA et GRASS GIS. En plus d'écrire un wrapper autour du code pour ces algorthims, vous pouvez malheureusement finir par implémenter vous-même le champ de vision. (Bien que j'aimerais être corrigé à ce sujet.)

Si vous lisez la documentation de la fonction GRASS r.viewshed , elle fournit une description générale de l'algorithme et une référence au document suivant qui présente en détail un algorithme de champ de vision:

Calcul de la visibilité sur les terrains en mémoire externe . Herman Haverkort, Laura Toma et Yi Zhuang. Dans les Actes du 9ème Atelier sur le Génie Algorithmique et Expériences / Atelier sur les Algorithmes Analytiques et la Combinatoire (ALENEX / ANALCO 2007).

Alternativement, l'article Wikipedia sur Viewshed fournit des références:

Wu, H., Pan, M., Yao, L. et Luo, B. (2007). Un algorithme série basé sur une partition pour générer un champ de vision sur des DEM massifs . Journal international des sciences de l'information géographique, 21 (9), 955-964.

om_henners
la source
Pas exactement la réponse que j'espérais, mais la meilleure réponse fournie. Merci beaucoup pour votre travail.
BradHards
Pas de soucis. Bonne chance!
om_henners
4

Il existe un logiciel gratuit appelé RadioMobile qui est conçu pour les études de radiocommunication qui génère un abri de vue. La sortie est basée sur une entrée DEM et peut être un vecteur (fichier de points) ou un raster. J'ai pu utiliser le fichier de points vectoriels pour créer des polygones grâce à des scripts que je serai heureux de partager avec vous. Comme vous pouvez définir une palette sur la sortie raster, vous pouvez également convertir le raster en vecteur à l'aide de gdal.

Le programme a une interface graphique mais peut également être exécuté en mode batch afin que vous puissiez facilement l'intégrer dans un programme. Bien qu'il existe beaucoup plus d'options que nécessaire pour un champ de vision traditionnel, vous pouvez les définir sur null afin que les effets tels que la puissance de l'émetteur ne soient pas inclus - voir http://www.g3tvu.co.uk/RM_Batch_Files.htm

Le programme se trouve à http://www.cplus.org/rmw/rme.html L'auteur est également très utile.

J'espère que cela t'aides,

GeorgeC
la source
Intéressant, mais ne semble pas être open source et ses fenêtres uniquement. Cela ne fonctionnera donc pas dans un environnement mobile.
BradHards