Uzyskiwanie granicy obrazu rastrowego jako wielokąta w ArcGIS Desktop?


28

Mam prostokątny obraz rastrowy w ArcGIS Desktop.

Jak mogę stworzyć wielokąt, który jest tylko zakresem obrazu rastrowego?

To znaczy, chcę mieć warstwę wielokąta z pojedynczym czworobokiem, który jest krawędzią obrazu.

Próbowałem po prostu wykonać konwersję Raster-> Wielobok, ale to próbuje wykorzystać dane z obrazu do wygenerowania konturu - wszystko, czego chcę, to kontur krawędzi obrazu.

Używam ArcGIS Desktop 10.

Odpowiedzi:


33

Jeśli masz Spatial Analyst , możesz:

  1. Pomnóż raster przez 0, aby utworzyć raster o stałej wartości za pomocą kalkulatora rastrowego. (pamiętaj, aby przekonwertować go na liczbę całkowitą, inaczej krok 2 nie zadziała)
  2. Konwertuj wynik kroku 1 na wielokąt za pomocą narzędzia Raster na wielokąt.

Inne rozwiązanie:

Jeśli posiadasz licencję 3D Analyst , możesz użyć narzędzia Domena rastrowa w obszarze 3D Analyst> Konwersja> z rastra (jednak nie ma płynnej funkcji)


12

Możesz użyć narzędzia Raster Domain z 3D Analyst, aby utworzyć wielokąt o tym samym zasięgu co dane rastrowe


Witamy w GIS SE! Czy możesz dodać odniesienia do swojej odpowiedzi? W ten sposób byłoby bardziej solidne.
RK

Narzędzie Raster Domain wykonało pracę idealnie! Tworzy kontur lub granicę danych rastrowych.

1
Słowo ostrzeżenia o tym narzędziu - utworzony obwiednia to zakres danych rastrowych rozpoczynający się i kończący w CENTRUM pikseli, a nie na zewnętrznej krawędzi pikseli. Właśnie go wypróbowałem i pomyślałem, że zwrócił zewnętrzną ramkę ograniczającą rastra, ale po powiększeniu zobaczysz, że ramka zaczyna się w środku piksela.
fbiles,

W rzeczywistości istnieje parametr dla metody IRasterDomainExtractor.ExtractDomain, który kontroluje, czy używa on środkowej czy zewnętrznej krawędzi pikseli / komórek.
Preston

To jest doskonałe! Jedno narzędzie i mam zarys wielokąta mojego rastra. Dzięki!
user3281667,

11

A co z prostą digitalizacją? Kliknij, kliknij, kliknij, kliknij, gotowe.


8
Nie jestem pewien, dlaczego ta opcja została odrzucona. Możesz znaleźć współrzędne narożników zasięgu i utworzyć wierzchołki na tych współrzędnych. Można go nawet wykorzystać do analizy. Jeśli to tylko do wyświetlenia, kliknięcie-kliknięcie-kliknięcie działa świetnie.
Baltok,

3
Powiedziałbym, ponieważ raster może mieć nieregularny kształt i, w zależności od złożoności, może skutkować dość męczącą pracą digitalizacyjną
Phil Henley

4
Ale OP stwierdził, że jest prostokątny. Wydaje mi się to dość prostą pracą. Dzięki przybliżeniu i dokładności różnica między rzeczywistym konturem rastrowym a konturem cyfrowym byłaby nieistotna dla każdej aplikacji w świecie rzeczywistym.
Matt

10

Możesz użyć narzędzia Build Footprint w Zestawie danych do zarządzania danymi. Musisz utworzyć zbiór danych mozaiki ze swojego rastra.

Utwórz nową mozaikę w geobazie pliku, dodaj swój raster.

Otwórz swoją mozaikę w ArcMap i wyodrębnij ślad.

Tak bym zrobił.


8

Używam tego prostego skryptu python, który tworzy klasę cech wielokąta z zakresem wszystkich rastrów obecnych w folderze. Aby go użyć, możesz utworzyć narzędzie w ArcToolbox lub po prostu zmienić zmienne InFolder i Dest (Destination).

import arcpy,os

InFolder = arcpy.GetParameterAsText(0)
Dest=arcpy.GetParameterAsText(1)

arcpy.env.workspace=InFolder
#The raster datasets in the input workspace
in_raster_datasets = arcpy.ListRasters()

arcpy.CreateFeatureclass_management(os.path.dirname(Dest),
                                   os.path.basename(Dest),
                                   "POLYGON")
arcpy.AddField_management(Dest,"RasterName", "String","","",250)
arcpy.AddField_management(Dest,"RasterPath", "String","","",250)

cursor = arcpy.InsertCursor(Dest)
point = arcpy.Point()
array = arcpy.Array()
corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]
for Ras in in_raster_datasets:
    feat = cursor.newRow()  
    r = arcpy.Raster(Ras)
    for corner in corners:    
        point.X = getattr(r.extent, "%s" % corner).X
        point.Y = getattr(r.extent, "%s" % corner).Y
        array.add(point)
    array.add(array.getObject(0))
    polygon = arcpy.Polygon(array)
    feat.shape = polygon
    feat.setValue("RasterName", Ras)
    feat.setValue("RasterPath", InFolder + "\\" + Ras)
    cursor.insertRow(feat)
    array.removeAll()
