Làm thế nào để tính hộp giới hạn của nhiều lớp trong lat / long?


11

Tôi đang viết một ứng dụng để kiểm tra hiệu suất tất cả các loại dịch vụ bản đồ, chủ yếu là AGS 9.x, AGS 10 và WMS 1.x.

Một phần của ứng dụng liên quan đến việc tạo các hộp giới hạn ngẫu nhiên cho các yêu cầu riêng lẻ, trong phạm vi toàn bộ dịch vụ. Phần này hoạt động tốt cho các hệ tọa độ địa lý và dự kiến ​​khi biết toàn bộ phạm vi của dịch vụ (ví dụ: thông qua thuộc tính fullExtent của dịch vụ AGS).

Vấn đề của tôi là với WMS: mỗi lớp trong phản hồi GetCapabilities có thể xác định vùng giới hạn của nó trong> = 1 CRS. Một số phần của ứng dụng cần biết CRS của dịch vụ là địa lý hoặc dự kiến, vì vậy để xóa sự mơ hồ trong WMS, tôi luôn sử dụng LatLonBoundingBox của lớp luôn được xác định và trong EPSG: 4326. Sau đó tôi phải tính toán một hộp giới hạn dịch vụ đầy đủ dựa trên tất cả các lớp đi vào một yêu cầu riêng lẻ (được chọn ngẫu nhiên). Đây là nơi nó trở nên khó khăn.

Tôi đang bị lạc bởi vì với mỗi hộp giới hạn lat / lon, LLx (kinh độ dưới bên trái) có thể là một số lớn hơn hoặc nhỏ hơn URx (kinh độ trên bên phải), tùy thuộc vào kinh tuyến mà nó trải dài. Mỗi lần tôi bắt đầu vẽ sơ đồ hình vuông hoặc hình tròn, tôi nghĩ rằng tôi có một cách tiếp cận đã tìm ra, và sau đó tìm thấy một trường hợp làm hỏng nó và bộ não của tôi chuyển sang ủ rũ.

Tôi sẽ tiếp tục đập nó cho đến khi nó hoạt động, và nếu tôi nhận được một giải pháp đăng nó ở đây, nhưng tôi chắc chắn phải có một cách tiếp cận được chấp nhận và thử nghiệm đầy đủ sẽ giúp cuộc sống của tôi dễ dàng hơn. Tôi không thể tìm thấy nó ngay bây giờ.


OK trong bài viết này: stonybrook.edu/libmap/coordins/seriesa/no2/a2.htm (phần Gotchas toàn cầu) Tôi đọc "Thật không may, không có giải pháp đơn giản và thanh lịch nào tồn tại để giải quyết Gotchas toàn cầu". Tôi đang nghĩ đến việc quét trên tất cả các phạm vi lớp và nếu URx <LLx chỉ đơn giản đặt phạm vi thành -180 +180. Bài báo tương tự cho thấy rằng hầu hết các hệ thống GIS sẽ chia một đa giác với các tọa độ này thành hai tính năng riêng biệt.
tomfumb

Một số từ khóa khác cho các công cụ tìm kiếm khi tôi gặp khó khăn khi tìm lại bài đăng xuất sắc này: hộp giới hạn tối thiểu, hợp nhất nhiều hộp giới hạn, dòng ngày quốc tế, không liên tục, phân đoạn vòng tròn tối thiểu
letmaik

Câu trả lời:


6

Các bài viết tham khảo là chu đáo. Tuy nhiên, tôi tin rằng có một "đơn giản và thanh lịch" giải pháp: cho tập hợp dữ liệu địa lý, có hai loại hộp bounding. Những người không đi theo kinh tuyến + -180 có thể được lưu trữ và tìm kiếm như mọi khi. Những người thực hiện nối kinh tuyến + -180 có thể được lưu trữ ở dạng bán bổ sung : cụ thể là lưu trữ phạm vi vĩ độ như bình thường, nhưng thay vào đó lưu trữ phạm vi kinh độ không có trong hộp (và chuyển một chút để chỉ ra dạng nào của lưu trữ đang được sử dụng). Về cơ bản không cần sửa đổi đối với các chỉ mục địa lý hoặc tìm kiếm cấu trúc cây; chỉ cần một sửa đổi nhỏ cho các thuật toán tìm kiếm.

Ở mức nào, đây là một giải pháp cho chính câu hỏi.


Tôi đoán bạn dự đoán đầu vào là một chuỗi các mô tả hộp giới hạn ((LLx, LLy), (URx, URy)) trong đó:

  • -540 <= LLx, -180 <= URx, LLx <= 180 và URx <= 180. Ngoài ra -90 <= LLy <= URy <= 90.

  • một điểm tại (kinh độ, vĩ độ) = (x, y) được coi là nằm trong BB khi và chỉ khi

    1. LLy <= y <= URy và

    2. hoặc LLx <= x <= URx hoặc LLx - 360 <= x <= URx.

Đối với đầu ra, bạn muốn các tham số cho hộp giới hạn nhỏ nhất chứa liên kết của tất cả các đầu vào.

Rõ ràng giới hạn y của hộp giới hạn tối thiểu (MBR) sẽ là mức tối thiểu và tối đa của các giá trị y. Đối với giới hạn x, sử dụng quét dòng để tìm khoảng cách lớn nhất .

