Suite

Créer des lignes qui relient les centroïdes de polygones adjacents les uns aux autres


J'ai environ 10 polygones et j'ai ajouté leurs centroïdes à la carte. Je veux créer des lignes reliant les centroïdes de chaque polygone adjacent. Si le polygone 1 borde les polygones 2 et 3, je voudrais une ligne allant de 1 à 2 et de 1 à 3. J'espère que cela a du sens et que quelqu'un pourra m'aider. Aussi, je voudrais indiquer les distances entre les centroïdes.


J'ai rencontré le même problème, ma solution est de créer d'abord une copie du polygone, d'ajouter un champ avec le même ID avec les points centroïdes (devrait être là, pas besoin de créer). Utilisez ensuite les objets arc C# pour juger si les polygones sont touchés, comme ceci :

ISpatialFilter pSpatialFilter = new SpatialFilterClass(); pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelTouches;

Enregistrez ensuite l'ID des polygones touchés, qui sera connecté au centroïde, puis créez la liste de départ et la liste de tonalité pour enregistrer les points, créez une nouvelle classe d'entités polylignes pour connecter ces lignes.


Itérer SpatialPoints et SpatialPolygonsDataFrame fusionner dans R

J'essaie de parcourir le processus de création des centroïdes d'une liste de SpatialPolygonsDataFrames (chacun contenant plusieurs entités surfaciques), les SpatialPoints résultants préservant les attributs (données) des polygones parents. J'ai essayé la fonction sp::over, mais cela semble problématique car les centroïdes ne se chevauchent pas nécessairement avec les polygones parents. De plus, je suis nouveau dans le codage/R et je ne sais pas comment y parvenir dans une boucle for et/ou en utilisant une fonction d'application.

Plus précisément, je dois (1) trouver une fonction différente qui liera les SpatialPolygonsDataFrames aux SpatialPoints (centroïdes) associés et (2) itérer à travers l'ensemble du processus et fusionner les données SpatialPolygonsDataFrames avec les SpatialPoints appropriés - je ne sais pas comment faire correspondre la valeur d'index d'une liste à la valeur d'index d'une autre lors de l'exécution d'une boucle.

Voici un exemple reproductible pour un seul objet SpatialPolygonsDataFrames montrant que l'utilisation de sp::over ne fonctionne pas car certains centroïdes ne finissent pas par chevaucher les polygones parents :


Pourquoi la topologie ?

La topologie est depuis longtemps une exigence SIG clé pour la gestion et l'intégrité des données. En général, un modèle de données topologiques gère les relations spatiales en représentant les objets spatiaux (entités ponctuelles, linéaires et surfaciques) sous la forme d'un graphique sous-jacent de primitives topologiques (nœuds, faces et arêtes). Ces primitives, ainsi que leurs relations entre elles et avec les entités dont elles représentent les limites, sont définies en représentant les géométries des entités dans un graphe planaire d'éléments topologiques.

La topologie est fondamentalement utilisée pour assurer la qualité des données des relations spatiales et pour faciliter la compilation des données. La topologie est également utilisée pour analyser les relations spatiales dans de nombreuses situations, telles que la dissolution des limites entre des polygones adjacents avec les mêmes valeurs attributaires ou la traversée d'un réseau d'éléments dans un graphique de topologie.

La topologie peut également être utilisée pour modéliser la manière dont la géométrie d'un certain nombre de classes d'entités peut être intégrée. Certains appellent cela l'intégration verticale des classes d'entités.


Héritage:

L'algorithme derrière l'outil d'analyse de regroupement a été amélioré et de nouvelles fonctionnalités ont été ajoutées à ces méthodes dans ArcGIS Pro 2.1. Pour simplifier les nouvelles fonctionnalités et méthodes, deux nouveaux outils ont été créés pour remplacer l'outil Grouping Analysis. Utilisez l'outil de clustering multivarié spatialement contraint si vous souhaitez créer des groupes spatialement contigus. Utilisez l'outil Clustering multivarié pour créer des groupes sans contraintes spatiales.

Cet outil produit une classe d'entités en sortie avec les champs utilisés dans l'analyse plus un nouveau champ entier nommé SS_GROUP . Le rendu par défaut est basé sur le champ SS_GROUP et vous montre dans quel groupe appartient chaque entité. Si vous indiquez que vous voulez trois groupes, par exemple, chaque enregistrement contiendra un 1, 2 ou 3 pour le champ SS_GROUP. Lorsque Aucune contrainte spatiale est sélectionnée pour le paramètre Contraintes spatiales, la classe d'entités en sortie contiendra également un nouveau champ binaire appelé SS_SEED . Le champ SS_SEED indique quelles caractéristiques ont été utilisées comme points de départ pour développer des groupes. Le nombre de valeurs différentes de zéro dans le champ SS_SEED correspondra à la valeur que vous avez saisie pour le paramètre Nombre de groupes.

Cet outil crée éventuellement un fichier de rapport PDF lorsque vous spécifiez un chemin pour le paramètre Output Report File. Ce rapport contient divers tableaux et graphiques pour vous aider à comprendre les caractéristiques des groupes identifiés. Le chemin d'accès au rapport PDF sera inclus avec les messages résumant les paramètres d'exécution de l'outil. En cliquant sur ce chemin, le fichier de rapport s'ouvrira. Vous pouvez accéder aux messages en survolant la barre de progression, en cliquant sur le bouton contextuel ou en développant la section des messages dans le volet Géotraitement. Vous pouvez également accéder aux messages d'une exécution précédente de l'analyse de regroupement via l'historique de géotraitement.

