Mamy warstwę o nazwie Hydrografia, która jest obszarem wodnym dla danego zadania. Mam punkt stacji i punkt docelowy. Muszę obliczyć odległość między tymi dwoma punktami, ale wewnątrz hydrografii. (łodzie nie mogą płynąć po lądzie)
Obliczenie odległości DefenceService wygląda na przejezdne, ale wydaje się, że jest w linii prostej, ponieważ nie przyjmuje żadnych danych rastrowych jako danych wejściowych. Wydaje się, że euklides jest prawie na miejscu, ale nie mogę znaleźć niczego, co byłoby proste.
Korzystam z ArcGIS Explorer 2500, ArcGIS dla Server 10.1 SP1 Enterprise, a nasze usługi i narzędzia piszemy w języku C #.
Mam ładowanie hydrografii, tworzenie punktów IP, ale nie wiem, co robić dalej!
Poproszę o pomoc.
arcgis-server
arcgis-10.1
c#
distance
arcgis-explorer
SASS_Shooter
źródło
źródło
Odpowiedzi:
Użyj narzędzi Odległość kosztów i Ścieżka kosztów z rozszerzenia Analityka przestrzenna.
Możesz utworzyć raster ze swoich wielokątów hydrograficznych. Następnie upewnij się, że komórki rastrowe reprezentujące wodę mają niską wartość (np. 1), a pozostałe komórki rastrowe mają wysoką wartość (np. 1000). Następnie możesz użyć tego rastra jako rastra kosztu odległości w narzędziu ścieżki kosztów .
źródło
Zrobiłem coś podobnego dla linii środkowej nad kanałami i naturalnymi ciekami wodnymi. Podejście, które zastosowałem, polegało na TIN punktów, podzieleniu TIN, a następnie utwórz drugi TIN z oryginalnych wierzchołków, a dwusieczne następnie przechodzą, używając opcji odrzucania zmodyfikowanego algorytmu Dijkstry, gdy tylko okaże się, że nie będą najprostszym rozwiązaniem . Modyfikacja polegała na tym, że linia mogła zakończyć się w punkcie „rozwiązania” lub na poprzedniej ścieżce, jeśli taka już istnieje. Nie ma na to gotowego rozwiązania, a jeśli nie jesteś programistą lub przynajmniej jesteś w stanie uzyskać dobrą stronę, jedyną opcją jest prześledzenie z przesunięciem do geobazy i sprawdzenie pole shape_length.
TIN = trójkątna nieregularna sieć, sieć punktów i linie łączące, dzięki czemu każdy punkt jest połączony z najbliższymi sąsiadami i żadne linie nie przecinają się. W tym celu patrz http://en.wikipedia.org/wiki/Delaunay_triangulation . Nie używałem obiektów ESRI TIN, zamiast tego znalazłem kod do triangulacji i zachowałem je w pamięci, coś w rodzaju http://www.codeproject.com/Articles/492435/Delaunay-Triangulation-For-Fast-Mesh-Generation .
Algorytm najkrótszej ścieżki można znaleźć na stronie http://en.wikipedia.org/wiki/S_algorytm Dijkstry. Ma ładny obraz; pomimo skomplikowanej nazwy jest naprawdę dość prosta.
Z punktów tworzących linie wykonałem triangulację Delaunaya, a następnie znalazłem punkt środkowy każdej krawędzi trójkąta (podstawowa geometria ... średnia X, średnia Y), a następnie wstawiłem punkty, które wpadły w wielokąty do siatki, co daje środkowa ścieżka i linki do wszystkich wierzchołków na granicy. Następnie wykluczając fasety, które biegną wzdłuż brzegów cieku, prześledź sieć za pomocą algorytmu Dijkstry, a ostatecznie znajdziesz ścieżkę z punktu A do punktu B biegnącą w przybliżeniu w centrum centrum cieków wodnych. Będzie wiele możliwych ścieżek, więc utrzymałem wagę na każdym wierzchołku i zatrzymałem ścieżkę, gdy łączna długość przekroczyła już zarejestrowaną długość, a jeśli była mniejsza, zaktualizuj wierzchołek krótszą łączną długością - zmniejsza to ścieżki, które są śledzone, a może być ich całkiem sporo;
Alternatywnie, po triangulacji możesz zmienić krawędzie trójkątów w dwie linie punktowe jako klasę obiektów, zbudować sieć, a następnie wykonać śledzenie. Jestem pewien, że procedury śledzenia ESRI są znacznie szybsze niż moje, ale miałem określoną potrzebę i nie mogłem jej rozwiązać za pomocą sieci geometrycznych.
źródło
Dodam to dla każdego, kto w przyszłości przeczyta ten wątek.
Oto wszystko, czego nauczyłem się, zagłębiając się w ten problem i uzyskując pełną odległość między punktami.
Nasz pierwszy problem wynikał ze statycznej natury RasterCatalog. Zmiana rastrów, na których jest to oparte, NIE zmienia rastra w katalogu RasterCatalog. Okazało się, że nasza miała starożytną wersję, której nigdzie nie było w pobliżu mapy wybrzeża. Wyciągnięta lekcja: Odbuduj katalog Raster za każdym razem, gdy zmienisz rastry, na których jest oparty.
Dystansowy raster z dodanymi wagami staje się dość niewygodny do pracy. Spójrz na następujący scenariusz: Oryginalna wartość rastra to 1 łączna odległość, na którą chcę spojrzeć, to 117 km. Rozmiar komórki wynosi 1 metr. Jeśli raster ma teraz wartość ważoną 48, to łączna odległość, na którą chcę spojrzeć, wynosi 117 km * 48 !!! Zatem odległość w metodzie CostDistance nie jest odległością komórki, ale odległością ważoną, najwyraźniej dodając wartość w każdej komórce, aż suma każdej komórki = wartość przekazana dla całkowitej odległości. Nawet jeśli sam rozmiar komórki wynosi 1 metr !!!
Raster odległości jest skupiony na punkcie początkowym. Kiedy wywołujesz procedurę CostDistance, nie chcesz uwzględniać punktu początkowego na tej liście. jeśli to zrobisz, otrzymasz jeden punkt w odległości 0. (to nawet zakłopotane wsparcie ESRI)
Podczas gdy wiele metod wykorzystuje Obwiednię do ograniczenia swojego procesu, dwie najdroższe, ustawiając wartość rastra i wyodrębniając raster bez obszaru w wielokącie, ignorują wszystkie ustawienia obwiedni i automatycznie stosują to do całego rastra. Na nieszczęście dla nas możemy to tylko skrócić, tworząc masywne nakładające się segmenty i przypisując segment do określonego obszaru w ramce. Robiąc to, musimy jednak uważać (co jest trudne), aby główny obszar operacji nie istniał w niewłaściwym obszarze nakładającym się. (innymi słowy, wszystkie nasze nakładki muszą być starannie wybrane, aby nie zawierały żadnych głównych punktów zainteresowania!). Powodem tego jest to, że nawigujemy w katalogu Raster, wybierając właściwy raster na podstawie tego, gdzie istnieje wybrana stacja Straży Przybrzeżnej. Aby jeszcze bardziej skomplikować nasz proces, nakładanie się musi umożliwiać nam nawigację w odległości do 120 km od naszego punktu początkowego bez zbiegania z krawędzi mapy i nienakładania się na inne główne punkty zainteresowania. Do licha.
Jedyne inne rzeczy, których się nauczyłem, to łatwość matematyki do rastra, ale jeśli chcesz albo „wbić dziurę” w rastrze (zablokowanie), albo ustawić pączka o wartości, a wnętrze pączka ma wartość 1 (opóźnienia jak blokada) kończy się złożoną kombinacją narzędzi i wywołań ArcObject. Co prowadzi do wyciągniętej ostatniej lekcji: ArcObjects nie może zrobić wszystkiego. Czasami jestem zmuszony do robienia rzeczy za pomocą powolnych, uciążliwych narzędzi, które wszystkie zostały napisane w pythonie. Dowiedziałem się również, że twórcy narzędzi ESRI nie wiedzieli nic o utrzymywaniu spójności. Czasami korzystali z bazy danych rastrowych, innym razem potrzebowali rastra, a czasami potrzebowali zestawu funkcji. I nie zwracają danych w tym samym formacie, którego wymagają na wejściu!
Zmieszany? Nie martw się, to ESRI.
źródło