Mam dwa pliki kształtów, Point i Polyline. Próbuję zapełnić moją warstwę polilinii identyfikatorem danych punktowych (systemID), w którym linie zaczynają się tam, gdzie kończą; na przykład. utwórz dwie kolumny (od i do). Linie mają już przypisany kierunek przepływu. Korzystam z narzędzi ArcHydro, ale Arcpy też jest w porządku.
W ArcHydro próbowałem użyć narzędzi atrybutów> Wygeneruj z / do węzłów dla linii, ale tworzy wartości dla Do i Od, które nie pochodzą z moich danych punktowych. Inną moją alternatywą było użycie funkcji do wierzchołków i połączenie wyniku z moją tabelą danych punktów, aby uzyskać identyfikator systemowy. Ale wtedy musiałbym również zaktualizować warstwę polilinii. Jestem pewien, że jest na to łatwiejszy sposób.
Uwaga: nie wszystkie linie mają punkty w wierzchołkach, puste wartości są dla nich odpowiednie.
źródło
Odpowiedzi:
Czasami lepiej nie używać gotowego rozwiązania. Właśnie dlatego sugeruję
Idź 2, ale użyj ostatniego punktu, aby przypisać TO nodeID
źródło
Zrobiłem to samo kilka miesięcy temu. Użyłem arcpy, ale skrypt jest o wiele za długi, aby opublikować tutaj, więc dam ci zarys tego, co zrobiłem.
Użyłem łączenia przestrzennego, aby wykryć, które punkty / węzły znajdują się w obrębie określonego elementu linii.
Ponieważ połączenie przestrzenne nie bierze pod uwagę kierunku przepływu, użyłem łuku, aby ustalić, który był punktem początkowym, a który końcowym. Udało mi się to zrobić za pomocą arcpy opisać funkcja ekstraktu koordynować informacje o wierzchołkach Początek / Koniec funkcji linii i porównano je z wartościami współrzędnych podłączonych punktów.
Wreszcie, kiedy już się zorientowałem, które punkty do / z których są, użyłem funkcji setValue do wypełnienia pól do / z w oryginalnym zestawie danych polilinii.
Oczywiście jest w tym nieco więcej, ale nakreśliłem główne punkty.
źródło
Zainspirowałem się @FelixIP, ale chciałem napisać rozwiązanie bez łączenia lub tworzenia dodatkowych plików, ponieważ moja sieć jest dość duża z 400 kB + potokami i 500 kB + węzłami.
Geometryczna budowa sieci wymusza współbieżność X, Y węzłów i końców rur. Możesz uzyskać dostęp do tych lokalizacji za pomocą żetonów kształtów w arkadowych kursorach i dopasować je. Żetony kształtów dla linii zwracają tablicę wierzchołków w kolejności, w której zostały narysowane. W mojej sieci kolejność rysowania rur jest w dużym stopniu kontrolowana, ponieważ używamy tego do ustalania kierunków przepływu. Tak więc pierwszy wierzchołek jest początkiem potoku, a ostatni wierzchołek jest końcem potoku.
Odniesienie: ASSETID = identyfikator potoku, UNITID = identyfikator węzła na początku potoku, UNITID2 = identyfikator węzła na końcu potoku.
źródło