Thuật toán giao nhau xử lý chính xác 180 ° kinh tuyến và cực?


9

Có một thuật toán giao nhau nổi tiếng nào xử lý chính xác 180 kinh tuyến và các cực không?

Ví dụ: giả sử chúng ta có một danh sách các giá trị vĩ độ và kinh độ đại diện cho Nam Cực. Giả sử chúng ta cũng có một đa giác đơn giản đại diện cho một chiếc máy bay. Chúng tôi muốn biết nếu máy bay qua Nam Cực.

Giao điểm đa giác 2D chung không hoạt động trong trường hợp này nếu bạn chỉ sử dụng vĩ độ cho y và kinh độ cho x, bởi vì hệ tọa độ phẳng sẽ có các cạnh ở -180 và 180 kinh độ, và -90 và 90 vĩ độ. Nam Cực sẽ tắt trang trên ba trong số các cạnh.

Câu trả lời:


14

GIS (như một lĩnh vực) đã không quá nóng khi thực sự vật lộn với bề mặt địa cầu.

Ví dụ, vấn đề của bạn không được xác định đầy đủ. Không giống như trong 2D, nơi chúng ta biết các cạnh của một đa giác được tạo thành từ các đường thẳng, chúng là gì trên quả địa cầu? Arcs của các vòng tròn lớn, giảm thiểu khoảng cách giữa các đỉnh, là một lựa chọn tốt nhưng không phải là duy nhất. Các đường thẳng (do đó di chuyển bên dưới bề mặt địa cầu) là một lựa chọn khác, ví dụ. (Các dòng Rhumb cũng là một lựa chọn nhưng có khả năng là một thứ ngớ ngẩn, đặc biệt là gần các cực ...) Đây là một liên kết tuyệt vời Các vấn đề giải thích cạnh WRT: http://blog.opengeo.org/2010/08/10/shape-of -a-đa giác /

Một vấn đề lớn khác với cách tiếp cận từ dự án đến 2d, sau đó là các điểm kỳ dị khác đã đề cập, là bất kỳ điểm giao nhau mới được tạo nào (nơi các cạnh đa giác giao nhau) sẽ nằm ngoài vị trí và phụ thuộc vào phép chiếu được sử dụng. (Tôi tin rằng đây là nơi mà khuyến nghị về mật độ hóa xuất phát từ: Bằng cách thêm một tấn các đỉnh trung gian, bạn sẽ nhận được một lỗi giảm từ phép chiếu ở giữa các cạnh đa giác.)

Giả sử bạn không muốn thực hiện tất cả các thỏa hiệp và cách giải quyết của phép chiếu thành 2D và đang muốn tự mình suy nghĩ và mã hóa một cái gì đó, tôi đã thực hiện một chút mã nguyên mẫu (và chỉ dành cho nguyên mẫu!) Cho một giao dịch khách hàng Với cái này.

