Jak obliczyć zniekształcenie w projekcji prostokątnej?

28

Próbuję obliczyć zniekształcenie, aby móc zniekształcić nakładający się tekst i formularze, aby dokładnie pasować do obrazu rzutu prostokątnego.

Jak zatem obliczyć zniekształcenie na danej szerokości geograficznej na rzucie prostokątnym 1: 45,000,000 (powiedzmy, 2000 pikseli szerokości x 1000 pikseli wysokości)?

Próbowałem znaleźć ten post i jego linki, ale bezskutecznie: Jak stworzyć dokładną wskaźnik Tissot?

Nie jestem profesjonalistą, tylko bardzo zainteresowanym amatorem, więc proszę, osłup mi to!

Wielkie dzięki!


Dziękujemy za szybką odpowiedź! Oto długa historia; Mam nadzieję, że to jest jaśniejsze.

Wizualizuję / mapuję dane za pomocą języka programowania Processing i chciałbym, aby dane mapowane 2D (czcionki i koła o różnych rozmiarach) były wyświetlane bez zniekształceń po zawinięciu w kulę 3D. Dane są odwzorowywane przy użyciu równokątnych x, y i map, których chcę użyć, ponieważ tła są tymi wszystkimi projekcjami, więc zakładam, że chcę „dopasować” to zniekształcenie (np. Obliczając zniekształcenie szerokości geograficznej za pomocą równań Tissot?). Używając języka programowania, mogę precyzyjnie zniekształcać zarówno tekst, jak i kółka. Myślę, że wszystko czego potrzebuję to równania, aby zrobić to poprawnie.

Oto oryginalna mapa danych 2D:

wprowadź opis zdjęcia tutaj

Po zapakowaniu wygląda na zniekształcony:

wprowadź opis zdjęcia tutaj

10 000 $ Pytanie: Jak mogę sprawić, aby obraz 2D wyglądał na niezniekształcony po owinięciu w kulę 3D?

Dla porównania, oto to samo pytanie zadane inaczej na forum przetwarzania.

Dzięki jeszcze raz!


Jeśli dobrze cię rozumiem, nie jestem pewien, czy chcę zmienić projekt na rzut ortograficzny. Chcę, aby moja mapa danych 2D zawijała się do modelu kuli 3D, z którym można wchodzić w interakcje (tj. Obracać).

Korzystam z programu do modelowania 3D (Cinema 4D), aby owinąć kulę obrazem „Blue Marble” o wielkości 2 MB (rzut prostokątny) z NASA.

Po owinięciu wydaje się niezniekształcony ze wszystkich półkul (nie tylko jednej półkuli, jak byłaby rzut ortograficzny?), Patrz: nadal z modelu 3D powyżej. (Przypuszczam, że program do modelowania wykonuje dla mnie rzut ortogonalny podczas obracania obiektu.) Dlatego myślę, że jeśli zniekształcę mapę danych 2D w podobny sposób, również ona będzie wyglądała na zniekształconą na sferze 3D. Oto zdjęcie, które zrobiłem za pomocą równania, które przybliża zniekształcenie prostokątne. Zauważysz, że elipsy w kształcie jajka z obrazu 2D wyglądają jak koło po owinięciu w kulę 3D. Podobnie, elipsy Tissot pojawiają się również jako koła na sferze 3D.

Wskaźnik Tissot ze zniekształconymi okręgami Zniekształcone okręgi owinięte w kulę 3D

Właśnie dlatego patrzyłem na równania Tissot ... aby dokładniej ustalić zniekształcenie rzutu prostokątnego na różnych szerokościach geograficznych, aby odpowiednio zniekształcić moją nakładkę.

Mam nadzieję, że to wszystko ma sens.

Być może masz rację, że powinienem użyć programu GIS. Właśnie pobrałem Cartographica i zobaczę, czy dam radę. Wszelkie sugestie dotyczące oprogramowania Mac dla nowicjusza podejmującego się tego zadania?

Dzięki jeszcze raz.

