คนเราคำนวณการบิดเบี้ยวบน Equirectangular Projection อย่างไร


28

ฉันพยายามคำนวณความผิดเพี้ยนเพื่อให้สามารถบิดเบือนข้อความและรูปแบบการซ้อนทับเพื่อให้ตรงกับภาพของการฉายภาพในแนวตรง

ดังนั้นใครจะคำนวณความผิดเพี้ยนที่ละติจูดที่กำหนดในการฉายภาพทางไกลแบบ 1: 45,000,000 (เช่นความกว้าง 2,000 พิกเซล x สูง 1,000 พิกเซล)

ฉันพยายามคิดโพสต์นี้และลิงก์ไปยังประโยชน์: วิธีการสร้าง Tissot Indicatrix ที่ถูกต้อง?

ฉันไม่ใช่มืออาชีพเพียงมือสมัครเล่นที่สนใจมากดังนั้นโปรดทิ้งฉันไว้!

ขอบคุณมาก!


ขอบคุณสำหรับการตอบกลับที่รวดเร็ว! นี่คือเรื่องราวที่ยาวนาน ฉันหวังว่ามันชัดเจน

ฉันกำลังแสดงข้อมูล / การทำแผนที่โดยใช้ภาษาการเขียนโปรแกรมการประมวลผลและต้องการให้ข้อมูลที่แมป 2D (แบบอักษรและวงกลมขนาดต่างกัน) ปรากฏว่าไม่มีการเรียงลำดับเมื่ออยู่ในโลก 3 มิติ ข้อมูลถูกแมปโดยใช้ equirectangular x, y's และแผนที่ที่ฉันต้องการใช้เป็นแบ็คกราวด์เป็นเส้นโครงทั้งหมดดังนั้นฉันจึงสมมติว่าฉันต้องการ "จับคู่" การบิดเบือนนี้ (เช่นโดยการคำนวณการบิดเบือนผ่านละติจูดโดยใช้สมการ Tissot?) การใช้ภาษาโปรแกรมฉันสามารถบิดเบือนทั้งข้อความและวงกลมได้อย่างแม่นยำ ฉันคิดว่าสิ่งที่ฉันต้องการคือสมการที่จะทำอย่างถูกต้อง

นี่คือแผนที่ข้อมูล 2D ดั้งเดิม:

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อหุ้มแล้วมันจะบิดเบี้ยวแบบนี้:

ป้อนคำอธิบายรูปภาพที่นี่

คำถาม $ 10,000: ฉันจะทำให้ภาพ 2D ของฉันดูไม่แตกต่างเมื่อพันกับทรงกลม 3 มิติได้อย่างไร

สำหรับการอ้างอิงนี่เป็นคำถามเดียวกันที่ถามต่างกันในฟอรัมการประมวลผล

ขอบคุณอีกครั้ง!


ถ้าฉันเข้าใจคุณอย่างถูกต้องฉันไม่แน่ใจว่าฉันต้องการที่จะปฏิเสธการฉายภาพ orthographic ฉันต้องการให้ data data 2D ของฉันห่อเป็นโมเดลทรงกลม 3 มิติที่สามารถโต้ตอบได้ (เช่นหมุน)

ฉันกำลังใช้โปรแกรมสร้างแบบจำลอง 3 มิติ (Cinema 4D) เพื่อห่อทรงกลมด้วยภาพ"Blue Marble" 2MB (การฉายภาพแบบสองทางตรง) จาก NASA

เมื่อห่อจะปรากฏไม่แตกต่างจากซีกโลกทั้งหมด (ไม่ใช่แค่ซีกโลกเดียวเนื่องจากการฉายภาพแบบออโธกราฟฟิคจะเป็นอย่างไร) ดู: ยังคงมาจากแบบจำลอง 3 มิติด้านบน (โปรแกรมการสร้างแบบจำลองกำลังฉายภาพออร์โธกราฟสำหรับฉันขณะที่ฉันหมุนวัตถุฉันคิดว่า) ดังนั้นฉันคิดว่าถ้าฉันบิดเบือนแผนที่ข้อมูล 2D ของฉันในลักษณะที่คล้ายกัน นี่คือช็อตที่ฉันถ่ายด้วยสมการที่ใกล้เคียงกับความเพี้ยนของ equirectangular คุณจะสังเกตุเห็นว่าวงรีรูปไข่จากภาพ 2D ดูเหมือนเป็นวงกลมเมื่อพันกับทรงกลม 3 มิติ ในทำนองเดียวกัน Tissot ellipses ก็ปรากฏเป็นวงกลมบนทรงกลม 3 มิติ

