Suite

Requête pour obtenir une coque convexe


La requête ci-dessous est-elle correcte pour obtenir une forme de coque convexe :

DATA "the_geom from (select ST_ConvexHull(ST_Collect(the_geom)) As the_geom FROM xyz) as foo using unique id using SRID=XXXX"


ÉDITER: Mise à jour, ayant réalisé tardivement qu'il s'agit d'une question Map Server.

En général, pour obtenir l'enveloppe convexe, vous souhaiterez regrouper par id/gid, car produire la ou les enveloppes est une opération agrégée. Ainsi, sans la partie Mapserver, la requête ressemblerait à :

SELECT id, ST_ConvexHull(ST_Collect(the_geom)) en tant que the_geom du groupe xyz par id ;

Maintenant, pour que MapServer comprenne cela dans une définition DATA, vous feriez :

DATA "the_geom FROM (SELECT id as oid, ST_ConvexHull(ST_Collect(the_geom)) as the_geom FROM xyz group by id ) as some_table USING UNIQUE oid USING SRID=4326"

où j'ai supposé que votre SRID est 4326.

Réponse originale et incorrecte :
Vous n'avez pas du tout besoin du SRID, à moins que vous ne souhaitiez passer d'un système de coordonnées à un autre, ou que vous souhaitiez uniquement sélectionner des géométries avec un certain srid dans la requête - mais il serait un peu inhabituel d'avoir des géométries srid mixtes dans la même colonne. Il n'y a pas besoin d'une sous-requête, vous pouvez simplement écrire,

SÉLECTIONNEZ ST_ConvexHull(ST_Collect(the_geom)) comme the_hull FROM xyz WHERE id=someid ;

où j'ai changé la sortie enla coquese différencier de l'entréele_geom. Si vous voulez vraiment n'inclure que des géométries avec un certain srid, ajoutez et st_srid(the_geom)=some_srid' à la fin de la clause where.


Requête pour obtenir l'enveloppe convexe - Systèmes d'Information Géographique

Exemples de programmation GeoSpark (Scala)

val objectRDD = new RectangleRDD(sc, inputLocation, offset, "csv")

val resultSize = RangeQuery.SpatialRangeQuery(objectRDD, queryEnvelope, 0).getRawRectangleRDD().count()

val objectRDD = new RectangleRDD(sc, inputLocation, offset, "csv")

val result = KNNQuery.SpatialKnnQuery(objectRDD, queryPoint, 1000) ####Requête de jointure spatiale avec index val rectangleRDD = new RectangleRDD(sc, inputLocation2, offset2, "csv")

val objectRDD = new RectangleRDD(sc, inputLocation, offset ,"wkt","rtree",numPartitions)

val joinQuery = new JoinQuery(sc,objectRDD,rectangleRDD)

val resultSize = joinQuery.SpatialJoinQueryUsingIndex(objectRDD,rectangleRDD).count()

Ensembles de données distribués résilients spatiaux (SRDD)

GeoSpark étend les RDD pour former des RDD spatiaux (SRDD) et partitionne efficacement les éléments de données SRDD entre les machines et introduit de nouvelles transformations et actions spatiales parallélisées (opérations géométriques qui suivent la norme Open Geosptial Consortium (OGC)) et des actions (pour SRDD) qui fournissent une interface plus intuitive pour que les utilisateurs écrivent des programmes d'analyse de données spatiales. De plus, GeoSpark étend la couche SRDD pour exécuter des requêtes spatiales (par exemple, une requête Range, une requête KNN et une requête Join) sur des ensembles de données spatiales à grande échelle. Une fois les objets géométriques récupérés dans la couche RDD spatiale, les utilisateurs peuvent invoquer les opérations de traitement des requêtes spatiales fournies dans la couche de traitement des requêtes spatiales de GeoSpark qui s'exécute sur le cluster en mémoire, décide comment les tuples relationnels d'objets spatiaux peuvent être stockés, indexés et accessible à l'aide des SRDD et renvoie les résultats de la requête spatiale requis par l'utilisateur.

(colonne, colonne. Longitude, Latitude, colonne, colonne. )

(colonne, colonne. Longitude 1, Longitude 2, Latitude 1, Latitude 2,colonne, colonne. )

Deux paires de longitude et de latitude présentent les sommets se trouvent sur la diagonale d'un rectangle.

(colonne, colonne. Longitude 1, Latitude 1, Longitude 2, Latitude 2, . )

Chaque tuple contient des points illimités.

##Format de données pris en charge GeoSpark prend en charge les valeurs séparées par des virgules ("csv"), les valeurs séparées par des tabulations ("tsv"), le texte connu ("wkt") et GeoJSON ("geojson") comme formats d'entrée. Les utilisateurs n'ont qu'à spécifier le format d'entrée comme Splitter et la colonne de début (si nécessaire) des informations spatiales dans un tuple comme Offset lorsqu'ils appellent Constructors.

GeoSpark prend en charge les méthodes de partitionnement spatial de taille égale ("equalgrid"), R-Tree ("rtree") et diagramme de Voronoi ("voronoi"). Le partitionnement spatial consiste à répartir le RDD en fonction des emplacements spatiaux des objets. La jointure spatiale sur RDD partitionnée spatialement sera très rapide.

GeoSpark prend en charge deux index spatiaux, Quad-Tree et R-Tree.

GeoSpark fournit actuellement un support natif pour Inside, Overlap, DatasetBoundary, Minimum Bounding Rectangle et Polygon Union dans SRDDS conformément à la norme Open Geospatial Consortium (OGC).

GeoSpark fournit jusqu'à présent une requête de plage spatiale, une requête de jointure et une requête KNN dans les SRDD.

Jia Yu, Jinxuan Wu, Mohamed Sarwat. « Une démonstration de GeoSpark : Un cadre de calcul de cluster pour le traitement de grandes données spatiales ». (document de démonstration) In Proceeding of IEEE International Conference on Data Engineering ICDE 2016, Helsinki, FI, mai 2016

Jia Yu, Jinxuan Wu, Mohamed Sarwat. "GeoSpark : un cadre de calcul en grappe pour le traitement de données spatiales à grande échelle". (article court) In Proceeding of the ACM International Conference on Advances in Geographic Information Systems ACM SIGSPATIAL GIS 2015, Seattle, WA, USA Novembre 2015

