ST_PointOnSurface được tính như thế nào?


21

Tài liệu PostGIS tuyên bố rằng ST_PointOnSurface"MỘT ĐIỂM được đảm bảo nằm trên bề mặt". Có vẻ như chức năng này có thể được triển khai một cách tầm thường để đưa ra kết quả thỏa mãn tài liệu nhưng cung cấp ít tiện ích trong thế giới thực, mặc dù tôi chắc chắn rằng PostGIS cung cấp một triển khai không tầm thường.

Phần giới thiệu này về PostGIS cung cấp một so sánh và độ tương phản tốt ST_Centroidvới ST_PointOnSurfacevà nói rằng "[ST_PointOnSurface] đắt hơn về mặt tính toán so với hoạt động của centroid".

Có một lời giải thích kỹ lưỡng hơn về cách ST_PointOnSurfacetính toán? Tôi đã sử dụng ST_Centroid, nhưng đã gặp một số trường hợp cạnh trong dữ liệu của tôi, nơi trung tâm nằm ngoài hình học. Tôi tin rằng đó ST_PointOnSurfacelà sự thay thế chính xác, nhưng tên hàm và tài liệu không có chỗ cho sự không chắc chắn.

Hơn nữa, chi phí tính toán ST_PointOnSurfacephát sinh ngay cả khi trọng tâm đã nằm trong hình học chưa?


Nó tồn tại chính xác vì trọng tâm của đa giác không lồi không phải luôn luôn được bao gồm trong nó. Nó không liên quan gì đến độ cao và DEM nếu đó là phần khó hiểu của cái tên. Chi tiết triển khai được kiểm tra tốt nhất trong mã, nhưng tôi tin rằng bạn sẽ nhận được câu trả lời tốt hơn trên GIS.se.
lynxlynxlynx

Điểm tốt trên GIS.se. Có cách nào để di chuyển câu hỏi này không? Tôi hiểu tại sao cả hai chức năng tồn tại. Tôi tìm thấy cái tên khó hiểu bởi vì có vô số điểm trên bề mặt của các đa giác đa giác mà tôi đang làm việc. Tuy nhiên, chỉ có một tập hợp con nhỏ của những điểm đó phục vụ mục đích của tôi. Tôi muốn biết tôi đang nhận được một điểm có ý nghĩa đối với cách tôi muốn sử dụng nó.

Câu trả lời:


24

Dựa trên một vài thí nghiệm, tôi nghĩ ST_PointOnSurface()hoạt động đại khái như thế này, nếu hình học là một đa giác:

  1. Theo dõi một tia đông-tây, nằm giữa nửa phía bắc và phía nam của đa giác.
  2. Tìm đoạn dài nhất của tia cắt với đa giác.
  3. Trả lại điểm đó là một nửa dọc theo phân khúc đã nói.

Điều đó có thể không có ý nghĩa, vì vậy đây là một bản phác thảo của một đa giác với một tia chia nó thành một phần phía bắc và phía nam:

             _
            / \             <-- northern extent
           /   \
          /     \
         /       \
        /         \      __
       /           \    /  \
      /_ _ _ P _ _ _\  / _ _\  P = point-on-surface
     /               \/      \
    /                         \
   /            C              \   C = centroid
  /                             \
 /                              /
/______________________________/  <-- southern extent

Do đó, ST_PointOnSurface()ST_Centroid()thường là các điểm khác nhau, ngay cả trên đa giác lồi.

Lý do duy nhất cho "bề mặt" trong tên, tôi nghĩ, là nếu hình học có các đường 3D thì kết quả sẽ chỉ đơn giản là một trong các đỉnh.

Tôi đồng ý rằng giải thích nhiều hơn (và đặt tên tốt hơn) sẽ hữu ích và hy vọng một lập trình viên GEOS có thể làm sáng tỏ hơn về vấn đề này.


3
Nhìn vào mã libgeos , tôi tin rằng bạn đã đúng. Bộ chia ngang được tìm thấy, sau đó điểm giữa của giao lộ rộng nhất được sử dụng.
mjobrien
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.