Créer une carte de flux radial montrant des lignes courbes sur de courtes distances (20 km) à l'aide d'ArcGIS for Desktop?

10

Esri a fourni des instructions sur la façon de créer une carte d'écoulement radial, mais je pense que les lignes courbes ne seront produites que sur une longue distance, comme la moitié du globe.

Pour les courtes distances (20 km), une ligne géodésique sera probablement encore assez droite. Pour continuer à utiliser ce processus pour une carte d'écoulement radial sur de courtes distances, j'ai pensé que nous pourrions modifier les paramètres de référence afin que la terre soit plus petite, vous obtiendrez donc une belle ligne courbe sur une petite distance. Quelqu'un sait-il comment faire ça?

Sinon, existe-t-il un autre outil dans ArcGIS Desktop 10.0 à utiliser pour créer des lignes courbes? J'ai 90 points que je dois connecter jusqu'à 54 points, ce serait bien de l'automatiser plutôt que d'avoir à tracer les lignes manuellement.

ndthl
la source
2
Votre question a été posée sur gis.stackexchange.com/questions/5204/… dans un contexte non ArcGIS. Vous trouverez peut-être les réponses intéressantes.
whuber
1
J'avais une idée différente de celle de Whuber, mais la sienne pourrait être meilleure compte tenu de vos objectifs. J'ai simplement pensé que l'on pourrait ajouter une quantité arbitraire de courbure dans les arcs, similaire à ce qui est fait dans les diagrammes d'arc . On pourrait alors changer la direction de l'apex en fonction de la direction d'écoulement. Essentiellement, le flux de travail serait le même pour les grands cercles, diviser la chaîne de ligne en de nombreux segments droits plus petits. Le virage arbitraire pourrait cependant s'adapter à toute projection locale.
Andy W
@AndyW, votre suggestion me semble plus utile (bien que ce ne soit pas une offense pour Whuber, qui fait d'excellentes suggestions pour plus d'utilisateurs capaple). Je ne suis pas en mesure de comprendre ou de mettre en œuvre la suggestion de whuber. Je recherche une simple solution «prête à l'emploi», de préférence une extension ArcGIS. J'ai regardé des diagrammes d'arc, il y a des exemples étonnants là-bas. Je n'y vois pas de solution pour une simple carte statique montrant une relation plusieurs à plusieurs (mais généralement une à plusieurs) entre, dans mon cas, les sites d'expulsion et les sites de réinstallation.
ndthl

Réponses:

5

Voici une illustration du flux de travail que j'ai mentionné dans le commentaire ci-dessus, et bien que je ne connaisse aucune routine simple pré-programmée pour ce faire, j'ai joint une feuille de calcul Excel selon laquelle on peut importer un ensemble de coordonnées origine-destination et la feuille crée ensuite un ensemble ou des coordonnées de ligne circulaire (feuille de calcul ici ). Il a des formules configurées, il est donc assez facile d'importer de nouvelles coordonnées OD et d'étendre les formules pour remplir les résultats, mais je passerai en revue la logique du processus plus explicitement cependant, et d'autres peuvent donner des conseils sur la façon de l'écrire entièrement dans ArcMap (ou autre).

En bref, je pense que cela est raisonnable pour visualiser les données OD principalement pour la même raison que les grandes lignes de cercle sont populaires, elles fournissent une distinction visuelle plus entre les lignes. L'approche que je suggère a également un avantage sur les grands cercles, en ce sens que la direction du flux est codée dans le demi-cercle. Dans cette autre réponse sur le site, je donne une vue d'ensemble plus générale des techniques de visualisation pour la cartographie des flux, et bon nombre de ces mêmes techniques peuvent être appliquées en plus de créer des arcs comme celui-ci.