GeoSaprk utilise JTS Plus (une suite de topologie JTS étendue version 1.14) pour certains calculs géométriques.

Veuillez vous référer au site Web de JTS Topology Suite et à JTS Plus pour plus de détails.

###Site Web du projet Veuillez visiter le site Web du projet GeoSpark pour les dernières nouvelles et communiqués.

GeoSpark est l'un des projets du DataSys Lab de l'Arizona State University. La mission de DataSys Lab est de concevoir et de développer des systèmes de gestion de données expérimentaux (par exemple, des systèmes de bases de données).


Mode d'édition ( Tab ) > Tout sélectionner ( a ) > Maillage > Sommets ( Ctrl + v ) > Coque convexe ( h ):

Opérateur bmesh coque convexe

bmesh.ops.convex_hull(bm, input, use_existing_faces)

Enveloppe convexe

Construit une enveloppe convexe à partir des sommets dans « input ».

Si ' use_existing_faces ' est vrai, la coque ne produira pas de triangles couverts par une face préexistante.

Tous les sommets, faces et arêtes de la coque sont ajoutés à « geom.out ». Tous les éléments d'entrée qui se retrouvent à l'intérieur de la coque (c'est-à-dire qui ne sont pas utilisés par une face de sortie) sont ajoutés à l'emplacement « interior_geom ». L'emplacement « unused_geom » contiendra toute la géométrie intérieure qui est complètement inutilisée. Enfin, 'holes_geom' contient les arêtes et les faces qui étaient dans l'entrée et font partie de la coque.

Script de test, crée une enveloppe convexe pour l'objet maillé actif.

Suzanne et coque convexe Suzanne


2 réponses 2

Je pense que votre résultat découle des propriétés connues de profondeur simplicielle. La profondeur simpliciale d'un point de requête q par rapport à un ensemble de points P est le nombre de simplices avec des sommets de P qui contiennent q. (Il existe différentes options permettant à q d'être sur la frontière ou d'exiger qu'il soit à l'intérieur, mais si vous supposez que l'union de P et q est en position générale, ce qui signifie qu'aucun point d+1 ne se trouve sur un hyperplan commun , où d est la dimension, n'a donc pas d'importance).

On sait maintenant que la profondeur simpliciale de q est >0 chaque fois que q est dans l'enveloppe convexe de P, et, en fait, la profondeur peut être limitée par le bas par nd, où n est le nombre de points dans P et d est la dimension . En particulier, pour d=2 et n>3, c'est exactement votre résultat.

Il y a plusieurs endroits, où une preuve de cela peut être trouvée, voici un lien vers de belles notes de cours sur les limites de la profondeur simplicial.

Voici une approche élémentaire. L'analyse convexe a des résultats qui sont intuitivement évidents mais fastidieux à prouver.

Soit $C= om_opérateurP$ et $p in C$ . (Pas besoin d'être à l'intérieur.)

D'après le théorème de Carathéodory il y a $m le 3$ ( $= dim mathbb^2+1$ ) affinement indépendant pointe $x_k in P$ tel que $p = sum_^m mu_k x_k$ avec $sum_^m mu_k = 1$ et $mu_k > 0$ .

Si $m=1$ alors choisissez distinct $x_2,x_3,x_4 in P setminus $ et définissez $P'= $ , $P''= $ .

Si $m=2$ alors choisissez distinct $x_3,x_4 in P setminus $ et définissez $P'= $ , $P''= $ .

On peut donc supposer que $m = 3$ . Choisissez n'importe quel point $x_4 in P setminus $ .

Pour $x in mathbb^2$ soit $ar = inom<1>$ et définissez $ar = commencer ar_1 & ar_2 & ar_3 & ar_4fin$ . Puisque $x_1,x_2,x_3$ sont affinement indépendants, les points $ar_1, ar_2, ar_3 $ sont linéairement indépendants et donc $ker ar$ a la dimension un. Soit $n in ker ar$ tel que $n_4 >0$ .

Notez que nous pouvons écrire $ar

= ar mu $ avec $mu_4 = 0$ .

Depuis $sum_^4 n_k = 0$ on voit qu'il existe au moins un $k$ tel que $n_k < 0$ . Soit $t^* = min_ (- < mu_k over n_k >) $ . Soit $mu^* = mu+t^* n$ et notons que $sum_^4 (mu_k + t^*n_k) = 0$ et $mu_k + t^*n_k ge 0$ et il y a quelque $k in <1,2,3>$ tel que $mu_k + t^*n_k = 0$ . Soit maintenant $P'= $ et $P''= $ .


Comment obtenir la liste des sommets de chaque côté d'une figure 3D à coque convexe

A partir de la question "Comment obtenir une liste de sommets dans une enveloppe convexe", je peux obtenir la liste des sommets de chaque triangle qui forment chaque face de l'enveloppe convexe à partir d'un ensemble de points et fermez également les triangles en ajoutant le premier sommet de chaque liste de sommets à la fin de cette liste.

J'utilise ces listes pour tracer les chiffres dans $LaTeX$ en utilisant Tikz. Le problème avec les triangles est que Tikz traite chaque triangle comme une face ou un côté différent de l'enveloppe convexe et donc il les ombre différemment même si les triangles sont dans le même plan ou face. Par exemple, les triangles fermés des points dans la question référencée ci-dessus sont

et les résultats sont confus.

Cependant, si je donne la liste fermée des sommets contenus dans chaque face, excluant les lignes de connexion sur la même face,

alors la sortie est plus claire.

(Les faces qui sont des triangles doivent être fermées deux fois puisque les listes de sommets doivent avoir la même longueur)

Comment pourrais-je obtenir uniquement la liste des sommets de chaque côté sans les arêtes sur la même face de l'enveloppe convexe ?


Système d'information géographique Open Source gvSIG Desktop –

gvSIG Desktop est un SIG puissant, convivial et interopérable utilisé par des milliers d'utilisateurs dans le monde.

Il est facile de travailler dans une variété de formats avec gvSIG Desktop, des fichiers vectoriels et raster, des bases de données et des services distants. Le logiciel offre une variété d'outils pour analyser et gérer vos informations géographiques.

gvSIG Desktop est conçu pour être une solution facilement extensible, permettant aux utilisateurs d'améliorer l'application logicielle et de développer des solutions sur mesure.

  • Accès aux formats vectoriels : SHP, DXF, GML, DWG, DGN, KML.
  • Accès aux formats raster : BMP, GIF, TIFF, JPEG, JP2, PNG, VRT, DAT d'ENVI, ERDAS (LAN, GIS, IMG), PCI Geomatics (PIX, AUX), ADF d'ESRI, ILWIS (MPR, MPL) , CARTE du PC Raster, ASC, PGM, PPM, RST de l'IDRISI, RMF, NOS, KAP, HDR, RAW.
  • Accès aux services distants : OGC (WMS, WFS, WCS, WFS-T, WPS), ArcIMS, Ecwp.
  • Accès aux bases de données et tables : PostGIS, ArcSDE, JDBC, CSV.
  • Affichage : zooms, panoramique, cadres, localisateur.
  • Requête : information, mesure de superficie et de distance, lien hypertexte.
  • Sélection : par point, par rectangle, par polygone, par couche, par polyligne, par cercle, par zone tampon, recherche alphanumérique, inverser la sélection, supprimer la sélection.
  • Recherche : par attribut, par coordonnées.
  • Géotraitement : tampon, intersection, découpage, dissolution, union, enveloppe convexe, différence, fusion, jointure spatiale, décalage XY, reprojection, géotraitement Sextante.
  • Édition graphique : ajouter des couches d'événements, accrochage, grille, planéité, pile de commandes, annuler/rétablir, copier, déplacer, symétrie, faire pivoter, mettre à l'échelle, modifier le sommet, polygone interne, matrice, exploser, diviser, joindre, polygone de saisie semi-automatique, insérer un point, multipoint, ligne, arc, polyligne, polygone, rectangle, carré, cercle, ellipse.
  • Edition alphanumérique : gestion des champs, édition des registres, calculateur de champs.
  • Services de catalogue et d'indexation géographique
  • Représentation vectorielle : symbole unique, quantités (densité de points, intervalles, symboles gradués, symboles proportionnels), catégories (expressions, valeurs uniques), attributs multiples, sauvegarde/chargement de la légende, constructeur de symbologie, niveaux de symbologie, bibliothèques de symbologie.
  • Représentation raster : luminosité, contraste, rehaussement, transparence par pixel, opacité, tables de couleurs, dégradés.
  • Étiquetage : Étiquetage statique, étiquetage avancé, étiquetage individuel.
  • Tableaux : statistiques, filtre, ordre croissant/décroissant, lien, jointure, déplacer la sélection, exporter, importer des champs, codage, normalisation.
  • Constructeur de mise en page : mise en page, éléments cartographiques (vue, légende, nord, échelle, cadres, image, texte, graphique), grille, modèles.
  • Impression : en PDF, en Postscript, export vers plusieurs formats d'images.
  • Analyse du réseau : topologie du réseau, gestionnaire d'arrêts, chemin minimum, connectivité, arbre couvrant minimum, matrice origine – destination, fournisseur d'installations d'urgence / le plus proche, zones de service.
  • Raster et télédétection : statistiques, filtres, histogramme, échelle d'échelle, amélioration, sauvegarde dans un fichier raster, vectorisation, définition de la région d'intérêt (ROI), composants généraux, géoréférencement, géolocalisation, classification supervisée, algèbre de bande, profils d'images, arbre de décision, composants principaux, calotte à glands, fusion d'images, diagramme de dispersion, mosaïques.
  • Publication : MapServer’s WCS, WMS et WFS, Geoserver’s WFS.
  • 3D et animation : vues 3D, projetées XYZ ainsi que sphériques (planétaires), couches 3D, symbologie 3D, édition 3D, cadrage 3D, animation 2D et 3D, visualisation stéréo (split horizontal).
  • Topologie : construction topologique, édition topologique, généralisation, sens de ligne inversé, polygones de/vers lignes, lignes de/vers points, triangulation de Delaunay, polygones de Thiessen, construction, nettoyage, correction d'erreurs topologiques (en mode Batch).
  • Autres : Coordonnées Responsable Systèmes de Référence, import/export vers WMC, scripting, responsable des traductions.

Site Internet: www.gvsig.com
Support: Documentation
Développeur: Association gvSIG
Licence: Licence publique générale GNU (version 3 ou ultérieure)

gvSIG Desktop est écrit en Java. Apprenez Java avec nos recommandations Livres gratuits et tutoriels gratuits.

Lisez notre collection complète de logiciel gratuit et open source recommandé. La collection couvre toutes les catégories de logiciels.


Certificat d'études supérieures en science des données géospatiales

Nous offrons un certificat d'études supérieures aux étudiants qui ont déjà un baccalauréat et qui souhaitent poursuivre des cours supplémentaires en science des données géospatiales. Nos cours présentent aux étudiants une variété d'outils de science des données en mettant l'accent sur les données géolocalisées. Le certificat complète notre maîtrise en sciences professionnelles en science des données géospatiales et sert de passerelle vers le programme. Il se marie également bien avec d'autres programmes d'études supérieures du Collège des arts libéraux et de l'Université Temple.


Plus petites coques convexes ($n$-Simplex) de $n+2$ Points en $mathbb^n$

« Étant donné $n$, trouvez la valeur minimale de $k$ avec la propriété suivante : Tout $k$ (distinct) points dans $mathbb^n$ peut être partitionné en deux sous-ensembles disjoints de sorte que l'intersection des enveloppes convexes des deux partitions ne soit pas vide."

Une enveloppe convexe d'un ensemble est le « plus petit » ensemble convexe qui contient l'ensemble. Un ensemble convexe $C$ est un ensemble dans lequel $forall x,y in C$, $lambda x + (1-lambda)y in C$ for leq lambda leq 1$.

Par exemple, dans $mathbb$, supposons que nous ayons trois points, $a,b,c$ avec $a < b < c$. Soit alors $a$ et $c$ dans une partition et $b$ dans l'autre. Clairement, l'enveloppe convexe de $$ est le segment de droite qui passe effectivement par $b$.

Dans $mathbb^2$, je pense que $k=4$. Nous avons quatre cas :

Cas 1 : Les quatre points $a,b,c,d$ sont colinéaires. Ensuite, les partitions peuvent être $$ et $$ et leurs enveloppes convexes ont clairement une intersection non vide.

Cas 2 : Trois des points sont colinéaires, disons $a,b,c,$ avec $b$ entre $a$ et $c$. Le point $d$ est ailleurs. Ensuite, laissez les partitions être à nouveau $$ et $$.

Cas 3 : Les quatre points forment les sommets d'un quadrilatère convexe. Alors laissez les coques convexes être les "diagonales".

Cas 4 : Les quatre points forment les sommets d'un quadrilatère concave. Ensuite, trois des points forment les sommets d'un triangle et le quatrième point serait à l'intérieur. L'enveloppe convexe de $$ est exactement ce triangle.

Je suppose que $k=n+2$. Je pense que l'enveloppe convexe de $n+1$ pointe dans $mathbb^n$ est le $n$-simplex (je ne sais pas si c'est la bonne notation). Nous pouvons toujours former un simplexe avec $n+1$ points et ensuite faire flotter le dernier point. Si ce point est dans le simplexe (enveloppe convexe conjecturée), alors nous avons terminé. Si c'est à l'extérieur, nous pouvons en quelque sorte diviser l'espace en fonction des "faces" de notre simplex.

