Cho một tập hợp tọa độ, làm thế nào tôi có thể tính các giới hạn tối thiểu?


13

Tôi có một bộ tọa độ trong lon / lat. Luôn có ít nhất 3 tọa độ được sắp xếp tạo thành một poly (nếu chúng được chiếu phẳng). Làm cách nào tôi có thể tính các giới hạn tối thiểu cho các tọa độ này dưới dạng một tập hợp các phạm vi kinh độ và vĩ độ hợp lệ? (bởi 'hợp lệ', ý tôi là các phạm vi giải thích rõ ràng cho phản tuyến). Thật khó để giải thích những gì tôi đang tìm kiếm để tôi có một bức ảnh.

nhập mô tả hình ảnh ở đây

Trường hợp trong hình là tầm thường; bạn chỉ cần tìm tối thiểu và tối đa tuyệt đối cho tất cả các điểm. Điều này không làm việc cho tất cả các trường hợp mặc dù. Có một giải pháp chung chung?

Chỉnh sửa: Để làm rõ ý của tôi về 'hợp lệ', giả sử tôi có ba giá trị kinh độ trong tập dữ liệu của mình: -76, -135 và 164. Các giá trị vượt qua phản hạt và tôi muốn các phạm vi kết quả được phân tách: -76 đến -180 VÀ 164 đến 180.

Một số làm rõ hơn. Các điểm tạo thành một đa giác, vì vậy trong một số trường hợp nhất định, phạm vi bắt buộc có thể từ -180 đến +180 (nghĩa là toàn bộ 360 độ):

nhập mô tả hình ảnh ở đây

Hình ảnh bên trái cho thấy kinh độ của bốn tọa độ xảy ra trên một nửa 'Trái đất. Hãy tưởng tượng nó như thể bạn đang nhìn xuống cực bắc (chấm đen). Màu hồng hiển thị phạm vi dọc tối thiểu bao gồm đa giác (đa giác được hiển thị giữa bốn điểm màu tím). Trường hợp bên trái sẽ có hai phạm vi dọc: [-180 đến -120] và [135 đến 180] (chỉ ước tính trực quan)

Hình ảnh bên phải cho thấy một trường hợp khác trong đó các điểm đi khắp Trái đất. Phạm vi này sẽ là [-180 đến 180].


1
Tôi chưa bao giờ xem xét vấn đề này trước đây, nó là một câu hỏi tuyệt vời. Một ví dụ khác về nơi trái đất phẳng sẽ làm cho công việc của chúng ta dễ dàng hơn! Tôi mong muốn được nhìn thấy một số giải pháp cho việc này.
sgrieve

Tôi nghĩ rằng bạn cần phải rõ ràng hơn về "(theo 'hợp lệ', ý tôi là các phạm vi giải thích rõ ràng cho phản hạt)" - Tôi đoán từ tối thiểu cần phải đi trước các giới hạn trong câu hỏi.
Ian Turton

bạn có thể thêm lại hình ảnh của bạn nó có thể giúp giải thích vấn đề của bạn.
Mapperz

1
iant: làm rõ ràng 'hợp lệ' Mapperz: thêm lại? nó không hiển thị? Tôi có thể thấy nó tốt
Pris

1
Các tọa độ được tính bằng lon / lat và được sử dụng để truy vấn cơ sở dữ liệu để lấy dữ liệu địa lý. Nói một cách chính xác, bạn có thể chuyển đổi vấn đề này thành một vấn đề toán học thuần túy (mặc dù điều đó có thể nói về nhiều điều trong GIS)
Pris

Câu trả lời:


5

Hy vọng tôi hiểu chính xác câu hỏi ...

Chúng ta có thể giải quyết vấn đề cho kinh độ và vĩ độ một cách riêng biệt, vì vậy tôi sẽ lấy ví dụ của bạn với các kinh độ: -76, -135 và 164.

Đầu tiên tôi sẽ đặt hàng chúng:

-135, -76, 164

Sau đó, tôi sẽ thêm tọa độ hầu hết bên trái vào bên phải một lần nữa: -135 + 360 = 225

-135, -76, 164, 225

Bây giờ chúng ta có thể tính toán khoảng cách giữa các tọa độ:

-135 (59) -76 (240) 164 (61) 225
             .......