NCashew
źródło
1
Czy naprawdę masz na myśli obliczanie zniekształcenia, czy naprawdę chcesz wiedzieć, jak obliczyć samą projekcję? Być może możesz udostępnić obraz w Internecie, aby zilustrować, co próbujesz osiągnąć. Twoje użycie „dopasowania” sugeruje, że chcesz określić, jak przekształcić jeden obraz w drugi, wskazując, że musisz określić, od czego zaczynasz, a także, co chcesz skończyć.
whuber
1
Rozumiemy, że trudno jest opisać, co chcesz zrobić, nie znając żargonu, ale wygląda na to, że próbujesz opisać proces, a nie wynik. Spróbuj zacząć od problemu, który chcesz rozwiązać, a następnie wyniki, które chcesz, a my postaramy się uzupełnić luki :)
MerseyViking
Z technicznego punktu widzenia: chcesz zmienić projekt z rzutu prostokątnego na rzut ortograficzny („świat z kosmosu”). Jakiego oprogramowania możesz używać? Jeśli masz oprogramowanie GIS lub chcesz kodować na podstawie biblioteki projekcji, praca jest w zasadzie dla Ciebie wykonana. W przeciwnym razie musisz zaimplementować równania do odznaczania rzutu prostopadłego (łatwe) i rzutu rzutu ortograficznego (niezbyt trudne, ale wymaga pewnych umiejętności w zakresie kodowania procedur numerycznych).
whuber
1
Widziałem ten post i staram się zrobić dokładnie to samo. Chcę narysować okręgi 2D, które prawidłowo zniekształcają się podczas rzutowania na kulę 3D. Zastanawiałem się, czy chętnie podzielisz się algorytmem zastosowanym do zniekształcania okręgów 2D? Naprawdę powinien to być komentarz, a nie odpowiedź, ale napisałem to w niewłaściwym miejscu. Przepraszam.
HankTurbo
Powinieneś narysować swoje dane w przestrzeni 3D, a następnie rzutować je z powrotem do kuli.
AngelLeliel,

Odpowiedzi:

5

Jak sprawić, by obraz 2D wyglądał na niezniekształcony po owinięciu w sferę 3D?

Współrzędne obrazu to szerokość i długość geograficzna, więc ty też

(a) Odprojektuj go i ponownie rzut za pomocą ortograficznej lub pionowej projekcji z boku (to znaczy projekcji, które wyglądają jak świat z kosmosu) lub

(b) Teksturuj mapę na model 3D kuli za pomocą lat-lon jako tekstury koordynującej i wyświetlaj tę kulę za pomocą urządzenia do renderowania grafiki 3D.

Większość GIS robi (a) rutynowo. Aby zilustrować (b), oto zestaw obrazów pochodzących z „płaskiej” mapy w pytaniu pobranym z punktu widzenia krążącego po kuli odwzorowanej na teksturę:

Świat z kosmosu

(Jeśli przyjrzysz się uważnie prawemu obrazowi, zobaczysz wybitny południk przez Ocean Spokojny: jest to „szew” utworzony przez owinięcie razem lewej i prawej strony mapy.)

Podstawowym poleceniem Mathematica do wytworzenia jednego z nich jest