Par exemple, dans $mathbb^3$, nous avons cinq points. Nous pouvons construire un tétraèdre avec quatre des points. Le tétraèdre aura quatre faces qui peuvent être étendues à quatre plans, divisant le $mathbb^3$. Chaque plan coupe l'espace en deux. Donc, si notre cinquième point est d'un côté de la face, alors il y a un sommet associé du tétraèdre de l'autre côté. Nous pouvons laisser ce sommet et ce cinquième point dans une partition et les trois autres points dans l'autre. Ainsi, nous avons un segment de droite passant par un triangle. S'il y a des problèmes avec le point étant dans le plan de l'une des faces, je pense que nous pouvons toujours expliquer ce cas simplement en formant un triangle et un segment de ligne.

Mais au-delà de $mathbb^n$, il n'est pas évident pour moi de prouver ou de réfuter la conjecture. Je pense que la solution ne devrait nécessiter rien d'autre que des méthodes élémentaires (pas nécessairement faciles ou simples, juste des techniques qu'un étudiant de premier cycle ou même du secondaire pourrait reconnaître). Je ne connais en fait aucune géométrie algébrique, mais je sais que les simples et la géométrie affine ont quelque chose à voir avec le problème, d'où les balises.


Données vectorielles sur le terrain #2172

Données vectorielles : polygones, polylignes et panneaux d'affichage/étiquettes.

Pour l'instant, juste un espace réservé pour rassembler du matériel de lecture. Plus à venir.

Le texte a été mis à jour avec succès, mais ces erreurs se sont produites :

Nous ne sommes pas en mesure de convertir la tâche en problème pour le moment. Veuillez réessayer.

Le problème a été créé avec succès, mais nous ne sommes pas en mesure de mettre à jour le commentaire pour le moment.

Vmora a commenté le 10 févr. 2015

Pjcozzi a commenté le 16 février 2015

@bagnell pouvez-vous évaluer les décalcomanies de volume comme approche pour les polygones/polylignes sur le terrain ? Pensez performance et précision.

Je ne sais pas comment le rendre rapide pour les polygones, il faut soit une décomposition convexe (pas nécessairement aussi fine que la triangulation) ou un test de point dans le polygone par pixel (qui, s'il est fait avec une texture 2D du polygone aurait tous les inconvénients de la simple pixellisation d'une texture en tant que calque d'image).

Pjcozzi a commenté le 17 février 2015 •

@bagnell voici quelques notes pour l'approche du volume d'ombre :

  • N'oubliez pas de ne pas utiliser la sphère de délimitation pour le polygone lui-même car le vrai polygone est l'endroit où le volume coupe le terrain. La chose la plus conservatrice à faire est d'utiliser la sphère englobante du volume, mais je pense que nous pouvons faire mieux.
  • Pour économiser le taux de remplissage, au lieu d'utiliser l'altitude maximale pour extruder, nous devrions ajouter une fonction au fournisseur de terrain pour renvoyer la hauteur maximale (et peut-être minimale) d'une étendue en fonction du terrain chargé (peut-être avec un rappel pour le raffinement ?) . Pour commencer, cela pourrait être basé sur la sphère englobante de chacun (ou la hauteur maximale lorsqu'elle est inférieure), mais nous pourrions améliorer cela avec une extension de maillage quantifié qui conserve min/max par nœud. Cela peut aussi être un service Web.

Pjcozzi a commenté le 17 févr. 2015

Notes de notre discussion sur panneaux/étiquettes:

  • Profondeur de test d'origine dans le vertex shader à l'aide du tampon de profondeur de terrain. Cela nécessitera VTF, qui est pris en charge à 97 % (MAX_VERTEX_TEXTURE_IMAGE_UNITS).
  • Hauteur de requête auprès du fournisseur de terrain. Avoir un rappel pour quand il affine. La couche d'entité mettra à jour la hauteur des panneaux d'affichage.
  • À plus long terme, nous pourrions avoir besoin de pouvoir afficher uniquement le nombre x d'étiquettes le plus proche/le plus important et non de les tester en profondeur. Cela nous permet de voir les étiquettes à travers le terrain, les bâtiments, etc.

Pjcozzi a commenté le 17 févr. 2015

De plus, je m'attends à ce que les approches d'espace d'écran (volume d'ombre, décalcomanie, etc.) soient bien meilleures pour l'édition à l'exécution que les approches de texture et de sous-échantillonnage (le sous-échantillonnage peut être correct, mais je m'attends à re-rasteriser la texture, surtout si nous en avons fait un arbre quaternaire clairsemé, ce serait douloureusement lent).

Pjcozzi a commenté le 17 févr. 2015

Hauteur de requête auprès du fournisseur de terrain.

Je ne sais pas à quoi ressemble l'implémentation maintenant, mais nous pouvons faire beaucoup mieux que de regarder chaque triangle par force brute. Nous pouvons supposer que le dernier triangle utilisé sera utilisé ensuite, et également utiliser des informations de contiguïté (pré-calculer une fois sur le client, je suppose, ou en tant qu'extension de maillage quantifié) ou un arrangement en quatre arbres à l'intérieur de la tuile pour trouver le triangle rectangle .

