Mới tham gia ArcGIS và muốn tính khoảng cách giữa hai điểm ăn cá khi cá bơi bơi


9

Chúng tôi có một lớp có tên là Thủy văn là vùng nước cho một nhiệm vụ nhất định. Tôi có một điểm trạm và một điểm mục tiêu. Tôi cần tính khoảng cách giữa hai điểm đó nhưng bên trong thủy văn. (thuyền không thể đi trên đất liền)

Tính toán khoảng cách DefenseService trông có thể vượt qua nhưng dường như nó nằm trên một đường thẳng vì nó không lấy bất kỳ Raster nào làm đầu vào. Euclide dường như gần như ở đó nhưng tôi không thể tìm thấy bất cứ điều gì thẳng tiến.

Tôi đang sử dụng ArcGIS Explorer 2500, ArcGIS cho Server 10.1 SP1 Enterprise và chúng tôi đang viết các dịch vụ và công cụ của mình bằng C #.

Tôi có tải về thủy văn, việc tạo ra các IPoint, nhưng không biết phải làm gì tiếp theo!

Bất kỳ trợ giúp đánh giá cao, xin vui lòng.


1
Có 'không có câu trả lời được chấp nhận' ở đây nhưng tôi nghĩ rằng đó là một câu hỏi rất giống nhau: gis.stackexchange.com/questions/33799/...
Mapperz

Mức độ phấn khích của tôi bắt đầu tăng lên ngay lập tức cho đến khi anh ấy nói anh ấy không phải là một lập trình viên. Điều này không thể được thực hiện bằng cách sử dụng các công cụ. Tôi có một cửa sổ công cụ tùy chỉnh với vị trí đã chọn và danh sách các mục tiêu. Tôi cần gọi một phương thức trên máy chủ và điền vào danh sách khoảng cách đến từng mục tiêu.
SASS_Shooter

Là dòng lớp thủy văn hoặc đa giác của bạn?
Conor

Nó là đa giác mà chúng ta chuyển đổi thành raster.
SASS_Shooter

Trường hợp sử dụng của bạn là một chút bối rối. Bạn đang cố gắng tìm khoảng cách ngắn nhất từ ​​hai điểm dọc theo bờ hồ? Hay các trạm của bạn tương ứng với một trạm sông (nằm dưới đáy hồ)?
DPierce

Câu trả lời:


4

Sử dụng Công cụ Khoảng cách Chi phí và Đường dẫn Chi phí từ Tiện ích Phân tích Không gian.

Bạn có thể tạo Raster từ Đa giác thủy văn. Sau đó, đảm bảo rằng các ô raster đại diện cho nước có giá trị thấp (ví dụ 1) và các ô raster khác có giá trị cao (ví dụ 1000). Sau đó, bạn có thể sử dụng raster này làm raster khoảng cách chi phí trong Công cụ đường dẫn chi phí .


Có - Tôi thấy rằng Khoảng cách chi phí lấy một raster làm đầu vào và các điểm của tôi trên raster thủy văn để bắt đầu và kết thúc. Giá trị được trả về là một Polyline mà từ đó tôi có thể nhận được độ dài.
SASS_Shooter

1

Tôi đã làm một cái gì đó tương tự cho centrelines trên kênh và kênh nước tự nhiên. Cách tiếp cận mà tôi đã sử dụng là TIN các điểm, chia đôi TIN sau đó tạo TIN thứ hai từ các đỉnh ban đầu và sau đó chia đôi bằng cách sử dụng các tùy chọn loại bỏ thuật toán Dijkstra đã sửa đổi ngay khi rõ ràng rằng chúng sẽ không tạo thành giải pháp đơn giản nhất . Việc sửa đổi là dòng có thể chấm dứt tại điểm 'giải pháp' hoặc đường dẫn trước đó nên tồn tại. Không có giải pháp vượt trội nào cho việc này và nếu bạn không phải là lập trình viên hoặc ít nhất là ở một vị trí để có được mặt tốt của một lựa chọn duy nhất của bạn là theo dõi một phần bù vào cơ sở dữ liệu địa lý và xem xét trường shape_length.


TIN = Mạng không đều hình tam giác, một mạng các điểm và các đường kết nối sao cho mỗi điểm được kết nối với các lân cận gần nhất và không có đường nào giao nhau. Để biết điều này, hãy xem http://en.wikipedia.org/wiki/Delaunay_triangulation . Tôi đã không sử dụng các đối tượng ESRI TIN, thay vào đó tôi đã tìm thấy một số mã cho phép tam giác và giữ chúng trong bộ nhớ, đại loại như http://www.codeproject.com/Articles/492435/Delaunay-Triangulation-For-Fast-Mesh-Generation .

Đối với thuật toán đường dẫn ngắn nhất, hãy xem http://en.wikipedia.org/wiki/Dijkstra 's_alacticm, nó có một hình ảnh đẹp; mặc dù tên phức tạp nhưng nó thực sự khá đơn giản.

Từ các điểm tạo thành các đường tôi đã thực hiện tam giác Delaunay sau đó tìm điểm giữa của mỗi cạnh của tam giác (hình học cơ bản ... trung bình X, trung bình Y) và sau đó chèn các điểm rơi trong đa giác vào lưới tạo ra một đường dẫn trung tâm và liên kết đến tất cả các đỉnh trên đường biên. Sau đó, loại trừ các khía cạnh đi theo bờ sông theo dõi mạng bằng thuật toán của Dijkstra và cuối cùng bạn sẽ tìm thấy một con đường từ điểm A đến điểm B chạy dọc theo trung tâm của dòng nước. Sẽ có rất nhiều đường dẫn có thể để tôi giữ trọng số trên mỗi đỉnh và dừng một đường dẫn khi độ dài tích lũy vượt quá độ dài đã ghi và nếu nó nhỏ hơn thì cập nhật đỉnh với độ dài tích lũy ngắn hơn - điều này làm giảm lượng những con đường được vạch ra, và có thể có khá nhiều;