La création du fichier de rapport peut ajouter un temps de traitement substantiel. Par conséquent, alors que l'analyse de regroupement créera la classe d'entités en sortie indiquant l'appartenance au groupe, le fichier de rapport PDF ne sera pas créé si vous spécifiez plus de 15 groupes ou plus de 15 variables.

Lorsque la classe d'entités en entrée n'est pas projetée (c'est-à-dire lorsque les coordonnées sont données en degrés, minutes et secondes) ou lorsque le système de coordonnées en sortie est défini sur un système de coordonnées géographiques, les distances sont calculées à l'aide de mesures de corde. Les mesures de distance à la corde sont utilisées car elles peuvent être calculées rapidement et fournissent de très bonnes estimations des vraies distances géodésiques, au moins pour des points situés à environ trente degrés les uns des autres. Les distances de corde sont basées sur un sphéroïde aplati. Étant donné deux points quelconques à la surface de la Terre, la distance à la corde qui les sépare est la longueur d'une ligne passant par la Terre en trois dimensions pour relier ces deux points. Les distances en cordes sont indiquées en mètres.

Avertir:

Assurez-vous de projeter vos données si votre zone d'étude s'étend au-delà de 30 degrés. Les distances à la corde ne sont pas une bonne estimation des distances géodésiques au-delà de 30 degrés.

Le champ ID unique vous permet de lier des enregistrements de la classe d'entités en sortie aux données de la classe d'entités en entrée d'origine. Par conséquent, les valeurs du champ d'ID unique doivent être uniques pour chaque entité et doivent généralement être un champ permanent qui reste avec la classe d'entités. Si vous n'avez pas de champ d'ID unique dans votre jeu de données, vous pouvez facilement en créer un en ajoutant un nouveau champ d'entier à votre table de classe d'entités et en calculant les valeurs de champ pour qu'elles soient égales au champ FID/OID. Vous ne pouvez pas utiliser le champ FID/OID directement pour le paramètre Champ d'ID unique.

Les champs d'analyse doivent être numériques et contenir une variété de valeurs. Les champs sans variation (c'est-à-dire la même valeur pour chaque enregistrement) seront supprimés de l'analyse mais seront inclus dans la classe d'entités en sortie . Les champs catégoriels peuvent être utilisés avec l'outil d'analyse de regroupement s'ils sont représentés sous forme de variables fictives (une valeur de un pour toutes les entités d'une catégorie et des zéros pour toutes les autres entités).

L'outil d'analyse de regroupement construira des groupes avec ou sans contraintes d'espace ou de temps. Pour certaines applications, vous pouvez ne pas vouloir imposer de contiguïté ou d'autres exigences de proximité aux groupes créés. Dans ces cas, vous définirez le paramètre Contraintes spatiales sur Aucune contrainte spatiale .

Pour certaines analyses, vous souhaiterez que les groupes soient spatialement contigus. Les options de contiguïté sont activées pour les classes d'entités surfaciques et indiquent que les entités ne peuvent faire partie du même groupe que si elles partagent une arête (arêtes de contiguïté uniquement) ou si elles partagent une arête ou un sommet (arêtes de contiguïté coins) avec un autre membre du grouper.

Les options Triangulation de Delaunay et K voisins les plus proches sont appropriées pour les entités ponctuelles ou surfaciques lorsque vous voulez vous assurer que tous les membres du groupe sont proximaux. Ces options indiquent qu'une entité ne sera incluse dans un groupe que si au moins une autre entité est un voisin naturel (triangulation de Delaunay) ou un K voisin le plus proche. K est le nombre de voisins à prendre en compte et est spécifié à l'aide du paramètre Nombre de voisins.

Afin de créer des groupes avec des contraintes d'espace et de temps, utilisez l'outil Générer une matrice de pondérations spatiales pour créer d'abord un fichier de matrice de pondérations spatiales ( .swm ) définissant les relations spatio-temporelles entre vos entités. Ensuite, exécutez Grouping Analysis , en définissant le paramètre Spatial Constraints sur Obtenir les pondérations spatiales du fichier et le paramètre Spatial Weights Matrix File sur le fichier SWM que vous avez créé.

Afin de créer des groupes tridimensionnels qui prennent en compte les valeurs z de vos entités, utilisez l'outil Générer une matrice de pondérations spatiales avec le paramètre Utiliser les valeurs Z coché pour créer d'abord un fichier de matrice de pondérations spatiales ( .swm ) définissant la 3D relations entre vos caractéristiques. Ensuite, exécutez Grouping Analysis , en définissant le paramètre Spatial Constraints sur Obtenir les pondérations spatiales du fichier et le paramètre Spatial Weights Matrix File sur le fichier SWM que vous avez créé.

Des contraintes spatiales supplémentaires, telles qu'une distance fixe, peuvent être imposées en utilisant l'outil Générer une matrice de pondérations spatiales pour créer d'abord un fichier SWM, puis en fournissant le chemin d'accès à ce fichier pour le paramètre Fichier de matrice de pondérations spatiales.