Đây là một bản phác thảo của phương pháp này. Bạn sẽ cần phải biết vector là gì cũng như ý nghĩa của các sản phẩm chấmchéo . (Hãy cẩn thận: wikipedia thuận tiện cho các liên kết nhanh, nhưng đủ nếu đó là lần đầu tiên bạn giới thiệu về các chủ đề. Một hướng dẫn đồ họa 3D tốt sẽ giúp ích.)

  • Thể hiện một điểm trên quả cầu bằng một vectơ 3D Cartesian đơn vị. Điểm trên bề mặt trái đất là nơi, nếu bạn mở rộng vectơ thành một tia dài vô hạn, nó sẽ giao với bề mặt trái đất.
  • Đại diện cho các vòng tròn lớn bằng một mặt phẳng thông qua nguồn gốc. (Trong 3D, một vectơ đơn vị đủ để xác định một mặt phẳng qua gốc tọa độ; nó là mặt phẳng bình thường đối với mặt phẳng.) Vòng tròn lớn là giao điểm của toàn bộ mặt phẳng với bề mặt trái đất.
  • Bạn có thể tìm thấy các điểm giao nhau của hai vòng tròn lớn bằng cách cắt hai mặt phẳng của chúng.
  • Xác định một cung của một vòng tròn lớn bằng hai điểm. Vectơ xác định vòng tròn lớn bình thường là sản phẩm chéo của vectơ điểm bắt đầu và điểm kết thúc.
  • Để xác định xem một điểm mà chúng ta biết có nằm trên đường tròn lớn nằm trong cung hay không, hãy tạo hai mặt phẳng sao cho: chúng vuông góc với mặt phẳng của đường tròn lớn, một điểm chứa điểm bắt đầu và điểm kia chứa điểm cuối và chúng được định hướng đối mặt với nhau. Sau đó, điểm nằm trên vòng cung nếu nó nằm ở 'bên trong' của cả hai mặt phẳng. (Để giúp hình dung: bạn đã tạo ra nụ cười của pac-man khi anh ấy nhảy xuống vòng cung. Nếu điểm kiểm tra nằm giữa hai hàm của anh ấy, thì nó nằm trên vòng cung, như chúng ta đã biết nó nằm trên vòng tròn lớn.)
  • Để xác định xem hai cung có giao nhau không: tìm hai điểm giao nhau của các vòng tròn lớn tương ứng của chúng, sau đó kiểm tra từng điểm để xem nó có nằm trong cả hai cung không.
  • Một định nghĩa ít mơ hồ: đa giác là một tập hợp các điểm, mỗi điểm được kết nối bởi các cạnh bao gồm các cung của các vòng tròn lớn. Các điểm được sắp xếp sao cho nếu bạn đi dọc theo bề mặt trái đất dọc theo các cạnh của đa giác, 'bên trong' của đa giác sẽ nằm bên trái của bạn. Bây giờ chúng ta hãy để các đa giác phức tạp (đảo, lỗ và tự giao nhau) ra khỏi nó.
  • Bạn có thể cho biết một điểm nằm ở bên phải hay bên trái của mặt phẳng thông qua dấu hiệu của sản phẩm chấm của các vectơ tương ứng của chúng. (Điều này tương đương với, khi bạn đi vòng quanh vòng tròn lớn, cho dù điểm trên bề mặt của quả cầu nằm bên trái hay bên phải của bạn.)
  • Một thử nghiệm chính xác để xác định xem một điểm có nằm trong đa giác hay không: Nó có nằm ở bên trái của tất cả các cạnh không?
  • Bây giờ chúng ta có khả năng kiểm tra xem một điểm có nằm trong đa giác hay không và để xác định giao điểm cạnh: các thành phần cho giao điểm đa giác-đa giác! Lề của nhận xét này quá nhỏ để viết ra một thuật toán đầy đủ nhưng các bước cơ bản là: (a) tìm tất cả các giao điểm, sau đó (b) các cạnh đi bộ, xen kẽ các đa giác mà bạn đang đi trên khi bạn gặp các điểm giao nhau.
  • Khi tất cả các cách trên đang hoạt động, hãy bắt đầu suy nghĩ về các chiến lược lập chỉ mục để làm cho nó nhanh hơn, vì đa giác điểm tôi phác thảo là O (n) về số cạnh và đa giác giao nhau O (m * n) về số lượng các cạnh.

Pheew.

Có một số lợi thế lớn cho phương pháp này: Tất cả các hoạt động ở trên chỉ rút gọn thành phép nhân và bổ sung. (Sau khi chuyển đổi dữ liệu sang biểu diễn này: vd : các cạnh chồng chéo song song).

Nhìn vào mã, nó trông giống như gói Spheres mà người khác liên kết theo một số phương pháp này, mặc dù nó cũng có vẻ hơi bị nướng.

PostGIS cũng có thể sử dụng một cách tiếp cận tương tự đối với kiểu dữ liệu địa lý của nó , nhưng tôi không nhìn vào mui xe. Tôi biết rằng để lập chỉ mục không gian, ít nhất, họ sử dụng cây R trên cartesian 3D.

(Lưu ý: câu trả lời này đã trở nên đủ dài để tôi có thể chỉnh sửa thành một bài đăng trên blog ... Phản hồi / bình luận rất đáng hoan nghênh!)


5

Tôi thực sự đang tìm kiếm một giải pháp chung sẽ hoạt động cho nhiều đa giác lớn.