Thay phiên, một khi đã được tam giác hóa, bạn có thể biến các cạnh của hình tam giác thành hai đường điểm như một lớp đối tượng, xây dựng một mạng và sau đó thực hiện theo dõi. Tôi chắc chắn rằng các thói quen theo dõi ESRI nhanh hơn nhiều so với của tôi nhưng tôi có một nhu cầu cụ thể và không thể giải quyết nó bằng các mạng hình học.


Michael - Tôi là một nhà phát triển C #. Rất mới đối với ArcGIS và các công cụ lập trình của họ. Tôi đã tìm thấy một giải pháp vượt trội bằng cách sử dụng Nhà phân tích quân sự nhưng ESRI trong tất cả sự khôn ngoan của họ đang bỏ nó. Bạn có ý nghĩa gì bởi TIN các điểm và thuật toán Dyjkstra bạn đã sử dụng?
SASS_Shooter

1

Tôi đang thêm điều này cho bất cứ ai trong tương lai đọc chủ đề này.

Đây là tất cả những gì tôi đã học được khi đào sâu vào vấn đề này và nhận được một khoảng cách hoàn toàn giữa các điểm gọi.

Vấn đề đầu tiên của chúng tôi bắt nguồn từ bản chất tĩnh của RasterCatalog. Thay đổi các raster mà điều này dựa trên KHÔNG thay đổi raster bên trong RasterCatalog. Hóa ra chúng ta đã có một phiên bản cổ xưa không nơi nào có bản đồ bờ biển. Bài học rút ra: Xây dựng lại RasterCatalog MERYI LẦN bạn thay đổi Raster mà nó dựa trên.

Khoảng cách Raster với trọng lượng được thêm vào trở thành một thứ khá cồng kềnh để làm việc. Nhìn vào kịch bản sau: Giá trị ban đầu của raster là 1 tổng khoảng cách tôi muốn xem là 117 km. Kích thước tế bào là 1 mét. Nếu raster bây giờ có giá trị trọng số là 48, thì tổng khoảng cách tôi muốn tìm trở thành 117 km * 48 !!! Vì vậy, khoảng cách trong phương pháp CostDistance không phải là khoảng cách ô mà là khoảng cách có trọng số, rõ ràng là thêm giá trị trong mỗi ô cho đến khi tổng của mỗi ô = giá trị được truyền cho tổng khoảng cách. Ngay cả khi kích thước tế bào chính nó là 1 mét !!!

Các raster khoảng cách là tất cả tập trung vào một điểm xuất phát. Vì vậy, khi bạn gọi thói quen CostDistance, bạn không muốn đưa điểm gốc vào danh sách đó. nếu bạn làm, bạn sẽ nhận được một điểm với khoảng cách bằng 0. (hỗ trợ ESRI thậm chí còn bị vấp ngã này)

Mặc dù nhiều phương pháp sử dụng Phong bì để hạn chế quy trình của họ, hai phương thức đắt nhất, đặt giá trị cho raster và trích xuất raster không có vùng trong đa giác, bỏ qua tất cả các cài đặt bao và tự động luôn áp dụng điều này cho toàn bộ raster. Thật không may cho chúng tôi, chúng tôi chỉ có thể rút ngắn điều này bằng cách tạo các phân đoạn chồng chéo lớn và gán một phân đoạn cho một khu vực được đóng hộp cụ thể. Nhưng khi làm như vậy, chúng ta phải cẩn thận (rất khó) rằng một khu vực hoạt động chính không tồn tại trong khu vực chồng chéo sai. (nói cách khác, tất cả các phần trùng lặp của chúng tôi phải được chọn cẩn thận để không chứa bất kỳ điểm quan tâm chính nào!) Lý do cho điều này là chúng tôi điều hướng RasterCatalog chọn raster chính xác dựa trên nơi trạm Cảnh sát biển được chọn tồn tại. Để làm phức tạp thêm quá trình của chúng tôi, sự chồng lấp phải cho phép chúng tôi điều hướng cách điểm xuất phát của chúng tôi tới 120km mà không phải chạy ra khỏi rìa bản đồ và không bị chồng chéo với các điểm quan tâm chính khác. Sheesh.

Điều khác duy nhất tôi học được là rất dễ để toán cho người raster nhưng khi bạn muốn 'chọc một lỗ' trong raster (chặn) hoặc đặt một cái bánh rán có giá trị và bên trong chiếc bánh rán có một giá trị là 1 (độ trễ như khóa) bạn kết thúc với sự kết hợp phức tạp của các công cụ và các cuộc gọi ArcObject. Điều này dẫn đến bài học cuối cùng đã học: ArcObjects không thể làm mọi thứ. Vì vậy, đôi khi tôi bị buộc phải làm mọi thứ trong các công cụ chậm chạp, cồng kềnh, tất cả đều được viết bằng python. Tôi cũng học được rằng các nhà phát triển công cụ ESRI không biết gì về việc duy trì tính nhất quán. Đôi khi, họ lấy một cơ sở dữ liệu raster vào những thời điểm khác, họ cần một raster và đôi khi họ cần một bộ tính năng. Và họ không trả lại dữ liệu theo cùng định dạng mà họ yêu cầu làm đầu vào!

Bối rối? Đừng lo lắng, đó là ESRI.

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.