Même si vous pouvez créer un fichier de matrice de pondération spatiale (SWM) pour définir des contraintes spatiales, aucune pondération réelle n'est appliquée. Le SWM définit quelles caractéristiques sont contiguës ou proximales. L'imposition d'une contrainte spatiale détermine qui peut et ne peut pas être membre du même groupe. Si vous sélectionnez Bords contigus uniquement , par exemple, toutes les entités d'un même groupe auront au moins une arête en commun avec une autre entité du groupe. Cela maintient les groupes résultants spatialement contigus.

La définition d'une contrainte spatiale garantit des groupes compacts, contigus ou proximaux. L'inclusion de variables spatiales dans votre liste de champs d'analyse peut également encourager ces attributs de groupe. Des exemples de variables spatiales seraient la distance aux bretelles d'accès aux autoroutes, l'accessibilité aux offres d'emploi, la proximité des possibilités de shopping, les mesures de connectivité et même les coordonnées (X, Y). L'inclusion de variables représentant l'heure, le jour de la semaine ou la distance temporelle peut encourager la compacité temporelle parmi les membres du groupe.

Lorsqu'il existe un modèle spatial distinct pour vos entités (par exemple, trois clusters séparés et spatialement distincts), cela peut compliquer l'algorithme de regroupement spatialement contraint. Par conséquent, l'algorithme de regroupement détermine d'abord s'il existe des groupes déconnectés. Si le nombre de groupes déconnectés est supérieur au nombre de groupes spécifié, l'outil ne peut pas résoudre et échouera avec un message d'erreur approprié. Si le nombre de groupes déconnectés est exactement le même que le nombre de groupes spécifié, la configuration spatiale des entités détermine à elle seule les résultats des groupes, comme indiqué dans (A) ci-dessous. Si le nombre de groupes spécifié est supérieur au nombre de groupes déconnectés, le regroupement commence avec les groupes déconnectés déjà déterminés. Par exemple, s'il y a trois groupes déconnectés et que le nombre de groupes spécifié est 4 , l'un des trois groupes sera divisé pour créer un quatrième groupe, comme indiqué dans (B) ci-dessous.

Dans certains cas, l'outil d'analyse de regroupement ne sera pas en mesure de respecter les contraintes spatiales imposées et certaines entités ne seront incluses dans aucun groupe (la valeur SS_GROUP sera de -9999 avec un rendu creux). Cela se produit s'il y a des entités sans voisins. Pour éviter cela, utilisez K voisins les plus proches , ce qui garantit que toutes les entités ont des voisins. L'augmentation du paramètre Nombre de voisins aidera à résoudre les problèmes avec les groupes déconnectés.

Bien qu'il y ait une tendance à vouloir inclure autant de champs d'analyse que possible, pour cet outil, il est préférable de commencer avec une seule variable et de construire. Les résultats sont beaucoup plus faciles à interpréter avec moins de champs d'analyse. Il est également plus facile de déterminer quelles variables sont les meilleurs discriminateurs lorsqu'il y a moins de champs.

Lorsque vous sélectionnez Aucune contrainte spatiale pour le paramètre Contraintes spatiales, vous disposez de trois options pour la méthode d'initialisation : Rechercher des emplacements de graines , Obtenir des graines du champ et Utiliser des graines aléatoires . Les graines sont les caractéristiques utilisées pour développer des groupes individuels. Si, par exemple, vous entrez un 3 pour le paramètre Nombre de groupes, l'analyse commencera avec trois caractéristiques d'origine. L'option par défaut, Find seed locations , sélectionne au hasard la première graine et s'assure que les graines suivantes sélectionnées représentent des entités éloignées les unes des autres dans l'espace de données. La sélection de valeurs initiales qui capturent différentes zones de l'espace de données améliore les performances. Parfois, vous savez que des caractéristiques spécifiques reflètent des caractéristiques distinctes que vous souhaitez représenter par différents groupes. Dans ce cas, créez un champ de départ pour identifier ces caractéristiques distinctives. Le champ d'origine que vous créez doit avoir des zéros pour toutes les entités d'origine initiales, mais les entités d'origine initiales doivent avoir la valeur 1 . Vous sélectionnerez ensuite Obtenir les graines du champ pour le paramètre Méthode d'initialisation. Si vous souhaitez effectuer une sorte d'analyse de sensibilité pour voir quelles entités se trouvent toujours dans le même groupe, vous pouvez sélectionner l'option Utiliser des valeurs aléatoires pour le paramètre Méthode d'initialisation. Pour cette option, toutes les caractéristiques d'origine sont sélectionnées au hasard.

Lorsque vous utilisez des graines aléatoires, vous pouvez choisir une graine pour lancer le générateur de nombres aléatoires via le paramètre Environnement du générateur de nombres aléatoires. Cependant, le générateur de nombres aléatoires utilisé par cet outil est toujours Mersenne Twister.

