2013-07-21 39 views
6

Tôi đang tìm cách kiểm tra xem một điểm có phải là một phần của đa giác hay không; đa giác này được tải từ một tệp.Kiểm tra xem Google Map Point có đa giác từ PHP

Tất cả các câu trả lời liên quan đến câu hỏi này được giải quyết bằng javascript, nhưng tôi yêu cầu thực hiện điều này ở phía máy chủ; điều này bởi vì kết quả không cần được hiển thị cho người dùng dưới dạng webclient, nó cần được lưu trữ và sau đó được sử dụng làm tham số để chọn nhóm người dùng (sử dụng hệ thống) bên trong khu vực đó (đa giác).

Tôi đã tìm API Google Maps cho PHP nhưng có vẻ như nó không tồn tại chút nào. Tôi đã tìm thấy this one nhưng không liên quan đến Google và cũng tập trung vào giao diện người dùng.

Tôi cũng đã tìm một API REST; nó sẽ được tương đối dễ dàng để tải nội dung vào php của tôi và phân tích nó, nhưng có vẻ như Google đặt tất cả các nỗ lực của nó trên JS API.

Có cách giải quyết nào cho vấn đề này không?

Sửa 1: Như @Spacedman yêu cầu, định dạng tập tin là một KML

Làm rõ 1: Tôi hy vọng rằng Google cung cấp một công cụ cho việc này (vì nó tồn tại với JS); phân tích cú pháp các tập tin để kiểm tra thông qua một thuật toán là một posibility và tôi sẽ phải kiểm tra xem nó hoạt động đúng.

Trả lời

6

Bạn có thử tìm kiếm cho "điểm php trong đa giác" trong công cụ tìm kiếm ưa thích của bạn? Top hit:

http://assemblysys.com/php-point-in-polygon-algorithm/

Nó sử dụng một thuật toán scanline, và có một số ví dụ. Tất cả bạn cần làm là đọc tập tin đa giác của bạn vào đúng định dạng (bạn bỏ bê để nói định dạng bạn có) và gọi hàm.

+1

Tôi đã chấp nhận câu trả lời này vì cuối cùng nó là một giải pháp, nhưng không phải là giải pháp tôi mong đợi, vì tôi nghĩ rằng Google có thể cung cấp một công cụ đơn giản (hàm, lớp) để phân tích cú pháp tệp. Cuối cùng giải pháp của tôi mất một thời gian; như bạn đã nói, phân tích cú pháp tệp và sử dụng điểm trong thuật toán đa giác. – Absulit

+0

Điều này chỉ có thể áp dụng nếu trang được tải hoàn toàn trong trình duyệt, đúng không? Bạn không thể tự động tìm ra các điểm bằng cách sử dụng một công việc cron phải không? –

1

Bạn có thể thử somthing như thế này (trong php nên tương tự):

int iCheck=0;  
for (i = 0, v = HowManyVecotrsHasThePolygon - 1; i < HowManyVecotrsHasThePolygon; v = i++) 
        { 
         if (((vectorPointLatitud[i] > ptoLatitud) != (vectorPointLatitud[v] > ptoLatitud)) && (ptoLongitud < (vectorPointLongitud[v] - vectorPointLongitud[i]) * (ptoLatitud - vectorPointLatitud[i])/(vectorPointLatitud[v] - vectorPointLatitud[i]) + vectorPointLongitud[i])) 
          iCheck++; 
        } 

nếu iCheck là cặp điểm là bên ngoài, thậm chí bên trong

Thanh toán Polygons Eric Haines. Tôi có ý tưởng từ anh ấy.

Ý tưởng là bạn đã tạo ra một Ray từ quan điểm của bạn, và kiểm tra có bao nhiêu nút giao thông giữa ray này và Đa giác vector

Thuật toán chỉ là một chút của đại số, mà bạn có thể kiểm tra trong bất kỳ cuốn sách .

Các vấn đề liên quan