Jak przekonwertować plik programu Excel z kolumnami x, y na plik kształtu?

26

Jak przekonwertować plik programu Excel z kolumnami x, y na plik kształtu punktowego?

Oprócz poprawnego utworzenia pliku shapefile istnieją pewne opcjonalne wymagania:

  1. Typy kolumn (zgodnie ze specyfikacjami formatu Excela) powinny zostać zachowane (szczególnie typy dat)
  2. Nazwy kolumn należy pobrać z nagłówka
  3. Chciałbym jak to zrobić z wiersza polecenia
  4. Gdybym mógł dołączyć heterogeniczne odniesienia przestrzenne do punktów w trzeciej kolumnie, byłbym bardzo szczęśliwy :)
fmark
źródło
spójrz na to gis.stackexchange.com/questions/86369/…
AndroidNijx

Odpowiedzi:

24

Polecam używanie OGR / GDAL , który jest częścią biblioteki GDAL . OGR obsługuje format wirtualny, który umożliwia specyfikację za pomocą pliku XML. Po przekonwertowaniu arkusza programu Excel na plik CSV można wygenerować VRT w celu uzyskania dostępu do danych.

Zakładając, że masz coś takiego example.csv:

Lat,Long,Year,Name
34.0,-120.0,2010-05-01,Off Santa Rosa Island

Możesz utworzyć VRT example.vrtw następujący sposób:

<OGRVRTDataSource>
    <OGRVRTLayer name="example">
        <SrcDataSource>example.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="Long" y="Lat"/>
    </OGRVRTLayer>
</OGRVRTDataSource>

Począwszy od GDAL 1.7, możesz dodatkowo określić typy danych pól atrybutów, używając <Field>elementu wewnątrz <OGRVRTLayer>, na przykład:

    <Field name="date" src="Year" type="Date" />

Należy pamiętać, że pliki kształtów przechowują atrybuty w formacie DBASE IV , który ma mniejszą elastyczność typów danych niż Excel. Po określeniu pliku VRT możesz użyć zwykłego łańcucha narzędzi OGR do konwersji danych do pliku Shapefile:

ogr2ogr -f "ESRI Shapefile" example.shp example.vrt

Niestety, # 4 nie jest możliwe - specyfikacja pliku shapefile pozwala na pojedyncze rzutowanie (widoczne tutaj example.prjpo ostatnim kroku).

scw
źródło
Jedynym minusem tego jest to, że muszę programowo obliczyć typy danych kolumn, aby napisać <Field>znacznik. Myślę, że sam to
wymyślę
Dobrze. Jeśli chcesz zautomatyzowanego rozwiązania i mieć dostęp do ArcGIS, możesz to zrobić za pomocą narzędzia Addur XY Coordinates tinyurl.com/38jm55k , co powinno zrobić ten krok za Ciebie.
scw
Ważną kwestią jest, aby najpierw utworzyć plik Excela w formacie odpowiednim dla pliku kształtu ESRI - istnieją ograniczenia dotyczące nazw kolumn, długości nazw i jeśli używasz narzędzia Dodaj XY, w jaki sposób ESRI automatyzuje typ pola, co może powodować zagadnienia. webhelp.esri.com/arcgisdesktop/9.2/...
spg
3
Usługa online, która pomaga zbudować poprawnie sformatowany plik vrt: vrtbuilder.appspot.com
matt wilkie
9