Toute valeur de 1 dans le champ d'initialisation sera interprétée comme une graine. S'il y a plus d'entités d'origine que le nombre de groupes, les entités d'origine seront sélectionnées au hasard parmi celles identifiées par le champ d'initialisation. S'il y a moins d'entités d'origine que spécifié par Nombre de groupes , les entités d'origine supplémentaires seront sélectionnées de manière à être éloignées (dans l'espace de données) de celles identifiées par le champ d'initialisation .

Parfois, vous connaissez le nombre de groupes le plus approprié pour vos données. Dans le cas où ce n'est pas le cas, vous devrez peut-être essayer différents nombres de groupes, en notant quelles valeurs offrent la meilleure différenciation de groupe. Lorsque vous cochez le paramètre Évaluer le nombre optimal de groupes, une pseudo-statistique F sera calculée pour regrouper les solutions avec 2 à 15 groupes. Si aucun autre critère ne guide votre choix pour Nombre de groupes , utilisez un nombre associé à l'une des plus grandes valeurs de pseudo-statistique F. Les plus grandes valeurs de la statistique F indiquent les solutions les plus performantes pour maximiser à la fois les similitudes au sein du groupe et les différences entre les groupes. Lorsque vous spécifiez un fichier de rapport de sortie facultatif, ce rapport PDF inclura un graphique montrant les valeurs de la statistique F pour les solutions avec 2 à 15 groupes.

Quel que soit le nombre de groupes que vous spécifiez, l'outil s'arrêtera si la division en groupes supplémentaires devient arbitraire. Supposons, par exemple, que vos données se composent de trois polygones regroupés dans l'espace et d'un seul champ d'analyse. Si toutes les entités d'un cluster ont la même valeur de champ d'analyse, la façon dont l'un des clusters individuels est divisé devient arbitraire après la création de trois groupes. Si vous spécifiez plus de trois groupes dans cette situation, l'outil ne créera toujours que trois groupes. Tant qu'au moins un des champs d'analyse d'un groupe présente une certaine variation de valeurs, la division en groupes supplémentaires peut continuer. Les groupes ne seront pas divisés davantage s'il n'y a pas de variation dans les valeurs des champs d'analyse.

Lorsque vous incluez une contrainte spatiale ou spatio-temporelle dans votre analyse, les pseudo-statistiques F sont comparables (tant que les entités en entrée et les champs d'analyse ne changent pas). Par conséquent, vous pouvez utiliser les valeurs de la statistique F pour déterminer non seulement le nombre optimal de groupes, mais également pour vous aider à faire des choix concernant l'option Contraintes spatiales, la méthode de distance et le nombre de voisins les plus efficaces.

L'algorithme K-Means utilisé pour partitionner les entités en groupes lorsque Aucune contrainte spatiale est sélectionné pour le paramètre Contraintes spatiales et Trouver des emplacements de départ ou Utiliser des départs aléatoires est sélectionné pour la Méthode d'initialisation intègre des heuristiques et peut renvoyer un résultat différent à chaque fois que vous exécutez l'outil (même en utilisant les mêmes données et les mêmes paramètres d'outil). C'est parce qu'il y a un composant aléatoire pour trouver les caractéristiques de départ initiales utilisées pour développer les groupes.

Lorsqu'une contrainte spatiale est imposée, il n'y a pas de composante aléatoire dans l'algorithme, donc une seule pseudo-statistique F peut être calculée pour les groupes 2 à 15, et les valeurs de statistique F les plus élevées peuvent être utilisées pour déterminer le nombre optimal de groupes pour votre analyse. Cependant, comme l'option Aucune contrainte spatiale est une solution heuristique, la détermination du nombre optimal de groupes est plus complexe. La statistique F peut être différente à chaque exécution de l'outil, en raison de caractéristiques initiales différentes. Cependant, lorsqu'un modèle distinct existe dans vos données, les solutions d'une exécution à l'autre seront plus cohérentes. Par conséquent, pour aider à déterminer le nombre optimal de groupes lorsque l'option Aucune contrainte spatiale est sélectionnée, l'outil résout l'analyse de regroupement 10 fois pour 2, 3, 4 et jusqu'à 15 groupes. Les informations sur la distribution de ces 10 solutions sont ensuite rapportées (min, max, moyenne et médiane) pour vous aider à déterminer un nombre optimal de groupes pour votre analyse.

L'outil d'analyse de regroupement renvoie trois valeurs de sortie dérivées pour une utilisation potentielle dans des modèles et des scripts personnalisés. Il s'agit de la pseudo-statistique F pour le nombre de groupes ( Output_FStat ), de la pseudo-statistique F la plus grande pour les groupes 2 à 15 ( Max_FStat ) et du nombre de groupes associés à la plus grande valeur pseudo F-Statistic ( Max_FStat_Group ). Lorsque vous choisissez de ne pas évaluer le nombre optimal de groupes, toutes les variables de sortie dérivées sont définies sur Aucun.

Le numéro de groupe attribué à un ensemble de fonctionnalités peut changer d'une exécution à l'autre. Par exemple, supposons que vous partitionnez les entités en deux groupes en fonction d'une variable de revenu. La première fois que vous exécutez l'analyse, vous pouvez voir les caractéristiques à revenu élevé étiquetées comme groupe 2 et les caractéristiques à faible revenu étiquetées comme groupe 1 la deuxième fois que vous exécutez la même analyse, les caractéristiques à revenu élevé peuvent être étiquetées comme groupe 1. Vous pouvez également voir que certaines des caractéristiques de revenu moyen changent l'appartenance au groupe d'une exécution à une autre lorsqu'aucune contrainte spatiale n'est spécifiée.

Bien que vous puissiez choisir de créer un très grand nombre de groupes différents, dans la plupart des scénarios, vous partitionnerez probablement les fonctionnalités en quelques groupes. Étant donné que les graphiques et les cartes deviennent difficiles à interpréter avec de nombreux groupes, aucun rapport n'est créé lorsque vous entrez une valeur supérieure à 15 pour le paramètre Nombre de groupes ou sélectionnez plus de 15 champs d'analyse . Vous pouvez toutefois augmenter cette limitation sur le nombre maximum de groupes.

Plonger:

Étant donné que vous disposez du code source Python pour l'outil d'analyse de regroupement, vous pouvez, si vous le souhaitez, outrepasser la limitation du rapport de 15 variables ou 15 groupes. Cette limite supérieure est définie par deux variables à la fois dans le fichier de script Partition.py et dans le code de validation de l'outil dans la boîte à outils Spatial Statistics :

Pour plus d'informations sur le fichier de rapport de sortie , consultez En savoir plus sur le fonctionnement de l'analyse de regroupement.


Comment créer des zones fermées (polygones convexes) à partir d'un ensemble de segments de ligne ?

Le problème suivant est en 2D, donc certaines simplifications peuvent être apportées lors de la suggestion de réponses.

J'ai besoin de créer des zones fermées (définies soit par des segments de ligne, soit simplement par un ensemble de points - polygone convexe) à partir d'un ensemble de points/segments de ligne.

Fondamentalement, j'ai utilisé Voronoi pour générer des "roads". Ensuite, j'ai modifié certaines données. Maintenant, j'ai besoin d'un moyen de parcourir ces données (qui sont toujours des segments de ligne mais ne sont plus conformes à Voronoi) et de générer des "voisins" qui sont bordés par les "routes".

J'ai regardé des diagrammes graphiques et des théories du chemin le plus court, mais je ne pouvais pas le comprendre.

Logiquement, cela pourrait être fait en commençant par le bord gauche à partir d'un point, en trouvant le chemin du retour à ce point en utilisant le chemin le plus court avec les lignes disponibles (en utilisant uniquement le sens des aiguilles d'une montre). Ensuite, marquez cette ligne et supprimez-la des données. Ensuite, vous pouvez répéter le même processus et obtenir toutes les zones comme ça.