Tissot Indicatrix กับวงกลมที่บิดเบี้ยว วงกลมที่บิดเบี้ยวพันไปกับทรงกลม 3 มิติ

นี่คือเหตุผลที่ฉันดูที่สมการ Tissot ... เพื่อหาการบิดเบือนของการฉายภาพไดเร็กตรอนรูปสามเหลี่ยมที่ละติจูดที่ต่างกันอย่างแม่นยำมากขึ้นเพื่อที่ฉันจะได้บิดเบือนการซ้อนทับของฉัน

หวังว่าทั้งหมดนี้สมเหตุสมผล

บางทีคุณพูดถูกที่ฉันควรใช้โปรแกรม GIS ฉันเพิ่งดาวน์โหลด Cartographica และจะดูว่าฉันสามารถหาได้ มีคำแนะนำซอฟต์แวร์ Mac สำหรับมือใหม่ที่ทำภารกิจนี้หรือไม่?

ขอบคุณอีกครั้ง.


1
คุณหมายถึงการคำนวณการบิดเบือนจริง ๆ หรือคุณต้องการที่จะรู้วิธีการคำนวณการฉายตัวเองจริงๆ? บางทีคุณอาจทำให้ภาพพร้อมใช้งานบนเว็บเพื่อแสดงสิ่งที่คุณกำลังพยายามทำให้สำเร็จ การใช้ "การจับคู่" ของคุณแนะนำให้คุณต้องการกำหนดวิธีการแปลงภาพหนึ่งเป็นภาพอื่นแสดงว่าคุณต้องระบุสิ่งที่คุณเริ่มต้นด้วยเช่นเดียวกับสิ่งที่คุณต้องการที่จะจบลงด้วย
whuber

1
เราเข้าใจว่ามันยากที่จะอธิบายสิ่งที่คุณต้องการทำโดยไม่ทราบถึงศัพท์แสง แต่ดูเหมือนว่าคุณกำลังพยายามอธิบายกระบวนการแทนที่จะเป็นผลลัพธ์ ลองเริ่มต้นด้วยปัญหาที่คุณต้องการแก้ไขจากนั้นผลลัพธ์ที่คุณต้องการและเราจะพยายามเติมช่องว่าง :)
MerseyViking

ในด้านเทคนิค: คุณต้องการreprojectจากประมาณการ equirectangular ไปยังorthographic ( "โลกจากอวกาศ") ฉาย คุณสามารถใช้ซอฟต์แวร์ใดได้บ้าง หากคุณมีซอฟต์แวร์ GIS หรือยินดีที่จะเขียนโค้ดกับไลบรารี่ของโปรเจคชั่นงานนั้นก็จะเป็นงานสำหรับคุณ มิฉะนั้นคุณต้องใช้สมการสำหรับunprojectingประมาณการ equirectangular (ง่าย) และฉายประมาณการ orthographic (ไม่ยากเกินไป แต่ต้องใช้ทักษะในการเข้ารหัสบางกิจวัตรตัวเลข)
whuber

1
ฉันเห็นโพสต์นี้และฉันพยายามทำสิ่งเดียวกันโดยทั่วไป ฉันต้องการวาดวงกลม 2 มิติที่บิดเบือนอย่างถูกต้องเมื่อฉายลงในทรงกลม 3 มิติ ฉันสงสัยว่าคุณยินดีที่จะแบ่งปันอัลกอริทึมที่คุณใช้สำหรับการบิดเบือนของวงกลม 2D หรือไม่? น่าจะเป็นความเห็นที่ไม่ใช่คำตอบ แต่ฉันเขียนมันผิดที่ ขอโทษ
HankTurbo

คุณควรวาดข้อมูลของคุณในพื้นที่ 3 มิติจากนั้นฉายกลับไปยังทรงกลม
AngelLeliel

คำตอบ:


5

ฉันจะทำให้ภาพ 2D ของฉันดูไม่มีการเรียงลำดับได้อย่างไรเมื่อพันไปยังทรงกลม 3D

พิกัดรูปภาพคือละติจูดและลองจิจูดดังนั้นคุณต้อง

(a) Unproject มันและปฏิเสธมันโดยใช้ orthographic หรือการฉายภาพในแนวดิ่งใกล้เคียง (นั่นคือการฉายภาพที่ดูเหมือนโลกจากอวกาศ) หรือ