del feat
del cursor  

może powiedzieć nam szczegółowo, jak korzystać z tego kodu. Chcę go użyć w pliku rastrowym .asc. Moje obrazy różnią się w innym podfolderze.
GIS Data Butcher

1
Odpowiedź od jeba zadziałała dla mnie, nie mam wystarczającej liczby przedstawicieli, aby głosować na niego. @GIS Data Butcher Zapisz całe źródło w pliku script.py i uruchom go z okna Pythona w ArcMap. Możesz użyć następującego polecenia w oknie Pythona, aby wykonać skrypt z pliku. > execfile (r'd: \ temp \ script.py ')
Asad,

doskonały!! Zastanawiam się, czy istnieje sposób na narzędzie do odczytywania podfolderów?
raphael

@ raphael, na pewno, musisz po prostu zaimplementować w skrypcie standardowy python os.listdir lub os.walk.
jeb

@jeb tak, mam pojęcie ... bot, jestem w tym bardzo nowy i nie mogę sprawić, żeby działało ... czy możesz mi pomóc?
raphael

4

Prostym sposobem jest również użycie narzędzia Przeklasyfikuj, w którym należy kliknąć przycisk Klasyfikuj i zmienić liczbę klas na 1. Kliknij Ok. Teraz wyjściowy raster można łatwo przekonwertować za pomocą narzędzia do konwersji rastra na wielokąt. ;)


4

Myślę, że przeklasyfikowanie i przekształcenie rastra w wielokąt może być zbyt czasochłonne. Moim zdaniem najłatwiej to zrobić:

  • Uzyskaj maxX, maxY, minX, minY (można to zrobić w Pythonie za pomocą polecenia opisz)
  • Uruchom opcję Utwórz kabaretkę o zasięgu jak wyżej i liczbie wierszy / kolumn jako 1

Jeśli masz wiele rastrów, należy to zrobić w Pythonie, aby w ciągu kilku sekund utworzyć setki śladów.


0

W ArcCatalog możesz utworzyć katalog rastrowy w .gdb (Narzędzia do zarządzania danymi-> Raster). Brak zarządzania jest w porządku. Następnie kliknij prawym przyciskiem myszy i załaduj (jeśli rastry tylko siedzą w folderze, a następnie „załaduj z obszaru roboczego”. Jeśli załadujesz katalog rastrowy do ArcMap, możesz kliknąć prawym przyciskiem myszy-> dane-> eksportować ślad, jako plik kształtu lub klasę funkcji. Plik kształtu będzie miał pole „nazwa” wypełnione nazwą rastra.

Katalog Raster automatycznie wyświetli zakresy, ale musiałem je wysłać do kogoś, kto nie korzystał z ArcGIS.


0

Użyj narzędzia „Raster to Polygon” w przyborniku narzędzi do konwersji. Usuń zaznaczenie pola upraszczania wielokątów. To stworzy dokładnie to, czego chcesz.


8
Czy jesteś pewien, że nie tworzy to po prostu ogromnego bałaganu wielokątów, po jednym dla każdego ciągłego zestawu pikseli o równej wartości na oryginalnym obrazie?
whuber

Zawsze możesz dodać rozpuszczenie, aby uzyskać zakres poli. Założę się jednak, że rozwiązanie Pythona wymienione przez @jeb jest szybsze.
GeoJohn,

0

Narzędzie „Domena rastrowa” utworzy wielokąt wokół rastra o nieregularnym kształcie. Uważam, że wymaga to licencji na rozszerzenie analityka 3d.


0

Korzystanie z ArcCatalog jest najlepszą opcją. Utwórz zbiór danych mozaiki z dostępnych rastrów. Zdefiniuj „BRAK WARTOŚCI” w mozaice, aby uniknąć włączenia wielokąta w tło rastra. Zbuduj ślady za pomocą metody radiometrycznej. Otwórz zestaw danych mozaiki w ArcGIS i wyeksportuj Footprints do pliku shp. Świetny sposób na uzyskanie granic mozaiki ...


0

Jeśli próbujesz uzyskać zarys rastra DEM, musisz wykonać następujące czynności

Jeśli masz Spatial Analyst i 3d Analyst, możesz:

  1. pomnóż raster przez 0, aby utworzyć raster o stałej wartości za pomocą kalkulatora rastrowego.
  2. Konwertuj wyniki z kroku 1 na liczbę całkowitą rastrową za pomocą „INT (Tool)”. Jest to konieczne do następnego kroku.
  3. przekonwertuj wynik kroku 2 na wielokąt za pomocą narzędzia Raster to Polygon (działa tylko z liczbami całkowitymi rastrowymi).

Cześć Seamster02, witamy w GIS Stack Exchange :) Jak napisano, nie różni się to znacznie od przyjętej odpowiedzi, gis.stackexchange.com/a/22016/108 .
matt wilkie
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.