J'ai essayé de l'implémenter mais cela ne m'a mené nulle part car je n'arrivais pas à trouver un moyen d'écrire un code C++ capable de le faire. Le problème consistait à choisir la ligne la plus dans le sens inverse des aiguilles d'une montre parmi les lignes disponibles à partir d'un point spécifique. Toutes les mathématiques basées sur l'angle que j'ai faites ont donné de mauvaises réponses parce que la façon dont sin/cos est implémentée en c++.

Donc, pour résumer - si vous pouvez m'aider avec une approche totalement nouvelle du problème, c'est bien, sinon pourriez-vous m'aider à trouver un moyen d'écrire la partie du code qui trouve le chemin le plus court dans le sens des aiguilles d'une montre pour revenir au point de départ en utilisant la ligne segment défini comme chemins de retour.

EDIT : Ajout d'une image pour illustrer ce que je veux faire.

Vérifiez l'image ici - (besoin de 10 réputations avant de pouvoir la poster ici :P)

J'ai un ensemble de points (petits points violets). Un autre tableau définit les points qui composent une ligne (route). Je veux un moyen de définir la zone entourée de routes afin que je puisse y placer des bâtiments ou des routes plus petites et tester les bords afin que chaque région soit séparée. J'espère que cela vous donnera plus d'informations sur la façon de résoudre ce problème.


1 réponse 1

D'après les discussions et le document, OpenFOAM semble avoir mis en œuvre une mesure d'asymétrie. Cette réponse n'explique pas pourquoi les différentes définitions de l'asymétrie pourraient être équivalentes, je vais juste justifier pourquoi il s'agit d'une mesure de l'asymétrie. Envisagez de suivre deux éléments - par souci de simplicité -

La flèche bleue est la normale de la surface extérieure fAreas[facei] , les points rouges sont, de gauche à droite, ownCc , fCtrs[facei] et neiCc . Maintenant, Cpf est le vecteur pointant de ownCc vers fCtrs[facei] et d est le vecteur pointant de fCtrs[facei] vers neiCc .

C'est ici que je rappelle que, étant donné deux vecteurs compatibles $v,w$ : $vcdot w = |v| |w| cos( heta)$ où $ heta$ est l'angle entre $v$ et $w$ .

Revenons à la formule ((fAreas[facei] & Cpf)/((fAreas[facei] & d) + ROOTVSMALL)) . (fAreas[facei] & Cpf) nous donnera simplement la norme de fAreas[facei] fois Cpf car ces deux vecteurs pointent dans la même direction (dans cet exemple, si Own était un trapèze, il ne le serait pas) donc $ heta= 0$ . (fAreas[facei] & d) peut nous donner une variété de valeurs positives différentes, mais le point important est que si fAreas[facei] et d pointent dans la même direction, donc pas d'asymétrie, ce sera la norme de fAreas[facei] fois d , par exemple [norm(fAreas[facei])*norm(Cpf)]/[norm(fAreas[facei])*norm(d)] = norm(Cpf)/norm(d) . Cela simplifie