Donc, pour détailler comment on dessine des lignes comme je le suggère, essentiellement, je n'ai que 3 étapes pour le processus, 1) trouver l'orientation du flux, 2) trouver le point médian et la distance du flux, 3) traiter le au milieu comme centre d'un cercle, puis dessinez l'arc (un demi-cercle de l'origine à la destination). Pour être clair, je commence avec une paire de coordonnées d'origine projetée (x1,y1)et de coordonnées de destination (x2,y2).

Donc 1) trouver l'orientation du flux. On utilise d'abord la formule ATAN((y2 - y1)/(x2 - x1)), puis en fonction de la direction attribue une orientation selon que la direction est vers l'est ou vers l'ouest. Un exemple de pseudocode ci-dessous (j'attribue des points OD qui sont tous les deux aux mêmes coordonnées une orientation de zéro). Ici, le varaible or_radest censé être un raccourci pour «orientation en radians» et pifait référence à la valeur de pi.

#tan_or = ATAN((y2 - y1)/(x2 - x1)).
Do If x2 = x1 and y1 <= y2. 
    compute or_rad = 0.
Else if x2 = x1 and y1 > y2.
    compute or_rad = pi.
Else if x1 > x2.
    compute or_rad = 270/180*pi - #tan_or.
Else if x1 < x2.
    compute or_rad = 90/180*pi - #tan_or.
End If.

2) Trouvez le point médian et la distance du flux. C'est très simple, pour un seul ensemble de coordonnées appariées, le point médian en coordonnées (x, y) sera (x1+x2/2,y1+y2/2). Permet donc de définir mid_x = (x1 + x2)/2et mid_y = (y1 + y2)/2pour la partie suivante. La distance utilisant le théorème de Pythagore est simple distance = SQRT((x1 - x2)^2 + (y1 - y2)^2).

3) Puis, compte tenu de ces informations, tracez le cercle donné sur un nombre de degrés prédéfini et un rayon (qui est la moitié de la distance entre les deux points). Par exemple, disons que nous commençons avec un ensemble de paires de coordonnées OD à (1,3):(3,2). L'orientation en degrés sera ~ 116 (et en radians ~ 2), le milieu x, y sera (2,2.5)et la distance entre les deux points sera d'environ 2,2.

Disons donc que nous voulons dessiner le demi-cercle autour de 180 degrés. En pseduo-code (en utilisant les variables que j'ai déjà définies), les itérations ressembleront à quelque chose;

for i in (0 to 180 degrees) 
    rad_i = i/180*pi. /*converts i from degrees to radians
    step_or = pi - rad_i /*for clarity, this makes the circle go from origin to destination
    radius = distance/2
    Arc_X = mid_x + sin(or_rad - step_or)*radius.
    Arc_Y = mid_y + cos(or_rad - step_or)*radius.

Inséré ci-dessous est un diagramme des coordonnées originales que j'ai spécifiées ci-dessus. Commencer à zéro et se terminer à 180 garantit que les points d'être et de fin sont aux mêmes emplacements. Ajuster la boucle pour avoir plus d'étapes (arc plus détaillé) ou moins (arc moins détaillé) devrait être assez évident.

entrez la description de l'image ici

À noter, d'autres discussions sur le site discutent de la création de lignes à partir de données ponctuelles (voir la balise de ). J'ai un exemple dans la feuille de calcul xls ci-jointe, et j'ai utilisé l' outil arcmap ET Geo-wizards pour convertir les coordonnées de la feuille de calcul en lignes de fichier de formes. Les arcs dans les données d'exemple dans la feuille de calcul ci-jointe ressemblent ensuite à ceci;

entrez la description de l'image ici

Une mise à jour simple mais potentiellement utile de cette configuration actuelle serait de mettre à jour les formules pour permettre une quantité prédéfinie d'excentricité en arc, même si je ne savais pas trop comment faire cela dans mes quelques tentatives jusqu'à présent. J'attends avec impatience les suggestions et les commentaires de la communauté ici sur mes conseils.

Andy W
la source
1
c'est une réponse vraiment fantastique! bien que je ne comprenne pas comment coder, je pense que j'ai quelque chose de bien à faire que je peux discuter avec un ami. je connais l'outil et geowizards pour relier deux points avec une ligne droite - je ne m'intéresse qu'aux lignes courbes à des fins cartographiques.
ndthl