Możesz użyć wtyczki z tekstem rozdzielanym dostarczonej z QGIS (http://qgis.org ), aby załadować plik tekstowy, a następnie zapisać go jako plik kształtu.

gsherman
źródło
Często nękają mnie błędy analizatora składni przy użyciu tego narzędzia. Jakakolwiek rada?
fmark
1
Czy masz konkretne przykłady?
gsherman
@fmark - dostaję również te błędy, i to zwykle z powodu obsługi MS
CS
6

Chociaż nie z wiersza poleceń, możesz to zrobić w aplikacji ArcGIS. Od wersji 9.3.1 wystarczy dodać XLS bezpośrednio do ArcMap. Utwórz warstwę zdarzeń XY z XLS (tj. Wybierz kolumny X, Y i ustaw swoje odniesienie przestrzenne), a następnie wyeksportuj tę warstwę zdarzeń XY do nowej .shp. Można to łatwo zautomatyzować za pomocą prostego skryptu python / VBA lub modelu w programie budującym modele . Chętnie pomożemy w tym podstawowym przepływie pracy, jeśli potrzebujesz więcej informacji.

Szymon, Szymek
źródło
1
Jeśli używasz Pythona, możesz uruchomić narzędzie geoprzetwarzania z wiersza poleceń.
jswise
6

Szukałem, ale nie mogłem znaleźć strony pomocy dotyczącej Wyświetlania danych XY w pomocy internetowej, ale proces jest prosty.

  1. Posługiwać się Dodaj dane (lub przeciągnij i upuść z okna Katalogu), aby wyszukać arkusz (w arkuszu kalkulacyjnym) i dodać go do mapy
  2. Kliknij prawym przyciskiem myszy, aby wybrać i użyć Wyświetl dane XY, aby dodać warstwę zdarzenia
  3. Kliknij prawym przyciskiem myszy właśnie utworzoną warstwę zdarzeń i użyj opcji Dane | Eksportuj dane aby utworzyć plik kształtu

Aby to zrobić, potrzebujesz jedynie poziomu licencji ArcView (Basic) ArcGIS (for) Desktop.

PolyGeo
źródło
Czy muszę coś robić z górnymi kolumnami, które nie są częścią danych?
Zoran,
Które dwie kolumny nie są częścią twoich danych? Procedura, którą opisałem, powinna wykorzystywać dowolne długie / długie kolumny, które wybierzesz do wygenerowania geometrii punktów, a następnie, myślę, przechowywać resztę jako ich atrybuty. Najlepiej jest wypróbować, a jeśli wynik nie jest zgodny z oczekiwaniami, opisz swoje obserwowane vs oczekiwane.
PolyGeo
Myślę, że źle odczytałem górę dla dwóch osób - i zakładam, że masz na myśli górny rząd (nagłówków). Powinny one stać się nazwami pól po dodaniu danych.
PolyGeo
Nie jestem pewien, czy nadal tak jest, ale spacje w nazwach nagłówków w pliku programu Excel powodowały prawdziwy ból głowy podczas dodawania XY.
Chad Cooper,
1
Ładowanie plików Excela bezpośrednio do ArcGIS działa doskonale - z wyjątkiem sytuacji, gdy nie! Rzeczy do obejrzenia: daty zniekształcone, liczby obcięte. Pierwszym krokiem do rozwiązania problemu jest zawsze wyeksportowanie do pliku CSV ze wszystkimi kolumnami zdefiniowanymi jako tekst i załadowanie go zamiast tego, aby zobaczyć, że problem występuje. To zastrzeżenie na bok. Wyświetl jako X / Y działa bardzo dobrze.
matt wilkie
4

Zawsze jest pełna przygód opcja. Możesz sam napisać plik kształtu. ESRI publikuje specyfikację plików kształtów, które możesz przeczytać tutaj:

http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Prawdopodobnie będziesz również musiał napisać plik DBF. Możesz przeczytać o formacie tutaj:

http://www.clicketyclick.dk/databases/xbase/format/dbf.html#DBF_STRUCT

Jest to niewątpliwie przesada, ale dałoby ci to przewagę nad całym procesem.

Scott Wiśniewski
źródło
Tak naprawdę to robię - użyję OGR zamiast pisać bezpośrednio plik shapefile!
fmark
2
Excel prawdopodobnie może bezpośrednio napisać DBF, chociaż miałem różne poziomy sukcesu, używając tych DBF jako składnika DBF pliku kształtu.
mwalker
Excel nie zapisuje plików dbf.
user30184
3

Osobiście wolę używać FME z Safe Software (http://www.safe.com), która nie tylko pozwala mi rysować punkty na podstawie wartości XY, ale daje mi elastyczność w przekształcaniu współrzędnych z jednej projekcji na drugą przed drukowaniem, określ typ separatora, linia początkowa (w przypadku, gdy plik tekstowy zawiera informacje nagłówka), dołącz atrybuty, jeśli plik tekstowy ma X, Y, informacje o atrybucie dla danych punktów. Jeśli chcesz wizualizować te dane w Google Earth, możesz zapisać je do formatu KML, jednocześnie określając styl punktu KML. ~ SRG

SRG
źródło
2

Jeśli chcesz wykonać inne przetwarzanie danych x, y, możesz załadować dane do postgresu, użyć geomfromtext z konkatenacją, aby utworzyć typ danych geometrii, a następnie użyć pgsql2shp, aby wyeksportować do kształtu. Takie podejście pozwoli również zachować heterogeniczne dane przestrzennego systemu odniesienia w innej kolumnie, które można następnie wykorzystać do przekształcenia wszystkich punktów we wspólny system odniesienia w db przed eksportowaniem do kształtu. Zdaję sobie sprawę, że wymaga to więcej kroków niż ogr / gdal, ale da ci dużo większą elastyczność.

John Powell
źródło
W przeszłości korzystałem z tego podejścia i jest ono dobre. Myślę, że moim konsekwentnym
problemem jest
1
Przypuszczam, że możesz napisać coś w programie Excel vba, aby najpierw zmienić kolejność kolumn, aby data, x, y były zawsze pierwszymi 3 kolumnami. Myślę jednak, że bez jakiejkolwiek konwencji nazewnictwa kolumn trudno byłoby całkowicie zautomatyzować to, co masz na myśli.
John Powell,
1

Co powiesz na ładowanie plików CSV do spatiallite, a następnie użycie OGR lub QGIS do wyeksportowania do pliku kształtu.

http://www.gaia-gis.it/spatialite-2.2/index.html

Możesz nawet eksportować bezpośrednio ze spatialite do pliku kształtu.

http://www.gaia-gis.it/spatialite-2.2/spatialite-2.2_tutorial.html#t3.1

TheSteve0
źródło
Spatialite może importować pliki Excel bezpośrednio, jeśli są one w starym formacie .xls (Excel 97-2003). Współrzędne X i Y muszą zostać przekonwertowane na geometrie SQL za pomocą importu początkowego.
user30184
Jeśli nie masz nic przeciwko korzystaniu z Javy, możesz użyć projektu POI, aby rozerwać pliki programu Excel, a następnie użyć GeoTools, aby napisać nowy
plik kształtu
0

Aby uzyskać bardziej podstawową transformację, możesz użyć transformatora 2Dpointreplacer w FME 2013. Musisz wskazać, w których kolumnach znajdują się wartości X i Y, a następnie FME przekształci te wartości na przykład w plik kształtu z punktami.
Nazwy i typy kolumn można ustawić zgodnie z wymaganiami

Zamrażać
źródło