Par conséquent, si le maillage n'est pas asymétrique, sv - et par conséquent svHat - sera égal à zéro. S'il est faussé, comme sur la photo, le calcul est légèrement différent

qui devient (sans tenir compte de ROOTVSMALL )

avec theta étant l'angle entre d et fAreas[facei] . Réorganisons-nous (encore une fois, je ne tiens pas compte de ROOTVSMALL )

De cette façon, il est plus clair qu'il s'agit d'une mesure d'asymétrie. theta peut prendre des valeurs dans l'intervalle ouvert $(-pi/2,pi/2)$ pour les mailles sans éléments dégénérés et 1/cos(theta) prend des valeurs dans l'intervalle $[1,infty)$ . A la dernière étape, il y a la normalisation svHat = sv/(mag(sv) + ROOTVSMALL) qui génère un vecteur unitaire svHat et vous donne l'asymétrie dans chaque direction. 0 signifie qu'il n'y a pas d'asymétrie dans la direction donnée et d'autres valeurs signifieront une certaine asymétrie. Je pense que $-1$ serait le cas le plus asymétrique et correspondrait à un élément voisin dégénéré.

Différentes mesures d'asymétrie

Comme Maxim Umansky l'a mentionné dans les commentaires à la question, il existe un article wikipedia qui traite de l'asymétrie. Ce sont des mesures valides de l'asymétrie d'un élément, cependant, ils ne disent rien sur l'asymétrie de la grille. Sauf celui basé sur le volume équilatéral. Par exemple, selon ces mesures, le maillage d'un domaine de losange avec des éléments de losange serait considéré comme asymétrique, cependant, ce n'est pas ce que vous voulez.

Une autre définition d'asymétrie que je connais est $1-frac<||cd||><|F|>,$ où $F$ est la face entre deux éléments voisins, $|F|$ est l'aire de la face, $c$ est le centroïde de la face $F$ et $d$ est le milieu du segment de droite reliant le centre de l'élément Own au centre de l'élément voisin. Dans ce cas, si $c$ et $d$ se chevauchent pour chaque couple d'éléments voisins, cela signifie que le maillage n'est pas asymétrique et vous obtenez une valeur de $1$ . Par conséquent, cette définition de l'asymétrie est bornée ci-dessus par $1$ mais cela peut être un nombre négatif indéfiniment grand.

