Oto ilustracja przepływu pracy, o którym wspomniałem w powyższym komentarzu i chociaż nie znam żadnej prostej rutyny w puszkach, aby to zrobić, załączyłem arkusz kalkulacyjny programu Excel, za pomocą którego można importować zestaw współrzędnych źródłowych i docelowych arkusz tworzy następnie współrzędne linii lub linii ( tutaj arkusz kalkulacyjny ). Ma skonfigurowane formuły, więc dość łatwo jest zaimportować nowe współrzędne OD i rozszerzyć formuły, aby wypełnić wyniki, ale ja przejdę logikę tego procesu bardziej jednoznacznie, a inni mogą doradzić, jak napisać skrypt w całości ArcMap (lub cokolwiek innego).
Krótko mówiąc, myślę, że jest to uzasadnione do wizualizacji danych OD głównie z tego samego powodu, dla którego popularne są wielkie linie okręgu, które zapewniają bardziej wizualne rozróżnienie między liniami. Podejście, które sugeruję, ma również jedną zaletę w stosunku do wielkich linii okręgu, ponieważ kierunek przepływu jest zakodowany w półokręgu. W tej innej odpowiedzi na stronie przedstawiam bardziej ogólny przegląd technik wizualizacji do mapowania przepływu, a wiele z tych samych technik można zastosować oprócz tworzenia takich łuków.
Tak więc, aby szczegółowo opisać, jak rysuje się linie, tak jak sugeruję, zasadniczo mam tylko 3 kroki dla tego procesu, 1) znajduję orientację przepływu, 2) znajduję punkt środkowy i odległość przepływu, 3) traktuję punkt środkowy jako środek okręgu, a następnie narysuj łuk (półkole od początku do miejsca docelowego). Dla jasności zaczynam od ustawionej pary współrzędnych rzutowania (x1,y1)
i współrzędnych docelowych (x2,y2)
.
Więc 1) znajdź orientację przepływu. Najpierw stosuje się wzór, ATAN((y2 - y1)/(x2 - x1))
a następnie w zależności od kierunku przypisuje orientację w zależności od tego, czy kierunek jest wschodni czy zachodni. Przykładowy pseudokod poniżej (przypisuję punkty OD, które mają te same współrzędne, orientację równą zero). W tym przypadku zmienna or_rad
ma być skrótem dla „orientacji w radianach” i pi
odnosi się do wartości 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) Znajdź punkt środkowy i odległość przepływu. Jest to bardzo proste, dla tylko jednego zestawu sparowanych współrzędnych środkowym punktem współrzędnych (x, y) będzie (x1+x2/2,y1+y2/2)
. Zdefiniujmy więc mid_x = (x1 + x2)/2
i mid_y = (y1 + y2)/2
na następną część. Odległość przy użyciu pythagoreum theorum jest po prostu distance = SQRT((x1 - x2)^2 + (y1 - y2)^2)
.
3) Następnie, biorąc pod uwagę te informacje, narysuj dany okrąg na określonej liczbie stopni i promieniu (który jest połową odległości między dwoma punktami). Załóżmy na przykład, że zaczynamy od zestawu par współrzędnych OD w (1,3):(3,2)
. Orientacja w stopniach będzie wynosić ~ 116 (w radianach ~ 2), środkowy punkt x, y będzie, (2,2.5)
a odległość między dwoma punktami wynosi około 2,2.
Powiedzmy, że chcemy narysować półkole wokół 180 stopni. W pseduo-code (używając zmiennych, które już zdefiniowałem) iteracje będą wyglądały jak;
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.
Wstawiono poniżej schemat oryginalnych współrzędnych, które określiłem powyżej. Zaczynając od zera, a kończąc na 180, upewnia się, że istota i punkty końcowe znajdują się w tych samych lokalizacjach. Dostosowanie pętli w celu uzyskania większej liczby kroków (bardziej szczegółowy łuk) lub mniejszej (mniej szczegółowy łuk) powinno być dość oczywiste.
Należy zauważyć, że inne wątki na stronie omawiają tworzenie linii z danych punktów (patrz znacznik tworzenia polilinii ). Mam przykład w załączonym arkuszu kalkulacyjnym xls i skorzystałem z narzędzia arcmap ET Geo- wizards do konwersji współrzędnych arkusza kalkulacyjnego na linie pliku kształtu. Łuki w przykładowych danych w dołączonym arkuszu kalkulacyjnym wyglądają następująco;
Jedną prostą, ale potencjalnie użyteczną aktualizacją tego obecnego zestawu byłoby zaktualizowanie formuł, aby umożliwić z góry określoną ekscentryczność w łuku, chociaż do tej pory nie byłem pewien, jak to zrobić. Czekam na sugestie i opinie od społeczności tutaj na mojej porady.