2013-03-08 27 views
5

Tôi muốn phát hiện, ở phía máy chủ chỉ sử dụng C#, cho dù tọa độ Vĩ độ/Kinh độ nằm trong một khu vực (đa giác) được tạo thành từ các điểm dựa trên Latitude/Kinh độ. Tôi tin rằng đúng cách để làm điều này là raycasting, nhưng có lẽ đã có một C# thực hiện ra khỏi đó vì nó không tầm thường?Phát hiện nếu điểm trong Vĩ độ/Kinh độ dựa Polygon

Ngoài ra, tôi hiểu rằng SQL Server có một số chức năng hình học như STIntersects nhưng để sử dụng mà tôi cần cả hai SQL Server 2008 đang chạy và từng tấm séc sẽ bao gồm một kết nối cơ sở dữ liệu đó là không mong muốn.

+0

Thuật toán thay thế chung hơn sẽ là hỏi hoặc tìm kiếm "Cách phát hiện xem một điểm có nằm trong một đa giác có hình dạng không đều" hay không. Tôi không thực sự biết, tôi có thể có thể viết một cái gì đó từ đầu, nhưng nó chắc chắn sẽ không phải là đoạn mã hiệu quả nhất ... không phải lúc đầu anyway. – Nevyn

Trả lời

0

Tôi đã bỏ qua trên internet một chút và tìm thấy this link.

Ví dụ được viết bằng C, nhưng có vẻ như nó rất dễ dàng được điều chỉnh để làm việc với các tọa độ C# và Long/Lat. Tuy nhiên, bạn cần ghi nhớ các đường chéo (NS/EW), và thêm mã để bù lại khi cần thiết, hoặc thực hiện chuyển đổi thập phân các giá trị LatLong trước khi chạy hàm (Tây và Nam được biểu diễn với các giá trị < 0).

0

Vì hình cầu là một mặt khác biệt cục bộ với mặt phẳng, bạn có thể sử dụng bất kỳ thuật toán nào hoạt động trên mặt phẳng Descartes, ví dụ: this SO question. Bạn sẽ chỉ phải làm việc dịch tọa độ nếu đa giác của bạn bao gồm một cực. Tùy thuộc vào trường hợp sử dụng của bạn, có thể bạn có thể từ chối các đầu vào đó.

+0

Có thể đáng chú ý ở đây rằng hình học vượt qua 180 kinh tuyến (nghĩa là điểm mà mặt phẳng Descartes không quấn nhưng quả địa cầu) có thể là một cái gì đó của một nhức đầu là tốt. Điểm-trong-đa giác cho GIS cần phải là 180-bọc-nhận thức nếu không bạn có thể sẽ nhận được kết quả rất kỳ quặc. – jlmt