(b) Texture-map ทำแผนที่ลงบนโมเดล 3 มิติของทรงกลมโดยใช้ lat-lon เป็นพิกัดพื้นผิวและแสดงผลทรงกลมด้วยอุปกรณ์แสดงผลกราฟิก 3 มิติ

GIS ส่วนใหญ่ทำ (ก) เป็นประจำ เพื่อแสดง (b) ต่อไปนี้เป็นชุดของภาพที่ได้มาจากแผนที่ "แบน" ในคำถามที่นำมาจากมุมมองที่โคจรด้วยทรงกลมที่แมปพื้นผิว:

โลกจากอวกาศ

(หากคุณดูภาพขวาสุดอย่างใกล้ชิดคุณจะเห็นเส้นเมอริเดียนที่เด่นชัดผ่านมหาสมุทรแปซิฟิก: นี่คือ "ตะเข็บ" ที่เกิดจากการรวมด้านซ้ายและขวาของแผนที่เข้าด้วยกัน)

คำสั่งMathematicaพื้นฐานในการสร้างหนึ่งในนั้นคือ

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]

สิ่งนี้จะช่วยลดปัญหาดั้งเดิม (จากการวาด "data maps" บนทรงกลม) เพื่อสร้างแผนที่ที่แสดงวงกลมอย่างถูกต้อง การฉายภาพที่ดีที่สุดสำหรับภาพนี้คือ Stereographic เนื่องจากมันจะฉายวงกลมทั้งหมดบนทรงกลมไม่ว่าขนาดของมันจะเป็นอย่างไรกับวงกลมบนแผนที่ ดังนั้นหนึ่งขั้นตอนในการวาดวงกลมขนาดใหญ่อย่างถูกต้องในการฉายภาพEquirectangularดังที่แสดงในคำถามคือการสร้างมันขึ้นมาในการฉายภาพสเตอริโอและจากนั้นคลายโครงการเหล่านั้นไปยังพิกัดทางภูมิศาสตร์ (lat, lon) การใช้ (lon, lat) เป็น (x, y) พิกัดคาร์ทีเซียนเพื่อทำให้แผนที่นั้นมีค่าเท่ากับการฉายภาพแบบ Equirectangular ดังนั้นจึงเหมาะสำหรับการทำแผนที่พื้นผิวลงบนทรงกลมหรือใช้การฉายภาพแบบ Orthographic


โปรดทราบว่าตัวบ่งชี้ Tissot ไม่เหมาะเป็นวิธีแก้ปัญหา:มันแสดงถึงการบิดเบือนในท้องถิ่นของวงกลมเล็กๆ น้อย ๆ เท่านั้น แวดวงที่ใหญ่พอที่จะเห็นในระดับโลกจะไม่ปรากฏเป็นวงกลมอีกต่อไปในการคาดการณ์ส่วนใหญ่: เป็นสักขีพยานในการปรากฏตัวของพวกเขาในแผนที่ในคำถาม นั่นเป็นเหตุผลที่การเล่นเกมที่มีการฉายดังแสดงไว้ที่นี่เป็นสิ่งจำเป็นสำหรับการแก้ปัญหาที่ดี


ขอบคุณสำหรับการโพสต์ข้อมูลมาก! ฉันกำลังใช้ (ข) เป็นแนวทางของฉันและมีแผนที่ Equirectangular ที่สร้างขึ้นอย่างถูกต้อง แต่ได้รับการบิดเบือนเสาที่น่าเกลียดในขณะที่แมปแผนที่ไปยังทรงกลม 3 มิติ คุณช่วยได้ไหม gis.stackexchange.com/questions/245315/…
การพนัน Sibbs เมื่อ

2

สมมติว่ารูปร่างที่ถูกวาดครอบคลุมส่วนเล็ก ๆ ของทรงกลมคุณควรจะได้รับโดยการปรับความกว้าง 1 / cos (lat) และปล่อยให้ความสูงเพียงอย่างเดียว

ยิ่งรูปร่างมีขนาดใหญ่เท่าใดและยิ่งคุณอยู่ใกล้กับเสามากเท่าไหร่ก็จะยิ่งทำงานได้น้อยเท่านั้น


คุณกรุณาอธิบายว่าทำไมสิ่งนี้ถึงได้ผล ดูเหมือนว่ามันจะล้มเหลวอย่างมากแม้ว่าจะอยู่ในทรงกลมเล็ก ๆ ใกล้กับขอบของการเรนเดอร์ในภาพตัวอย่าง
whuber