Khoảng cách lớn nhất (240) phải là ranh giới của hộp giới hạn tối thiểu, phần không thuộc về hộp. Đường chấm chấm là phần lớn nhất của vòng tròn chúng ta có thể thoát ra. Trong ví dụ của chúng tôi có nghĩa là, hộp ranh giới bắt đầu bằng 164, bao gồm -135 và kết thúc bằng -76.


Điều này làm việc cho hầu hết các trường hợp tôi nghĩ. Nhưng hãy xem xét ví dụ của tôi với kinh độ bổ sung (+60) [là điểm thứ tư trong poly]. Trong trường hợp này tôi muốn -180 đến 180. Sử dụng phương pháp của bạn, tôi sẽ nhận được 61 đến 180 và -76 đến -180.
Pris

@Pris - Vì vậy, bạn muốn kinh độ 180 / -180 (rốt cuộc đó là cùng một điểm), là một phần của hộp trong mọi trường hợp, ngay cả khi đó không phải là hộp nhỏ nhất có thể?
martinstoeckli

Tôi nghĩ rằng sự khác biệt chính ở đây là các điểm tạo thành một đa giác. Xem chỉnh sửa của tôi.
Pris

@Pris - Ồ tốt, điều này có vẻ rất khó khăn. Nó giống như mọi điểm của một cạnh giữa hai điểm cũng được tính là điểm đỉnh.
martinstoeckli

1

Điều này thực sự dễ thực hiện trong Javascript với API Google Maps. Đây là cách bạn sẽ thực hiện phía máy khách với API đó:

var bounds = new google.maps.LatLngBounds();

//Recursively loop through your coordinate list
    latLng = new google.maps.LatLng(<YourLat>, <YourLon>);
    bounds.extend(latLng);
//

extentBox = new google.maps.Rectangle({
    bounds: bounds,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35
});
extentBox.setMap(map);

Xin chào, cảm ơn vì câu trả lời, tuy nhiên tôi đang tìm phương pháp thực tế thay vì gọi API hoặc sử dụng giải pháp có sẵn.
Pris

Bạn đã cho tôi phương pháp bound.extend, tôi đang tìm giải pháp chính xác này, cảm ơn!
Thomson Comer

Điều này có làm việc với đa giác? Tôi thấy bạn sử dụng hình chữ nhật.
Daniel G

1

Tôi nghĩ rằng tôi có thể đã tìm thấy một cách để làm điều này. Việc triển khai sơ bộ của tôi hoạt động, nhưng tôi không chắc có trường hợp nào tôi đã bỏ lỡ không. Nếu có bất cứ điều gì sai với giải pháp này, xin vui lòng chỉ ra.

Cho rằng tôi quan tâm đến việc lấy phạm vi lon / lat cho đa giác thay vì chỉ các điểm bao gồm nó, một cách để thử vấn đề là thực sự 'đi bộ' dọc theo bộ tọa độ được sắp xếp từ đầu đến cuối. Bạn theo dõi khoảng cách theo chiều kim đồng hồ và ngược chiều kim đồng hồ mà bạn đã đi so với tâm Trái đất đã cho điểm bắt đầu và tiếp tục đi cho đến khi bạn hoàn thành đa giác:

nhập mô tả hình ảnh ở đây

Bạn có thể nhận được một phạm vi khoảng cách CW và CCW bạn đi từ điểm xuất phát của bạn ... điều này cung cấp cho bạn đủ thông tin để rút ra giới hạn chính xác trong trường hợp bình thường (còn lại trong hình ảnh). Trong trường hợp đa giác đi xung quanh hoàn toàn hoặc cắt ngang qua tâm, góc di chuyển được trả về sẽ là 360 độ.

Phương pháp này cũng hoạt động khi bạn có đa giác 'ôm' bề mặt Trái đất thay vì cắt ngang qua nó. Vì vậy, nếu bạn có một đa giác cho thấy ai đó đi dọc theo bề mặt Trái đất từ ​​Toronto (lon: -79) đến Luân Đôn (lon: -5) đến Tokyo (lon: 139) và trở lại (theo thứ tự đó), bạn sẽ lấy phạm vi [-79 đến 139].

Nếu đa giác cắt ngang qua trung tâm (hãy tưởng tượng hai điểm liền kề ở +90 và -90), tôi coi đây là một lần quét toàn bộ (360 độ) mặc dù bạn có thể đi một trong hai cách.

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.