Xác định các toán tử không gian (Bằng, Không khớp, Chạm, Trong, Chồng chéo, Giao nhau, Giao lộ, Chứa, Liên quan)?


9

Ok, tôi phải thừa nhận, tôi không thực sự đi sâu vào ngữ nghĩa của danh sách các nhà khai thác không gian bên dưới, tôi là người dùng nhiều hơn, tôi viết phần mềm để điều khiển SQL hầu hết thời gian và không thực sự nghĩ về nó quá nhiều

Tuy nhiên, tôi có một tình huống mà một hoạt động không gian tôi đang làm là làm chậm con chó, trên một cái bàn có các chỉ số tuyệt vời và chưa bao giờ gây ra vấn đề trước đây.

Kết quả là, tôi đang cố gắng tìm ra cách nào sau đây là cách tốt nhất để sử dụng, điều đó sẽ mang lại cho tôi hiệu suất tốt nhất, tuy nhiên, đôi khi tôi thấy các tìm kiếm của mình không trả về bất cứ điều gì khi tôi biết, và đôi khi trả lại công cụ khi họ không nên.

Vì tôi đang tiếp cận, để hỏi xem ai đó có thể cho tôi định nghĩa thực tế không, chẳng hạn như tiêu chí phù hợp, hoàn toàn trong hình học kèm theo, hoặc trong vòng ngoài, v.v. của từng thao tác sau:

Equals(Geom1, Geom2):int
Disjoint(Geom1, Geom2):int
Touches(Geom1, Geom2):int
Within(Geom1, Geom2):int
Overlaps(Geom1, Geom2):int
Crosses(Geom1, Geom2):int
Intersects(Geom1, Geom2):int
Contains(Geom1, Geom2):int
Relate(Geom1, Geom2):int

Nếu bạn có thể đưa ra một ví dụ cụ thể về thời điểm họ sẽ và sẽ không khớp nhau, điều đó sẽ rất tuyệt.

Để tham khảo, tôi đang tìm kiếm trên bảng Linestrings, sử dụng đa giác hình chữ nhật, được xoay để chỉ theo hướng di chuyển (Đây là một phần của ứng dụng quản lý giao thông)

Để tham khảo thêm, đây là một mẫu SQL mà ứng dụng tạo ra để thực hiện tìm kiếm:

SELECT recordID,AsBinary(geometry) AS geometry,Distance(GeomFromText('POINT(-1.84101 54.85078)',4326), geometry) AS distanceFromGps FROM linegrid WHERE Intersects(GeomFromText('POLYGON ((-1.8413149820810311 54.850782468607292, -1.8409507853094111 54.850952257034713, -1.8408279009723911 54.850864894077496, -1.8411920982612455 54.850695105650068, -1.8413149820810311 54.850782468607292))'), geometry)

Bạn có thể thấy trong ví dụ này, tôi đang sử dụng các giao điểm đang thử những cái khác như đã đề cập không hoàn toàn cho kết quả mà tôi mong đợi, do đó tôi đang đặt câu hỏi.

Xin lưu ý, hiện tại tôi không bận tâm lắm về cách thực hiện nhanh hơn / các cách khác để thực hiện việc này, NHƯNG nếu bạn tình cờ phát hiện ra một cách tốt hơn, hãy thoải mái hét lên :-)

Hiện tại, tất cả những gì tôi đang cố gắng hiểu là sự khác biệt giữa mỗi hoạt động.

Để làm điều đó nhanh hơn / tốt hơn, tôi dự định sẽ mở một câu hỏi khác cho câu hỏi đó vào một ngày sau đó.

Để tham khảo thêm, công cụ Spatial mà nó đang hoạt động là Spatilite 2.3.0 và tôi không thể nâng cấp nó do các thiết bị đang chạy không có bản dựng cập nhật hơn cho nó (Windows CE)


Tôi sẽ chọn câu trả lời của mintix ở đây vì nó cung cấp một lưới siêu dễ hiểu và mô tả về tất cả các hoạt động khác nhau, đã trả lời câu hỏi của tôi.

Tôi vẫn phải đối mặt với việc đạt được hiệu suất theo thói quen, nhưng hiện tại tôi có một vài chiến lược để thử nó, tôi vẫn có thể tìm kiếm lời khuyên ở đây từ nhóm liên quan đến điều đó.

@Vince cũng xứng đáng nhận được một số tín dụng, vì tờ giấy trắng đó chắc chắn là câu trả lời dứt khoát, nhưng nó cũng khá khó đọc (tôi đã phải đọc qua nó nhiều lần), đối với bất kỳ ai muốn tôi thực sự trong các hoạt động này Giấy Clementini là Cách đi, nếu bạn cần một cái nhìn tổng quan dễ hiểu trong khi phát triển các giải pháp, tuy nhiên, liên kết FME sẽ được mở trong một tab trình duyệt khác.


Có thể tăng tốc - có lẽ kiểm tra giao cắt hộp giới hạn với " MbrIntersects " trước khi kiểm tra rằng hình học giao nhau?
dùng2856

Chào Luke. Ban đầu tôi đã thử sử dụng MBR, nhưng sau đó nhận ra tôi không thể xoay nó. Thật không may, tôi phải xoay hộp để chỉ theo hướng của ổ trục GPS để nó phải là một đa giác. Nhờ đề nghị mặc dù.
choàng

đề xuất không chỉ sử dụng thử nghiệm MBRIntersects. Đó là sử dụng MbrIntersects để giảm số lượng hình học mà hàm Intersects kiểm tra. Thu hẹp tìm kiếm theo cách này là một phương pháp khá chuẩn để tăng tốc độ lớp phủ.
dùng2856

À đúng rồi, bây giờ tôi đọc lại, tôi hiểu ý của bạn.
choàng

Nếu có rất nhiều hàng trong linegrid và bạn sẽ không đánh vào hầu hết các hàng đó, một chỉ số không gian có thể giúp ích.
BradHards

Câu trả lời:


16

Bạn đang tìm kiếm "Ma trận giao nhau 9 chiều mở rộng" hoặc viết tắt là DE-9IM.

DE-9IM bởi FME

Liên kết FME đó có các ví dụ tuyệt vời về các toán tử không gian mà bạn đã liệt kê ở trên. Nó chia nó thành một ma trận đúng / sai 3x3 với các ví dụ và mô tả của từng thuộc tính vị ngữ.


Ôi !! Liên kết là siêu hữu ích, đã quét nhanh, sẽ đọc nó chi tiết hơn một chút sau đó.
choàng

Liên kết bị hỏng.
alphabetasoup

9

Công việc tham khảo mà tôi sử dụng cho sự mong đợi của các nhà khai thác không gian là bài báo Clementini ("Một tập hợp nhỏ các mối quan hệ cấu trúc chính thức phù hợp cho tương tác của người dùng cuối", Eliseo Clementini, Paolino Di Felice và Peter van Oosterom, 1993). Nó đưa ra lý thuyết đằng sau các toán tử liên quan đến nội thất, ngoại thất và chiều, giúp loại bỏ phỏng đoán về mối quan hệ nào được nắm bắt bởi toán tử nào giữa các loại.

Cho dù tất cả các triển khai tôn vinh tất cả các khía cạnh của các nhà khai thác Clementini, không may, là một vấn đề khác.


Phải, tôi nghe thấy bạn ở đó ... thế giới CNTT có đầy đủ các tiêu chuẩn mà dường như không ai tôn trọng, cảm ơn vì thông tin tôi sẽ đi tìm một bản sao của bài báo.
choàng
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.