Différences entre cette définition et la mesure OpenFOAM

  • Celui que je connais vous donne un scalaire, la mesure OpenFOAM renvoie un vecteur et vous indique également la direction de l'asymétrie
  • La mesure OpenFOAM est en $[-1,0]$ (si je ne me trompe pas) et l'autre est en $(-infty,1]$ .
  • Celui-ci se généralise aux polygones et aux polyèdres (c'est une information de seconde main, c'est-à-dire quelque chose que j'ai entendu il y a quelque temps), je ne suis pas sûr de celui d'OpenFOAM.

Pour ces raisons, même si je pense qu'il s'agit de définitions équivalentes, je ne peux pas prouver qu'elles le sont, par ex. comment comparer un vecteur à un scalaire ? Cependant, les deux caractériseraient les deux éléments suivants comme fortement biaisés, ce qui constitue ma preuve de leur équivalence.


2 réponses 2

Vous pouvez trouver le centre de gravité d'un pentagone en remarquant qu'un pentagone peut être décomposé en l'union d'un triangle et d'un quadrilatère de différentes manières, et que le centre de gravité du pentagone se trouve sur la ligne reliant le centre de gravité du quadrilatère et du triangle. Donc, pour trouver le centroïde d'un pentagone convexe, choisissez deux sommets non adjacents, tracez une ligne les reliant, calculez les centroïdes du triangle et du quadrilatère et tracez la ligne les reliant. Choisissez ensuite deux sommets non adjacents différents et répétez la procédure. Le centre de gravité se trouve à l'intersection des deux lignes passant par les centres de gravité. Les pentagones non convexes sont traités de la même manière, mais quelques précautions sont nécessaires pour éviter d'obtenir un triangle ou un quadrilatère avec un sommet à l'intérieur.

La même technique s'applique aux hexagones, mais vous les décomposez en deux quadrilatères.

Ceci, combiné à une méthode générale de division pour régner, devrait être suffisant pour traiter n'importe quel polygone de taille.


CEG2704

- l'hypothèse que l'approche de stockage optimale pour les données de localisation n'est pas optimale pour les données d'attributs
- données de localisation stockées dans un fichier standard présenté par la structure de données topologiques vectorielles dans une base de données régionale

- permet la récupération d'un sous-ensemble d'attributs dans une table (conserve toutes les entités)

- combine les entités de deux tables sans duplication

(c'est un nom commun utilisé uniquement en dehors du lieu, du groupe ou de la communauté linguistique en question)]

- écarts entre couches modèles (incompatibilités entre niveaux)

- plusieurs modifications à mettre à jour/éditer

- transformations d'ATTRIBUTS (par exemple, opérations de base de données : sélection, jointure, union, ajout d'attributs, etc.)

- transformations pour DISPLAY (souvent des modifications à la volée, par exemple le basculement de couche)

- regroupement/fusion (moins de classes signifie souvent une image plus claire)
- sélection de certaines données

SITUATION (quand généralise-t-on) :
la généralisation se fait principalement lors de l'évaluation cartographique, en évaluant :
- conditions géométriques (ex : congestion, incohérence)
- mesures spatiales et holistiques (par exemple, mesures de densité, de longueur, de forme/distance, etc.)
- contrôle des transformations

longueur de ligne = (gradient*stepsize)+constant
la dimension fractale est (1-gradient)

POINT - de simples tampons de pont créent un cercle ou un rayon « x » à partir d'un point
- la dissolution des contours crée des "zones tampons"

LIGNE - les tampons linéaires créent des zones ou des zones autour des entités linéaires, celles-ci ont tendance à avoir une composante directionnelle implicite (par exemple, 1 km de chaque côté d'une route)

- les distances sont décalées à l'intérieur des segments de ligne

- opération spatiale SIG la plus importante
- permet de fusionner plusieurs ensembles de données en une seule couche thématique
- permet d'étudier les relations spatiales entre des données géographiquement coïncidentes mais différemment attribuées
- l'opération de superposition modifie les attributs, ils sont joints et dans certains cas dupliqués

- le buffering est facile à faire en raster mais cela peut nécessiter une étape supplémentaire afin d'obtenir une classe particulière qui définit le buffer
- de nombreuses couches de données raster sont extrêmement complexes en raison de leur nature continue
- généralement fait avec des données de terrain
- la valeur détermine le résultat et non l'emplacement

- il existe plusieurs types de quartier (par exemple, la cellule 3x3 est la plus courante)
- calcule la moyenne, l'écart-type, la somme, le max, le min, la plage, le mode, etc.)

seuils de différenciation :
- 0,2 mm est le seuil au-dessus duquel deux lignes peuvent être conçues comme des lignes séparées
- les formes/styles de pointe utilisés doivent être suffisamment différents pour qu'ils puissent être observés en toute confiance comme différents
- la différence de taille entre les points gradués doit être suffisamment différente pour être considérée comme différente
- la graduation en nuances doit avoir des intervalles suffisamment grands pour être considérée comme différente

SÉLECTIF
- couleur et densité (les couleurs d'un même spectre dans l'ordre des dégradés sont généralement plus faciles à voir et à percevoir par l'œil humain)
- orientation si sélective (dissociative)
- la couleur est sélective mais les canaux présentent un ordre

COMMANDÉ
- la valeur est définitivement commandée
- la densité et la texture sont ordonnées

considérations :
- ordre
- classification
- complétude
- représentant
- correspondance avec les symboles de la carte
- légende de la carte naturelle
- position/impact/dominance/taille
- interactif
- dynamique

- n'a pas de tiques (par exemple Arial)

- où les tiques ont une épaisseur similaire à la lettre

- le contraste entre le lettrage et le fond

- éviter les proportions et les visages de lettres laides

- plus élevé entre les cours qu'avec un cours

- le lettrage au sein d'une classe doit être le même

- évitez de nombreux caractères typographiques, utilisez plutôt une variante

- les valeurs sont standardisées pour les obtenir toutes dans la même unité/échelle de mesure (fait en prenant toute la plage dynamique des variables et en les rééchelonnant de manière linéaire à une plage de valeurs entre 0 et 1, 0=minimum, 1=maximum )

- les valeurs sont ensuite pondérées en fonction de leur importance, car les ensembles de données ne sont pas tous égaux (les ensembles les plus importants se voient attribuer des poids plus élevés, ce qui nous permet d'adapter des solutions spécifiques à différents types de parties prenantes)

- la donnée standardisée est multipliée par son poids pour donner un score standardisé de poids
- ces résultats sont additionnés pour produire la carte d'adéquation finale
- la carte finale dans une approche de sommation linéaire pondérée a une valeur comprise entre 0 et 1

(les cellules proches de 0 sont très inadaptées au problème étudié, les valeurs proches de 1 ont une adéquation élevée)

- GLOBAL (utiliser tous les points connus pour dériver les inconnues)
- LOCAL (utiliser un sous-ensemble limité de points connus pour dériver des inconnues)
- LINÉAIRE (basé sur une ligne droite)
- NON LINÉAIRE (ajustements basés sur des courbes)
- EXACT (les valeurs d'origine restent inchangées)
- INEXACT (original values are modified)

- trend is modelled as a quadratic function of location and the attribute of interest

calculated using the FINITE DIFFERENCE APPROACH
1. add together all the sets of cells values in the east (C,F,I) and minus the sum by the sum of the west (A,D,G). [F,H,D,B are all 2n as they are relatively closer[1.4x closer] to the cell of interest, adjacent not diagonal]

2. the total of this is divided by 8 x the distance (resolution, 'd' on the img) of the DEM (e.g. if the spatial resolution was 50m, it would be 4x50)

3. the result of this calculations is the E→W rise-run

4. repeat this process with the S→N

5. to get the overall rise-run you then square the EW-rise-run, add that to the square of the SN-rise-run and then square root the answer (giving the gradient in % terms) [equation: sqrt(EW^2+SN^2)

6. to convert into degrees gradient, you take the arc tangent of the overall rise-run and multiply by the value of Pi in terms of degrees (57.29578, which is 1 radian in degrees)

[equation for this is tan^-1(rise-run)*57.39578]

- darker values correspond to values with a gradient closer to 180˚

1. plug in the SN-rise-run and the negation of the EW-rise-run (i.e. if there EW value is +ve you make it -ve and if its -ve you make it +ve, this is done because you are changing the direction of the coordinate system)

2. multiply the result in the ( ) by the 1 radian value to give A

- if A<0, you subtract A from 90 to give the aspect angle relative to 0 being due north
- if A>90, you subtract A from 360 and add 90 to the result
- any other values, you subtract A from 90

PROFILE CURVATURE
- concave curvature = positive
- is there a dip in topography

- this is done by filling the sink, saying the water will flow to the nearest cell that has the next lowest value
- if there are multiple surrounding cells with the same value, you would fill the cell to the same height value and choose one of the adjacent cells at random

- after, you can go back and make judgement on how robust the local drainage system direction is based on how much the sink had to be filled, which can help give estimate of flow directions
- where you fill sinks can be mapped and you can work out for each cell, how many other cells flow into it
- the result is the development of an image of the hydrological pathways based on the LDD network

WETNESS INDEX
- the wetness index is used a lot in hydrology, it indicates relative propensity of a cell to retain water
- you have a higher probability of water being retained on the surface or in the soil when you have a high accumulation zone but the individual cell has a low gradient
- when you have a small accumulation for a steep cell, you assume you'll have a lower wetness index

CONCEPTUAL VIEW
- requirements and database design
- what are the risks etc

DETAILED VIEW
- convert to specific GIS database and application software
- look into the project to know exactly what needs to be done at each stage

- allows identification of stages from data requirements and through analysis and output
- avoids GIS terminology and technical detail

- find only 1 route between A and B
- route derived by minimising sum of a weight between A and B (e.g. distance, time etc.)

- compare origin-destination matrices for two or more transport modes
- allows recognition of spatial differences/similarities

SERVICE AREA/CATCHMENT CALCULATION
- how much of a network can be accessed from a location or set of locations within a particular time or distance
- results in a catchment area being derived (polygons showing spatial extent)
- useful for looking at redundant resources, ability to respond to events

CLOSEST FACILITY
- find the closest centre from a selection
- similar to finding a multiple least cost paths and then choosing minimal
- useful for seeing if demand (point) can be accommodated
- path derived by minimising sum of a weight between A and B

VEHICLE ROUTING
- derive a set of optimal delivery routes
- can involve multiple distribution points, multiple delivery points
- can involve multiple vehicles with varying capacity
- hence an allocation problem - allocate optimally vehicles from multiple distribution points to multiple delivery points


ArcGIS Online

ArcGIS Online provides two ways to use their geoprocessing tools through the website interface. The analysis tools are not for use in public apps and they consume ArcGIS Online credits.

One way is through the Map Viewer. There is a Perform Analysis button that will let you browse through the available tools. There is also a button among the icons under each layer name in the table of contents of the map, if the layer is one that can be analyzed. This is a good option for more experienced GIS users who know how to add layers to a map and choose the appropriate analysis tools for their objectives.



Figure 4. The buttons to perform analysis on a layer in ArcGIS Online.

The other option is to create a web app to which you, the app designer, add specific tools to make things easier for your audience, the app users.



Figure 5. The analysis widget in ArcGIS Web AppBuilder allows you to give users access only to the tools they need for a more simplified app.


1 réponse 1

The intersection of $n$ disks is a convex shape bounded by circular arcs that meet at vertices where two or more circles intersect.

The first thing to do is to identify these vertices and the arcs that connect them to each other. If no three circles are coincident,$^1$ then this isn't very hard: Consider every pair of circles find their two intersection points, which form two candidate vertices if a candidate vertex is inside all other circles, then it is indeed a vertex of the intersection. This gives you a set of vertices.$^2$ Each vertex lies on exactly two circles using this connectivity, you can sort them in consistent order around the intersection shape.

Now you can decompose the intersection shape into a number of pieces: (i) the polygon (shaded blue above) that connects the vertices, and (ii) a collection of circular segments (shaded red), one for each arc of the shape. You can find the areas and centroids of each piece using closed-form formulas (polygon, circular segment). The centroid of the full shape is then just the weighted average of the centroids of each of the pieces, weighted by area.

$^1$If multiple circles are coincident on a vertex, then doing pairwise tests may not always get you a consistent set of vertices, especially if you're using floating-point arithmetic. You might be able to get around this to some extent by fudging the inside-circle test with some epsilon bias, but a truly robust solution would have to come from a computational geometry expert.

$^2$It's possible that the set of vertices turns out to be empty. Then there are two possibilities: either the intersection is equal to one of the circles, or the intersection is empty. It is easy to distinguish between these two cases by checking if there exists a circle that is entirely inside all the others.


Voir la vidéo: 2019. aasta lõpueksami ülesanne 7. ruumilise kujundi ülesanne koos lahendusega (Octobre 2021).