ขอบคุณสำหรับการแก้ไข; ฉันได้ลบ downvote ตามนั้นเนื่องจากคำตอบของคุณถูกต้องสำหรับฉันและอาจมีประโยชน์กับบางคนในอนาคต ในการตรวจสอบคำถามดูเหมือนว่าไม่มีใครที่จะห่อรูปร่างเล็ก ๆ รอบ ๆ ทรงกลมและเมื่อพวกเขาทำพวกเขาจะต้องจัดการกับเสาและที่อื่น ๆ เช่นกันฉันจินตนาการ
whuber

0

ฉันไม่สามารถหาวิธีเพิ่มความคิดเห็นได้ดังนั้นฉันจะใส่ลงไปในโซลูชันและให้ผู้ควบคุมเบียดเสียดเพื่อหาสาเหตุที่ฉันไม่สามารถแสดงความคิดเห็นได้

ความประทับใจครั้งแรกของฉันเมื่ออ่านคำถามของคุณคือ "ทำไมคุณไม่ออกแบบวงกลมของคุณในโปรเจคที่สอดคล้องกันอย่าง Mercator" คุณสามารถฉายแผนที่นี้ในการฉายของ Mercator และดูการบิดเบือนของวงกลมและข้อความของคุณแก้ไขทุกอย่างให้ดูดีและเมื่อคุณฉายลงบนโลกของคุณรูปร่างควรจะอยู่ในสภาพที่ถูกต้อง (นั่นคือคำจำกัดความของ


2
สิ่งนี้อ่านเหมือนคำตอบของฉันดังนั้นฉันจะทิ้งไป แต่มันไม่ถูกต้องการยึดตามความเข้าใจผิด: การคาดการณ์ที่สอดคล้องกันไม่ได้ฉายวงกลมทั้งหมดเป็นวงกลม พวกเขาทำได้เพียงกระจิริด ความแตกต่างมีขนาดใหญ่: ลองพิจารณาดูว่า Mercator ทำอะไรกับวงกลมใด ๆ ที่หมุนรอบแกนโลกตัวอย่างเช่น มันไม่สามารถแมปเป็นวงกลมได้ - มันต้องแบ่งมันที่ไหนซักแห่ง สำหรับการอภิปรายมากกว่านี้โปรดค้นหาเว็บไซต์ของเราสำหรับTissot
whuber

1
"พวกเขาทำแบบไม่สิ้นสุดเท่านั้น" -> "พวกมันทำเฉพาะกับตัวเล็กเท่านั้น"
Martin F

0

ดูแผนที่ 2D แรกของคุณไม่มีการดึงคุณสมบัติทางภูมิศาสตร์ เพิ่มไปยังแผนที่นี้ (พูดรูปร่างแอฟริกา) และใช้การบิดเบือนที่คุณคิดกับทุกสิ่งในครั้งเดียว ภูมิศาสตร์ก็จะถูกดัดแปลงเช่นกันและเมื่อคุณวางมันไว้บนทรงกลมมันจะผิด ดังนั้นฉันเชื่อว่าความคิดนี้ที่จะใช้การบิดเบือนบางอย่างจะไม่ทำงาน

คุณอาจได้รับใน 2D โดยการวาดกราฟิกในแผนที่ 2D ขนาดเล็กที่มีพื้นที่ จำกัด และการบิดเบือนที่ยอมรับได้ คุณสามารถตัดแผนที่ 2 มิติของคุณลงในแผ่นกระเบื้องและสำหรับแต่ละแผ่นภาพให้ใช้การฉายภาพที่ดีที่สุด

ในทางกลับกันมันเป็นเรื่องง่ายที่จะสร้างจุดบนวงกลมที่มีรัศมีของรัศมีบนแผนที่ 2 มิติ สำหรับสิ่งที่คุณต้องการในการหาฟังก์ชั่นที่คำนวณละติจูด / ลองจิจูดของจุดในระยะทางที่กำหนดและมุมราบจากจุดอื่น (ค้นหา "direct problems Vincenty") เมื่อคุณได้รับแล้วคุณสามารถสร้างจุดเท่ากันที่ระยะห่างจากจุดโดยการเปลี่ยน azimuth จาก 0 ถึง 360 การสร้างรูปหลายเหลี่ยมจากจุดเหล่านั้นใน 2D ต้องใช้งานมากขึ้นเมื่อวงกลม geodesic มีเสาหรือจุดตัด ขอบซ้ายหรือขวาของแผนที่ ตรวจสอบวิธีแวดวงเนื้อที่อาจมีลักษณะเช่นบนแผนที่แบนที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.