Hầu hết các câu trả lời tôi đã đọc cho đến nay đều tập trung vào việc tìm kiếm một phép chiếu phù hợp cho các tính năng của bạn. Điều này có thể phản trực giác, nhưng ở đây bạn cần xem xét nơi một phép chiếu không hoạt động, không phải nơi nó hoạt động tốt.

Một số dự đoán không hoạt động chỉ tại một điểm: đây là một trong những dự đoán được gọi là "toàn cầu". Một ví dụ điển hình là phương trình đẳng thức phương vị: điểm duy nhất bạn không thể chiếu là điểm đối lập với điểm gốc của nó. (Trên thực tế, không hoàn toàn đúng khi bạn không thể chiếu điểm cuối cùng đó; Tôi đang đề cập đến một vấn đề kỹ thuật. Hãy cho rằng dự báo gặp vấn đề nghiêm trọng ở cực đối diện.)

Do đó, nếu bạn có thể tìm thấy một điểm P duy nhất bên ngoài liên kết của tất cả các đa giác bạn dự định làm việc, thì tất cả những gì bạn cần là làm việc trong một phép chiếu toàn cầu chỉ thất bại ở điểm duy nhất này. ( Ví dụ: sử dụng một góc phương vị tương đương xiên ở giữa tại điểm đối diện với P. )

. là tốt nhất nên tránh xa các điểm kỳ dị nơi phép chiếu thất bại, càng tốt hơn: đây là vấn đề về độ chính xác tính toán.)

Có rất nhiều dự đoán toàn cầu với các đặc tính mong muốn, bao gồm bình đẳng , tuân thủ ( ví dụ , lập thể) và diện tích bằng nhau. Do đó, việc chọn một phép chiếu toàn cầu cho phân tích của bạn không phải là một hạn chế nghiêm trọng.