SphericalPlot3D[1, {a, 0, \[Pi]}, {b, 0, 2 \[Pi]}, Mesh -> None, 
 PlotStyle -> {Texture[i]}, TextureCoordinateFunction -> ({#5, -#4} &), 
 Lighting -> {{"Ambient", White}}, 
 Boxed -> False, Axes -> False, Background -> Black]

Zmniejsza to pierwotny problem (rysowania „map danych” na kuli) do generowania mapy, która prawidłowo pokazuje koła. Najlepszą do tego projekcją jest Stereograficzna, ponieważ rzutuje ona wszystkie okręgi na kuli - bez względu na ich rozmiar - na okręgi na mapie. Tak więc jedną z procedur prawidłowego rysowania dużych kół w rzucie prostokąta , jak pokazano w pytaniu, jest utworzenie ich w rzucie stereograficznym, a następnie odsunięcie ich na współrzędne geograficzne (łac., Lon.). Użycie (lon, lat) jako (x, y) współrzędnych kartezjańskich do utworzenia mapy jest równoznaczne z rzutem w kształcie prostokąta i dlatego nadaje się do odwzorowywania tekstur na kuli lub do zastosowania rzutu ortograficznego.


Zauważ, że wskaźniki Tissot nie są odpowiednie jako rozwiązanie: reprezentują jedynie lokalne zniekształcenia nieskończenie małych okręgów. Kręgi na tyle duże, że można je zobaczyć w skali globalnej, nie będą już nawet wyświetlane w większości projekcji w kręgu: w pytaniu obserwuj ich rozlany wygląd na mapie. Właśnie dlatego granie w gry z wyświetlaniem, jak pokazano tutaj, jest niezbędne dla dobrego rozwiązania.

Whuber
źródło
Dzięki za bardzo pouczający post! Przyjmuję (b) jako swoje podejście i mam pod ręką poprawnie wygenerowaną mapę prostokątną, ale dostaję brzydkich zniekształceń biegunów podczas mapowania mapy na kulę 3D. Czy byłbyś bardzo uprzejmy pomóc? gis.stackexchange.com/questions/245315/…
Sibbs Gambling
2

Zakładając, że rysowane kształty pokrywają niewielką część kuli, powinieneś być w stanie to zrobić, skalując szerokość o 1 / cos (lat) i pozostawiając wysokość w spokoju.

Im większy kształt i im bardziej zbliżasz się do biegunów, tym gorzej będzie to działać.

smithkm
źródło
Czy możesz wyjaśnić, dlaczego to zadziała? Wygląda na to, że dramatycznie zawiódłby nawet w małych częściach kuli w pobliżu krawędzi jej renderowania na przykładowych obrazach.
whuber
Dziękuję za edycję; Odpowiednio usunąłem głos negatywny, ponieważ twoja odpowiedź wydaje mi się poprawna i może być przydatna dla kogoś w przyszłości. Analizując to pytanie, wydaje się mało prawdopodobne, aby ktoś zawijał takie małe kształty wokół kuli - a kiedy to zrobią, będą musieli poradzić sobie z biegunami i wszędzie indziej, jak sądzę.
whuber
0

Nie mogę wymyślić, jak dodać komentarz, więc umieszczę to w rozwiązaniu i pozwolę moderatorom starać się zrozumieć, dlaczego nie mogę komentować.

Moje pierwsze wrażenie po przeczytaniu pytania brzmiało: „Dlaczego nie projektujesz swoich kół w projekcji konformalnej, takiej jak Mercator”. Możesz rzutować tę mapę na odwzorowanie Mercatora i zobaczyć zniekształcenie okręgu i tekstu, naprawić wszystko, aby wyglądać ładnie, a kiedy rzutujesz je na kulę ziemską, kształty powinny pozostać poprawne (to jest definicja odwzorowania konformalnego).

brenth
źródło
2
To brzmi jak odpowiedź, więc zostawię to. Ale jest to nieprawidłowe, ponieważ opiera się na nieporozumieniu: projekcje konformalne nie rzutują wszystkich okręgów na okręgi. Robią to tylko nieskończenie krótko. Różnica jest ogromna: rozważ na przykład, co Merkator robi na każdym okręgu, który okrąża oś Ziemi. Nie może zamapować go jako okręgu - musi gdzieś go złamać. Aby uzyskać więcej informacji na ten temat, przeszukaj naszą witrynę w poszukiwaniu Tissot .
whuber
1
„Robią to tylko nieskończenie”. -> „Robią to tylko dla nieskończenie małych”.
Martin F
0

Zobacz, twoja pierwsza mapa 2D nie ma narysowanych obiektów geograficznych. Dodaj je do tej mapy (powiedzmy kontur Afryki) i zastosuj zniekształcenie, o którym myślisz, do wszystkiego naraz. Geografia również zostanie zmodyfikowana, a kiedy umieścisz ją na kuli, będzie to źle. Dlatego uważam, że ten pomysł zastosowania pewnego zniekształcenia nie zadziałałby.

Można uzyskać w 2D, rysując grafikę na małych mapach 2D, które mają ograniczony obszar i akceptowalne zniekształcenie. Możesz wyciąć mapę 2D na kafelki, a dla każdego użycia kafelka jego własna „najlepsza” projekcja.

Z drugiej strony łatwo jest tworzyć punkty na okręgu geodezyjnym o danym promieniu na mapie 2D. W tym celu musisz znaleźć funkcję, która oblicza długość / szerokość punktu w danej odległości i azymut od innego punktu (wyszukaj „bezpośredni problem Vincenty”). Gdy to osiągniesz, możesz wygenerować wiązkę równo odległych punktów w danej odległości od punktu, zmieniając azymut z 0 na 360. Wykonanie wielokąta z tych punktów w 2D wymaga więcej pracy, gdy okrąg geodezyjny zawiera biegun lub przecina się lewa lub prawa granica mapy. Sprawdź, jak mogą wyglądać kręgi geodezyjne na płaskiej mapie tutaj .

0kcats
źródło