Avoir un rappel pour quand il affine. La couche d'entité mettra à jour la hauteur des panneaux d'affichage.

Cela pourrait être fait sur un travailleur Web, par exemple, chaque fois que nous obtenons une nouvelle vignette, un travailleur Web examine toutes les positions souscrites pour mettre en file d'attente les rappels (ou les événements). Il peut s'agir du même travailleur qui traite la tuile pour la visualisation ou d'un autre pour diminuer la latence de la visualisation du terrain au prix d'un retard de la mise à jour des données vectorielles.

Pjcozzi a commenté le 17 févr. 2015

@bagnell peut-être que nous faisons des polylignes en dernier. Nous pouvons évaluer les volumes d'ombre pour eux en utilisant la géométrie du corridor et le sous-échantillonnage en utilisant l'infrastructure que nous construirons pour les panneaux d'affichage/étiquettes. Le chapitre 3 des techniques de visualisation orientées convivialité pour l'affichage de la carte de navigation 3D est une comparaison intéressante, mais leur sous-échantillonnage fait des intersections exactes de segments de ligne/triangle - et n'obtient toujours pas une qualité visuelle adéquate pour un terrain haute résolution.

Kring a commenté le 18 févr. 2015

Pour commencer, cela pourrait être basé sur la sphère englobante de chacun (ou la hauteur maximale lorsqu'elle est inférieure), mais nous pourrions améliorer cela avec une extension de maillage quantifié qui conserve min/max par nœud.

Je ne suis pas sûr de te comprendre. Les tuiles maillées quantifiées connaissent déjà la hauteur minimale et maximale de n'importe quel point de la tuile. C'est de ça que tu parles ou tu as besoin d'autre chose ? En fait, les tuiles heightmap le font aussi, elles sont juste calculées au moment du chargement.

Pjcozzi a commenté le 18 févr. 2015

Non, ça va le faire. Je n'ai clairement pas regardé le format.

Pjcozzi a commenté le 21 févr. 2015

@bagnell J'avais plus d'idées sur le point dans le volume.

  • Si ce n'est déjà fait : sphère de délimitation -> coque convexe extrudée -> test exact
  • Si déjà dedans : sphère inscrite -> enveloppe convexe inscrite -> test exact (en fait, vérifiez probablement la sphère englobante et l'enveloppe convexe extrudée avant le test exact)
  • Plus tard : considérez BVH pour éviter O(n) sur tous les polygones.
  • Probablement besoin d'une heuristique pour voir si l'enveloppe convexe en vaut la peine, par exemple, si le polygone est déjà convexe ou peut être divisé en quelques régions convexes.
  • Je pense que nous devrions commencer par coder le point générique (ou plan proche ?) dans le volume extrudé, mais je pense que nous voudrons également une version optimisée pour notre cas unique :
    • Nous n'avons pas besoin de vérifier le bottom cap sous terrain
    • En général, nous devrons vérifier le top cap, tester chaque triangle serait lent, mais je pense que nous pouvons nous en tirer en vérifiant simplement la hauteur de la caméra. Cependant, je m'attends à ce qu'il y ait un problème car cela suppose un tessellate infini du capuchon supérieur, nous devrons donc peut-être vérifier une hauteur conservatrice, puis vérifier les triangles (sauf si la caméra est au-dessus d'une hauteur maximale).

    Pjcozzi commenté 25 avr. 2015

    Bagnell a commenté le 21 août 2015

    • Ajouter une hauteur minimale dynamique. (Nécessite des modifications aux géométries prises en charge)
    • Interrogez le terrain pour une hauteur maximale plus serrée.
    • Ajoutez une option aux géométries pour créer différents volumes de délimitation.
    • Lot par couleur ?
    • OBB plus serré ? Peut-être calculer à partir de triangles

    Likangning93 a commenté le 25 octobre 2017

    Techniques de visualisation orientées convivialité pour l'affichage de la carte de navigation 3D. 2014.

    Cette chose est comme un Guide de l'auto-stoppeur ou quelque chose waoww

    Pjcozzi commenté le 7 févr. 2018

    Je n'ai lu que l'abstraction, mais cela pourrait être intéressant :

    Visualisation de carte vectorielle différée

    Le rendu interactif de cartes vectorielles à grande échelle est un défi majeur pour les systèmes logiciels de visualisation géographique de haute qualité. Dans cet article, nous présentons une nouvelle approche pour la visualisation de cartes vectorielles à grande échelle sur des terrains de champ de hauteur détaillés. Notre méthode utilise une approche d'ombrage de ligne différé pour restituer des cartes vectorielles à grande échelle directement dans une étape d'ombrage d'espace d'écran sur une visualisation de terrain. Le fait qu'il n'y ait pas de rendu polygonal géométrique traditionnel impliqué permet à notre algorithme de surpasser les algorithmes de rendu de carte vectorielle classiques pour les systèmes d'information géographique. Notre approche flexible de rendu de lignes différées en cluster permet à un utilisateur de personnaliser et d'appliquer de manière interactive des méthodes avancées de style vectoriel, ainsi que l'intégration dans un système de niveau de détail de carte vectorielle.

    https://dl.acm.org/citation.cfm?doid=3002151.3002157

    @ likangning93 lisez-nous et dites-nous ce que vous en pensez.

    Thoenu a commenté le 15 mars 2018 •

    Cher Patrick et d'autres, vous voudrez peut-être considérer l'article de journal sur le lien ci-dessus, qui contient une analyse plus approfondie des performances :

    Hpinkos commenté le 15 mars 2018

    Likangning93 commenté le 30 avr. 2018 •

    Cette approche est étonnante et terrifiante. Le point crucial est qu'au lieu de rendre les "lignes" en tant que géométrie, ils effectuent une passe de post-traitement en plein écran qui vérifie chaque fragment de terrain dans la vue actuelle pour voir à quel point il est proche d'un segment de ligne, avec tous les segments de ligne stockés dans des textures en utilisant une grille uniforme de BVH.

    Mis à part les inquiétudes non confirmées concernant les problèmes de précision, est-il enfin temps pour moi d'écrire une traversée GPU BVH ? C'est enfin mon heure ?!

    [EDIT] d'accord une liste réelle de préoccupations :

    • problèmes de précision susmentionnés : cet article rétroprojecte des fragments de terrain sur des « coordonnées mondiales », puis effectue des vérifications 2D pour voir s'ils sont « proche » des lignes. Je soupçonne que nous ne pouvons pas obtenir une précision suffisante étant donné la taille de notre espace de "coordonnées mondiales"
    • aussi, cette chose vérifie 2D - cela ne fonctionne pas bien sur un globe, vous devrez peut-être définir une série de systèmes de coordonnées locaux. Ou peut-être tout remapper en coordonnées sphériques ? Mais cela vient avec son propre ensemble de problèmes d'exactitude/précision.
    • combien coûte l'ajout/suppression de lignes ? Cela semble être beaucoup de structure de données à mettre à jour.
    • comment cela s'intégrerait-il avec les entités/primitives ? Cette technique tente de regrouper toutes les polylignes en un seul ensemble constant de passes.
    • comment se comporter lorsque le nombre de lignes dans un cluster dépasse l'allocation de pixels du cluster ? Ajouter une autre collection de polylignes ?

    Je tombe amoureux de l'idée cependant, ce qui est dangereux. Je me demande combien de maths nous pouvons déplacer vers l'espace oculaire. et les mises à jour partielles de texture ne sont pas ce ralentir. et le stockage de polylignes dans des textures flottantes à double précision est possible.

    Likangning93 commenté le 30 avr. 2018 •

    Une approche de l'espace écran pour le rendu des polylignes sur le terrain

    Un problème que j'ai avec cette technique est l'exigence de rendre à la fois un mur et un volume d'ombre, ce qui nous semble plus cher à cause de WebGL. Cependant, en combinant cela avec des idées tirant parti de la table de traitement par lots pour l'élimination des fragments dans #6393, je me demande si nous pourrions :

    • rendre un volume mince pour chaque segment de ligne, portant un mappage d'ID de lot aux positions de début/fin et un vecteur ou quelque chose qui pris avec début/fin décrit un système de coordonnées local avec le plan XY tangent à l'ellipsoïde
    • pour chaque fragment, recherchez la profondeur du globe et calculez une position dans l'espace oculaire. Écrasez cette position et les positions de début/fin dans le plan XY du système de coordonnées local transformé en espace oculaire et vérifiez la colinéarité avec le début/la fin, qui ont également été écrasés.

    Nous devrions désactiver le début Z, je pense, par exemple si la caméra regarde les volumes de très près de sorte que le "haut" d'un volume dessine sur les volumes adjacents. Mais ce n'est peut-être pas un si gros prix à payer pour réduire cela à un seul passage.

    Nous pouvons également moduler "l'épaisseur" du volume d'ombre en utilisant un attribut de sommet normal qui est ajouté aux positions en fonction de la distance de la caméra.

    Quelques retours sur les mathématiques de l'enveloppe pour la consommation de la table de lots :

    • 5 000 polylignes avec 10 points chacune font 5 000 * 9 = 45 000 segments et entrées de tableau de lots
    • disons que chaque segment a 1 position vec3 de haute précision pour la position de départ, 1 décalage vec3 pour atteindre la position finale et 1 vec3 naïf normal. Cela fait 12 flottants, alors disons que nous divisons toutes les données sur 3 textures
    • c'est quelque chose comme 3 256 x 256 textures flottantes RBGA, ce qui ne semble pas trop terrible

    Likangning93 commenté 30 avr. 2018

    L'approche de colinéarité nous donne également des données qui pourraient être vitales pour faire des trucs de style.

    Likangning93 commenté le 30 avr. 2018 •

    Question : quelle est l'étendue du soutien matériel que nous voulons ici ? Il y a un développement impressionnant de château de sable Polyline Color et je le suis. Je ne sais pas comment faire cela lorsque nous travaillons dans un espace fragmenté.

    Quelque chose passe deux couleurs par segment et lerp peut-être.

    Pjcozzi commenté 30 avr. 2018

    Pour le style, commencez par la couleur et la largeur de ligne. Puis tirez. Puis les textures.

    Likangning93 a commenté le 1er mai 2018 •

    Ainsi, l'astuce du "volume d'ombre en un seul passage pour les lignes" ci-dessus a probablement les mêmes problèmes qu'un algorithme de volume d'ombre conventionnel pour les polylignes sur le terrain, à savoir la difficulté à maintenir une largeur d'écran constante :

    • lorsqu'il est dessiné perpendiculairement à la pente d'une pente raide et vu de côté
    • vu à des angles orientés vers l'horizon sur un sol plat

    Mais comme il s'agit d'un passage unique et qu'il ne nécessite aucun état de rendu spécial, il peut toujours partager un appel de dessin avec l'algorithme de mur de @pjcozzi, ce qu'un volume d'ombre conventionnel ne peut pas faire. C'est donc encore un peu prometteur.

    [EDIT] à bien y penser, la "visualisation de carte vectorielle différée" souffre probablement aussi de frottis et de problèmes de bord car elle repose sur quelque chose comme la technique de colinéarité 2D pour vérifier si un fragment fait partie d'un segment de ligne.

    Likangning93 commenté le 11 mai 2018

    astuce "volume d'ombre en un seul passage pour les lignes"

    Je pense que cette technique est suffisamment prometteuse pour que nous puissions commencer à élaborer un plan de match. Voici quelques clichés de mon prototype à différentes distances de vue, nous devrions être en mesure de simuler raisonnablement "une largeur d'espace d'écran constante":

    | |

    :-------------------------:|:-------------------------:|:-----------:
    près | loin | où que tu sois

    Je pense qu'à travers l'API Primitive, cela va ressembler à quelque chose comme un type Geometry personnalisé (à utiliser via une méthode qui construit des tableaux de GeometryInstances ) et un type Primitive personnalisé qui sera vraiment juste un wrapper léger autour de Primitive mais pourrait devoir s'emmêler un peu avec GroundPrimitive pour les informations sur le terrain.

    Comment cela devrait-il s'intégrer dans l'API Entity ? Juste quelque chose comme un drapeau onTerrain que vous pouvez ajouter aux entités polylignes ? Je suis raisonnablement sûr que cela va avoir besoin de ses propres spaghettis de mises à jour et de batchers sous le capot en raison du Primitive personnalisé.

    Il serait peut-être également plus sage de commencer avec un support matériel limité, disons, à des couleurs simples, mais je vais essayer d'avoir une idée plus concrète de la difficulté d'un support matériel complet bientôt.


    Systèmes d'information géographique : Systèmes d'information géographique : de quoi s'agit-il

    Les systèmes d'information géographique (SIG) servent à maintenir, analyser et visualiser des données spatiales qui représentent des objets géographiques, tels que des montagnes, des lacs, des maisons, des routes, des tunnels. Pour les données spatiales, les attributs géométriques (spatiaux) jouent un rôle clé, représentant par ex. points, lignes et régions dans le plan ou les volumes dans l'espace tridimensionnel. Ils modélisent des caractéristiques géographiques du monde réel, telles que des points de mesure géodésiques, des lignes de démarcation entre des terrains adjacents (dans une base de données cadastrale), des lacs ou des régions de parcs de loisirs (dans un système d'information touristique). En trois dimensions, les données spatiales décrivent des tunnels, des canalisations souterraines dans des villes, des chaînes de montagnes ou des carrières. In addition, spatial data in a GIS possess non-geometric, so-called thematic attributes, such as the time when a geodesic measurement was taken, the name of the owner of a piece of land in a cadastral database, the usage history of a park.

    This chapter aims to highlight some of the data structures and algorithms aspects of GISs that define challenging research problems, and some that show interesting solutions. More background information and deeper technical expositions can be found in books such as [38, 64, 66, 75].

    Geometric Objects

    Our technical exposition will be limited to geometric objects with a vector representation. Here, a point is described by its coordinates in the Euclidean plane with a Cartesian co- ordinate system. We deliberately ignore the geographic reality that the earth is (almost) spherical, to keep things simple. A line segment is defined by its two end points. A polygonal line is a sequence of line segments with coinciding endpoints along the way. A (simple) polygonal region is described by its corner points, in clockwise (or counterclockwise) order around its interior. In contrast, in a raster representation of a region, each point in the region, discretized at some resolution, has an individual representation, just like a pixel in a raster image. Satellites take raster images at an amazing rate, and hence raster data abound in GISs, challenging current storage technology with terabytes of incoming data per day. Nevertheless, we are not concerned with raster images in this chapter, even though some of the techniques that we describe have implications for raster data [58]. The reason for our choice is the different flavor that operations with raster images have, as compared with vector data, requiring a chapter of their own.

    Topological versus Metric Data

    For some purposes, not even metric information is needed it is sufficient to model the topology of a spatial dataset. How many states share a border with Iowa? is an example of a question of this topological type. In this chapter, however, we will not specifically study the implications that this limitation has. There is a risk of confusing the limitation to topological aspects only with the explicit representation of topology in the data structure. Here, the term explicit refers to the fact that a topological relationship need not be computed with substantial effort. As an example, assume that a partition of the plane into polygons is stored so that each polygon individually is a separate clockwise sequence of points around its interior. In this case, it is not easy to find the polygons that are neighbors of a given polygon, that is, share some boundary. If, however, the partition is stored so that each edge of the polygon explicitly references both adjacent polygons (just like the doubly connected edge list in computational geometry [62]), then a simple traversal around the given polygon will reveal its neighbors. It will always be an important design decision for a data structure which representation to pick.

    Geometric Operations

    Given this range of applications and geometric objects, it is no surprise that a GIS is expected to support a large variety of operations. We will discuss a few of them now, and then proceed to explain in detail how to perform two fundamental types of operations in the remainder of the chapter, spatial searching and spatial join. Spatial searching refers to rather elementary geometric operations without which no GIS can function. Here are a few examples, always working on a collection of geometric objects, such as points, lines, polygonal lines, or polygons. UNE nearest neighbor query for a query point asks for an object in the collection that is closest to the query point, among all objects in the collection. UNE distance query for a query point and a certain distance asks for all objects in the collection that are within the given distance from the query point. UNE range query (ou alors window query) for a query range asks for all objects in the collection that intersect the given orthogonal window. UNE ray shooting query for a point and a direction asks for the object in the collection that is hit first if the ray starts at the given point and shoots in the given direction. UNE point- jen-polygon query for a query point asks for all polygons in the collection in which the query point lies. These five types of queries are illustrations only many more query types are just as relevant. For a more extensive discussion on geometric operations, see the chapters on geometric data structures in this Handbook. In particular, it is well understood that great care must be taken in geometric computations to avoid numeric problems, because already tiny numerical inaccuracies can have catastrophic effects on computational results. Practically all books on geometric computation devote some attention to this problem [13, 49, 62], and geometric software libraries such as CGAL [11] take care of the problem by offering exact geometric computation.

    Geometric Data Structures

    Naturally, we can only hope to respond to queries of this nature quickly, if we devise and make use of appropriate data structures. An extra complication arises here due to the fact that GISs maintain data sets too large for internal memory. Data maintenance and analysis operations can therefore be efficient only if they take external memory properties into account, as discussed also in other chapters in this Handbook. We will limit ourselves here to external storage media with direct access to storage blocks, such as disks (for raster data, we would need to include tertiary storage media such as tapes). A block access to a random block on disk takes time to move the read-write-head to the proper position (the latency), and then to read or write the data in the block (the transfer). With today’s disks, where block sizes are on the order of several kBytes, latency is a few milliseconds, and transfer time is less. Therefore, it pays to read a number of blocks in consecution, because they require the head movement only once, and in this way amortize its cost over more than one block. We will discuss in detail how to make use of this cost savings possibility.

    All operations on an external memory geometric data structure follow the general filter- refinement pattern [54] that first, all relevant blocks are read from disk. This step is a first (potentially rough) filter that makes a superset of the relevant set of geometric objects available for processing in main memory. In a second step, a refinement identifies the exact set of relevant objects. Even though complicated geometric operators can make this refinement step quite time consuming, in this chapter we limit our considerations to the filter step. Because queries are the dominant operations in GISs by far, we do not explicitly discuss updates (see the chapters on external memory spatial data structures in this Handbook for more information).

    Applications of Geographic Information

    Before we go into technical detail, let us mention a few of the applications that make GISs a challenging research area up until today, with more fascinating problems to expect than what we can solve.

    Maps are the most well-known visualizations of geographical data. In its simplest form, a map is a partition of the plane into simple polygons. Each polygon may represent, for instance, an area with a specific thematic attribute value. For the attribute land use, polygons can stand for forest, savanna, lake areas in a simplistic example, whereas for the attribute state, polygons represent Arizona, New Mexico, Texas. In a GIS, each separable aspect of the data (such as the planar polygonal partitions just mentioned) is said to define a couche. This makes it easy to think about certain analysis and viewing operations, by just superimposing (overlaying) layers or, more generally, by applying Boolean operations on sets of layers. In our example, an overlay of a land use map with a state map defines a new map, where each new polygon is (some part of) the intersection of two given polygons, one from each layer. Dans map overlay in general, a Boolean combination of all involved thematic attributes together defines polygons of the resulting map, and one resulting attribute value in our example are the savannas de Texas. Map overlay has been studied in many different contexts, ranging from the special case of convex polygons in the partition and an internal memory plane-sweep computation [50] to the general case that we will describe in the context of spatial join processing later in this chapter.

    Map visualization is an entire field of its own (traditionally called cartography), with the general task to layout a map in such a way that it provides just the information that is desired, no more and no less one might simply say, the map looks right. What that means in general is hard to say. For maps with texts that label cities, rivers, and the like, looking right implies that the labels are in proper position and size, that they do not run into each other or into important geometric features, and that it is obvious to which geometric object a label refers. Many simply stated problems in map labeling turn out to be NP-hard to solve exactly, and as a whole, map labeling is an active research area with a variety of unresolved questions (see [47] for a tutorial introduction).

    Cunertographic Generalization

    If cartographers believe that automatically labeled maps will never look really good, they believe even more that another aspect that plays a role in map visualization will always need human intervention, namely map generalization. Generalization of a map is the process of reducing the complexity and contents of a map by discarding less important information and retaining the more essential characteristics. This is most prominently used in producing a map at a low resolution, given a map at a high resolution. Generalization ensures that the reader of the produced low resolution map is not overwhelmed with all the details from the high resolution map, displayed in small size in a densely filled area. Generalization is viewed to belong to the art of map making, with a whole body of rules of its own that can guide the artist [9, 46]. Nevertheless, computational solutions of some subproblem help a lot, such as the simplification of a high resolution polygonal line to a polygonal line with fewer corner points that does not deviate too much from the given line. For line simplification, old algorithmic ideas [16] have seen efficient implementations [28] recently. Maps on demand, with a selected viewing window, to be shown on a screen with given resolution, imply the choice of a corresponding scale and therefore need the support of data structures that allow the retrieval up to a desired degree of detail [4]. Apart from the simplest aspects, automatic map generalization and access support are open problems.

    Maps have been used for ages to plan trips. Hence, we want networks of roads, railways, and the like to be represented in a GIS, in addition to the data described above. This fits naturally with the geometric objects that are present in a GIS in any case, such as polygonal lines. A point where polygonal lines meet (a node) can then represent an intersection of roads (edges), with a choice which road to take as we move along. The specialty in storing roads comes from the fact that we want to be able to find paths between nodes efficiently, for instance in car navigation systems, while we are driving. The fact that not all roads are equally important can be expressed by weights on the edges. Because a shortest path

    Geographic Information Systems 55-5

    computation is carried out as a breadth first search on the edge weighted graph, in one way or another (e.g. bidirectional), it makes sense to partition the graph into pages so as to minimize the weight of edges that cross the cuts induced by the partition. Whenever we want to maintain road data together with other thematic data, such as land use data, it also makes sense to store all the data in one structure, instead of using an extra structure for the road network. It may come as no surprise that for some data structures, partitioning the graph and partitioning the other thematic aspects go together very well (compromising a little on both sides), while for others this is not easily the case. The compromise in partitioning the graph does almost no harm, because it is NP-complete to find the optimum partition, and hence a suboptimal solution of some sort is all we can get anyway. Even though this type of heuristic approaches for maintaining road networks in GIS are useful [69], it is by no means clear whether this is the best that can be achieved.

    Spatiotemporal Data

    Just like for many other database applications, a temps component brings a new dimension to spatial data (even in the mathematical sense of the word, if you wish). How did the forest unereunes in New Mexico develop over the last 20 years? Questions like this one demonstrate that for environmental information systems, a specific branch of GISs, keeping track of developments over time is a must. Spatiotemporal database research is concerned with all problems that the combination of space with time raises, from models and languages, all the way through data structures and query algorithms, to architectures and implementations of systems [36]. In this chapter, we refrain from the temptation to discuss spatiotemporal data structures in detail see Chapter 22 for an introduction into this lively field.

    The development of spatial data over time is interesting not only for explicit queries, but also for data mining. Here, one tries to find relevant patterns in the data, without knowing beforehand the character of the pattern (for an introduction to the field of data mining, see [27]).

    Let us briefly look at a historic example for spatial data mining: A London epidemiologist identified a water pump as the centroid of the locations of cholera cases, and after the water pump was shut down, the cholera subsided. This and other examples are described in [68]. If we want to find patterns in quite some generality, we need a large data store that keeps track of data extracted from different data sources over time, a so- called data warehouse. It remains as an important, challenging open problem to efficiently run a spatial data warehouse and mine the spatial data. The spatial nature of the data seems to add the extra complexity that comes from the high autocorrelation present in typical spatial data sets, with the effect that most knowledge discovery techniques today perform poorly. This omnipresent tendency for data to cluster in space has been stated nicely [74]: Everything is related to everything else but nearby things are more related than distant things. For a survey on the state of the art and the challenges of spatial data