Hạn chế chính là phần mềm phổ biến nhất hiện có, ArcGIS, không hỗ trợ nhiều phiên bản xiên của các dự đoán toàn cầu! :-(


3

Bạn có thể giải quyết điều này bằng các phép chiếu!

Chỉ vì "kết thúc" của tỷ lệ là -180 và +180, không có nghĩa là bạn phải xem xét bản đồ với các kết thúc đó.

Sử dụng EPSG: 32761 ( http://spatialreference.org/ref/epsg/32761/ )

Chuyển đổi các giá trị vĩ độ và kinh độ của bạn thành tọa độ trong không gian UPS và sau đó bạn có thể sử dụng các phép tính hình học thông thường để xác định xem máy bay của bạn có ở Nam Cực hay không.

Thông tin thêm về hệ tọa độ Universal Polar Stereographic có tại đây: http://en.wikipedia.org/wiki/Universal_Polar_Stereographic_coordinate_system

Nếu bạn chỉ đang cố gắng xác định thuật toán giao nhau cho các đa giác khổng lồ, thì hãy coi trái đất là một hình cầu (hoặc thậm chí là một hình cầu) và sử dụng hình học hình cầu để phân tích đa giác của bạn.

Tôi đã tìm thấy một thư viện có tên Spheres đó là GPLed, vì vậy bạn có thể xem lại mã của nó để xem chính xác thuật toán họ sử dụng cho giao điểm vòng cung và "các điểm trong một đa giác hình cầu".

Tuy nhiên, khi bạn muốn DRAW các đa giác này trên một bề mặt phẳng (như giấy hoặc màn hình của bạn) thì bạn sẽ cần chọn một hình chiếu , hoặc ít nhất là một kiểu chiếu.


Nhưng làm thế nào tôi có thể xác định chiếu nào sẽ sử dụng? Tôi đồng ý rằng trong trường hợp cụ thể của Antartica, bạn có thể sử dụng UPS, nhưng nếu bạn chỉ có một số đa giác abrbitrary đi qua bán cầu thì sao? Có lẽ một ví dụ tốt hơn Antartica là một đa giác đại diện cho nơi có ánh sáng ban ngày.
Sean

"Chọn dự đoán đúng" có lẽ sẽ là một chủ đề wiki cộng đồng tuyệt vời. Nói chung, một khi bạn đã chọn một phép chiếu thì đó là vì bạn đã đến một trường hợp cụ thể. Nếu bạn không biết đa giác của mình ở đâu trên thế giới, thì lời khuyên của tôi là chuyển đổi nguồn gốc của trái đất thành trung tâm của đa giác của bạn, sau đó sử dụng tọa độ Descartes.
đường

Tôi đang tìm kiếm một giải pháp chung hoạt động với nhiều đa giác lớn. Nếu tôi cần sử dụng một phép chiếu tùy chỉnh cho mỗi đa giác, có vẻ như hiệu suất sẽ chậm.
Sean

1

Mặc dù có vấn đề với việc sử dụng tọa độ của Cartesian, tôi không thấy sự cọ xát trong ví dụ bạn đã cung cấp. Đây là những gì nó trông giống với tôi, với một đa giác bao phủ Nam Cực giới hạn bởi các cạnh của không gian tọa độ:

Nam Cực
(nguồn: geohack.net )

Giao điểm giữa mặt phẳng và lục địa có thể được tính toán một cách an toàn mà không cần thực hiện bất kỳ biến đổi phức tạp nào.


Thật vậy, điều này sẽ hoạt động và bạn không cần phải chuyển đổi sang một hình chiếu khác. Bạn chỉ cần đóng đa giác "Nam Cực" dọc theo ba cạnh mà nó đi qua. Tôi cũng sẽ sử dụng tâm của đa giác máy bay, vì sẽ đơn giản hơn để xác định xem một điểm có nằm trong đa giác hay không để thực hiện giao cắt đa giác.
đường

Tôi không quá thích phương pháp này. Biến dạng nặng sẽ xảy ra và giao lộ có thể là kết quả đúng, trong khi thực tế thì không.
George Silva

Tôi có thể nghĩ về một vài trường hợp mà việc chiếu này sẽ có vấn đề, như tính toán khoảng cách vòng tròn lớn hoặc khu vực tính toán gần các cực. Có lẽ tôi đang thiếu một cái gì đó, nhưng tôi không thấy giao lộ được yêu cầu ở đây sẽ thay đổi như thế nào trong những điều kiện này.
scw

Tôi nghĩ rằng ví dụ máy bay không hoàn hảo; một ví dụ tốt hơn có thể là một đám mây lớn.
Sean

Trên thực tế, scw, bạn là chính xác. Đối với phân tích điểm, điều này hoàn toàn không quan trọng, chỉ đối với calcs khoảng cách và diện tích. Sai lầm của tôi: P
George Silva

0

Một giải pháp cho vấn đề này là sử dụng một số loại hệ tọa độ 3 chiều cho trái đất thay vì hệ tọa độ hai chiều. Nếu đa giác 2D được cung cấp một độ sâu ảo lớn, chẳng hạn như một nửa đến trung tâm trái đất, thì đa giác không cần phải được mô hình hóa thành các đường cong trên bề mặt trái đất. Nó là đủ cho chỉ các đỉnh ở trên bề mặt.


0

Một giải pháp khả thi là cắt đa giác thành đa giác phụ ở tất cả các cạnh (180 kinh tuyến và cực). Phần mềm thậm chí có thể duy trì một số loại tham chiếu giữa đa giác gốc và đa giác phụ.


0

Lấy trọng tâm của máy bay và sử dụng nó làm điểm tiếp tuyến cho phép chiếu phương vị . Bạn cũng sẽ cần phải tăng mật độ các hình học trước khi chiếu chúng cho những trường hợp như diện tích đất hiện đang nhìn thấy ánh sáng ban ngày.


Điều này nghe có vẻ đắt tiền. Nếu tôi có nhiều máy bay, hoặc tệ hơn là mây thì sao? Xin vui lòng giải thích những gì có nghĩa là "tăng cường"?
Sean

Vâng, nó sẽ đắt tiền. Để làm điều này trên toàn cầu, có lẽ máy bay không phải là cách để đi sau tất cả. Có vẻ như một cách tiếp cận lượng giác hình cầu có thể được sử dụng làm cơ sở cho lớp phủ đa giác vector của các bộ dữ liệu trên toàn thế giới (ví dụ: phần trăm trái đất được bao phủ bởi ánh sáng ban ngày và mây). Tất cả các lớp phủ đa giác tôi biết mặc dù là dựa trên phẳng. vi.wikipedia.org/wiki/Spherical_trigonometry
Kirk Kuykendall
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.