Đây là một mô tả của thuật toán. Để minh họa, giả sử đầu vào bao gồm bốn hộp,

((-81,-16),(-77,80)),
((77,-19),(156,5)),
((-149,-45),(-90,81)),
((-69,-85),(-36,-76))

Dưới đây là sơ đồ của các hộp (màu đỏ) và MBR (màu đen) của hộp đầu tiên, sau đó là hai hộp đầu tiên, sau đó là ba hộp đầu tiên, sau đó là tất cả các hộp.

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

Lưu ý cách ở bước thứ hai, các hộp ở bán cầu đông và tây được bao quanh bởi một MBR vượt qua kinh tuyến + -180 độ, làm cho nó xuất hiện dưới dạng hai hộp riêng biệt trên bản đồ này. Ở bước cuối cùng, MBR đó phải được mở rộng về phía đông để chứa một hộp nhỏ giữa Nam Mỹ và Nam Cực.

  1. Trích xuất tất cả các tọa độ x của các hộp, tính toán modulo 360 (để đặt chúng trong phạm vi -180..180), sắp xếp chúng tăng dần và nối giá trị đầu tiên (tăng 360 độ) vào cuối để làm cho chúng bao bọc xung quanh:

    -149, -90, -81, -77, -69, -36, 77, 156, 211
    

    (Lưu ý rằng 211 và -149 là cùng một kinh tuyến.)

  2. Hãy nghĩ về mỗi tọa độ x là đại diện cho khoảng giữa tọa độ trước (nhưng không bao gồm giá trị trước đó) và nó. Ví dụ: -77 đại diện cho tất cả các giá trị từ -81 đến -77 nhưng không bao gồm -81. Đối với mỗi hộp sau lần đầu tiên, hãy đếm số lượng hộp chứa khoảng đó.

    1, 0, 1, 0, 1, 0, 1, 0
    

    Ví dụ: "1" đầu tiên có nghĩa là một hộp bao gồm khoảng từ 4949 đến -90. (Đó là hộp thứ ba.)

    Để tối ưu hóa, bạn có thể dừng việc đếm ngay khi bạn tìm thấy bất kỳ hộp nào có khoảng x và chuyển sang khoảng x tiếp theo. Chúng tôi chỉ cố gắng xác định khoảng thời gian nào có thể không được bao phủ bởi bất kỳ hộp nào.

  3. Tính toán sự khác biệt đầu tiên của tọa độ x được sắp xếp trong (1).

     59, 9, 4, 8, 33, 113, 79, 55
    

    Kết hợp những điều này với số lượng bảo hiểm trong (2). Tìm sự khác biệt lớn nhất mà số lượng bảo hiểm là 0. Ở đây, nó bằng 113, phần tử thứ sáu của mảng trước. Đây là khoảng cách lớn nhất về kinh độ còn lại của bộ sưu tập các hộp.

    (Thật thú vị, khả năng tối đa xảy ra tại nhiều hơn một vị trí cho thấy giải pháp không nhất thiết là duy nhất! Có thể có nhiều hơn một MBR cho một bộ hộp. Bạn có thể xác định một điều kiện duy nhất bằng cách thêm các điều kiện bổ sung, chẳng hạn như yêu cầu rằng khoảng cách trung bình trong MBR đến kinh tuyến + -180 càng lớn càng tốt; để giải quyết một mối ràng buộc, chọn (nói) giải pháp cực đông.)

  4. Tìm khoảng thời gian tương ứng: ở đây, từ -36 đến 77. Đây là phạm vi kinh độ không có trong MBR. Do đó, hãy lấy phần bù của nó trong phạm vi từ -180 đến 180. Ở đây, phần bù là hai khoảng cách khác nhau, một từ -180 đến -36 và một phần khác từ 77 đến 180. Ngoài ra, biểu thị phần bù dưới dạng một hình chữ nhật duy nhất có thể đặt trên + Kinh tuyến -180 độ: từ -283 đến -36 tại đây (hoặc, tương đương, từ 77 đến 324).

  5. Sử dụng giá trị tối thiểu và tối đa của các giá trị y cho các góc của MBR.

    ((-283, -85), (-36, 81))
    

Trong câu cuối cùng của điểm 4, tại sao bạn viết "từ -283 đến -36". Tại sao không 77 đến -36?
letmaik

1
@neo Vì "77 đến -36" là khoảng trống. (Theo định nghĩa, một khoảng [a, b] bao gồm tất cả các số x sao cho a <= x <= b. Với a = 77 và b = -36, không có số nào như vậy.) Người ta có thể phản ứng bằng cách nói "tốt , theo như kinh độ, 77 đến -36 là hoàn toàn rõ ràng. " Vấn đề là không phải: nó sẽ tăng từ 77 lên 180 = -180 và tiếp tục lên đến -36 hay nó sẽ giảm từ 77 xuống -36? Để tránh sự mơ hồ như vậy tôi đã chọn cách cẩn thận.
whuber

Tôi đã thực hiện nhanh chóng câu trả lời của bạn (xem ý chính ). Để kiểm tra xem một hộp có chứa một khoảng thời gian tôi đã phải tháo các kinh độ của hộp không, nếu không nó sẽ không hoạt động đối với các hộp vượt qua sự gián đoạn. Trở thành một người mới, điều này không hoàn toàn rõ ràng đối với tôi :)
letmaik
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.