Mam punkt początkowy i końcowy polilinii. Jak mogę uzyskać punkt na tej polilinii z punktów końcowych określonych przez podaną odległość.
Jak mogę to uzyskać za pomocą arcpy, pod warunkiem, że ten skrypt powinien działać w ArcView bez importowania żadnych modułów ( taka odpowiedź ). Staram się nie wprowadzać twardych wartości kodu.
Powiązane pytanie:
arcpy
line
linear-referencing
użytkownik
źródło
źródło
object.interpolate(distance[, normalized=False])
. Czy to metoda arkady? Jeśli tak, czy możesz wysłać link. Przejrzałem go, ale go nie znalazłem.Odpowiedzi:
To brzmi podobnie do „Linear Referencing”, a ten zestaw narzędzi byłby dostępny w ArcView. Dodatkowo możesz bardzo łatwo napisać skrypt do tego narzędzia.
Link do pomocy ESRI w zakresie odwołań liniowych
źródło
Bazując na twoich potrzebach, jak to określił @LouisH, korzystanie z Linear Referencing jest zdecydowanie najlepszym rozwiązaniem. Zebraliśmy trochę kodu, który powinien zaspokoić twoją potrzebę nie kodowania na sztywno elementów, ale zamiast tego żądanie ich jako parametrów.
Jako wyjaśnienie, zastosowane poniżej narzędzie odniesienia liniowego przyjmuje „Trasy”, w twoim przypadku cechy linii, i umieszcza „Zdarzenia”, w twoim przypadku punkty, wzdłuż nich na podstawie pola odległości. W rezultacie funkcja FeatureLayer jest przechowywana w pamięci, co jest przyczyną ostatniej funkcji, która kopiuje funkcje do wyjściowej klasy cech.
Edycja - jedną rzeczą do przemyślenia przy pomocy tego narzędzia i prawdopodobnie każdą operacją lokalizowania punktów na podstawie odległości od końca linii jest to, od którego końca linii zaczniesz. Na przykład narzędzie odniesienia liniowego działa w oparciu o cyfrowy kierunek linii. Ważne będzie, aby upewnić się, że masz jakiś sposób na określenie, na którym punkcie końcowym są oparte twoje pomiary.
źródło
Rozwiązanie takiego liniowego problemu odniesienia
without importing any modules
jest poza moim zasięgiem.Użyłem
Shapely
(pakiet Pythona do manipulacji i analizy geometrii geoprzestrzennych 2D. I jest na licencji BSD :-))pobierz go stąd . Wersja 2.6, która jako jedyna obsługuje archpy arcgis 10 .. Jest to prosta instalacja (rozmiar 1,5 MB)
a teraz tutaj jest skrypt do osiągania celu .. wybacz mojemu pytonowi… tylko dzisiaj dowiedziałem się o pętlach, krotkach itp. :)
Uwaga : nie zadziała, jeśli operacja ma segmenty krzywej
źródło
Znalazłem to pytanie, próbując zrobić to, co uważam za to samo. Chciałem, żeby to wszystko było zrobione za pomocą arcpy. Korzystanie z referencji liniowych nie miało dla mnie sensu, ponieważ nie mam już zdarzeń punktowych (i nie mogłem wymyślić, jak użyć LR, aby je uzyskać). Sedno tego, co ostatecznie wykorzystałem, było
Wymaga to Arc 10.1 lub nowszego; Nie byłem w stanie dowiedzieć się, czy był on dostępny poniżej poziomu licencjonowania ArcInfo, jaki posiadam (ArcView określony przez OP).
W powyższym przykładzie chciałem punktu nie w stałej odległości, ale o procent całkowitej długości linii. Aby to zrobić, podałem drugi opcjonalny argument
positionAlongLine
. Pomiń drugi argument, jeśli chcesz tylko określić odległość bezwzględną. Oto dokument .Pełniejszy przykładowy kod to
'flFL'
to moja cecha Warstwa linii, na której chcę zlokalizować punkty. Działa dość szybko.NumPyArrayToFeatureClass
był bardzo fajnym sposobem na zrzucenie wszystkich moich punktów z powrotem do FeatureClass (podziękowania dla mojego kolegi Curtisa za tę część!). Eksperymentowałem z,Append_management
ale to było trochę wolniejsze.źródło
Może to być przesada, ale jeśli masz dostęp do rozszerzenia analizy sieci, możesz utworzyć sieć z polilinii, a następnie utworzyć obszary usług wokół punktów wejściowych, określając rozmiar SA jako odległość zainteresowania. Oto pobieżny przykład z 111 metrów SA od punktu:
Następnie musisz znaleźć punkty, w których SA przecina linię.
źródło
Myślę, że można to uzyskać za pomocą metody Feature Vertices To Points (Data Management). możesz uzyskać więcej informacji tutaj .
lub możesz sprawdzić linię podziału linii w punkcie (zarządzanie danymi) tutaj .
nie są całkowicie wystarczające, ale możesz napisać własny kod ...
Mam nadzieję, że Ci to pomoże...
źródło