ogr2ogr nie może przekonwertować pliku GeoJson> 200 MB

15

W odpowiedzi na moje poprzednie pytanie ( Konwertowanie pliku GeoJSON z SimpleGeo Places na plik kształtu ), walczę teraz z tym, co według mnie może być ograniczeniem „pamięci” ogr2ogr, ale nie jestem pewien. Z powodzeniem przekonwertowałem pliki zrzutu SimpleGeo na odpowiednie pliki geojson (sprawdzone, które można bezpośrednio odczytać w QGIS).

Teraz chcę przekonwertować te dane na SHP lub inne formaty (SQLite, PostGIS). Korzystam z następującego polecenia z powodzeniem na mniejszych plikach (gdzie „places_fr.gejson” ma rozmiar pliku ~ 118 MB):

ogr2ogr -f "ESRI Shapefile" places_fr.shp places_fr.geojson

Kiedy próbuję uruchomić to samo dokładne polecenie z plikiem geojson o wielkości 340 MB, ogr2ogr ulega awarii na jeden z dwóch sposobów:

  1. „lh_table_new: calloc nie powiodło się” ( pierwsza próba )
  2. System Windows zgłasza komunikat „Ogród2ogr.exe przestał działać. Zamknij program.” ( kolejne próby )

Korzystam z polecenia ogr za pomocą FWTools w środowisku Windows 7 dual core z 8 GB zainstalowanej pamięci RAM (dostępne 4 GB, dostępna pamięć wirtualna 12 GB). Czy istnieje limit pamięci dla ogr2ogr konwersji tych zestawów danych? Próbowałem również przekonwertować na SQLite z tymi samymi wynikami, więc nie sądzę, że jest to problem z konwersją SHP. Dzięki.

RyanKDalton
źródło
Czy kiedykolwiek sprawiłeś, że to zadziałało? Próbuję teraz również przekonwertować plik geojson simpleGeo miejsc do shp - widziałem twój skrypt w oryginalnym poście, ale nie jestem pewien, jaki jest plik infile i outfile - pod względem formatu pliku, który można odczytać i zapisać?
kflaw
nevermind mam to działa teraz utknąłem na konwersji do shp
kflaw

Odpowiedzi:

8

Ostrzeżenie : biorąc pod uwagę ilość pamięci, którą zgłaszasz w swoim systemie, przypuszczam, że używasz 64-bitowej wersji systemu Windows. Jeśli nie, to rozwiązanie nie ma zastosowania.

Limit pamięci dla wszystkich 32-bitowych aplikacji w systemie Windows (niezależnie od wersji systemu Windows, tak jest również w 64-bitowym systemie Windows) wynosi 2 GB. Być może osiągasz ten limit, aby potwierdzić uruchomienie ogr2ogr i sprawdzić użycie pamięci za pomocą menedżera zadań.

Jeśli problem rzeczywiście wynika z problemu z pamięcią, możesz zrobić dwie rzeczy:

  1. zbuduj sobie 64-bitową wersję GDAL (nie mogłem znaleźć łatwo dostępnych plików binarnych)

  2. załataj ogr2ogr.exe za pomocą tego narzędzia: http://ntcore.com/4gb_patch.php . Po załataniu (oczywiście wykonaj kopię zapasową) plik binarny powinien być dostępny, aby zajął się grandtotal 4 GB

unicoletti
źródło
3
Obserwowałem monitor zasobów i gdy tylko pamięć osiągnęła 2 GB, proces ogr2ogr zawiesił się. Było to zdecydowanie ograniczenie pamięci do 2 GB w obrębie ogr2ogr / fwtools, prawdopodobnie dlatego, że zostało skompilowane jako aplikacja 32-bitowa. Poprawiłem program ogr2ogr.exe za pomocą narzędzia, które zasugerowałeś, i działało jak urok. Oczywiście nadal istnieje limit, w którym nie można go używać (tak jak w przypadku plików o pojemności 7 GB w USA), ale przynajmniej wyjaśniono, dlaczego zawodzi działanie ogr2ogr. Dzięki!
RyanKDalton
czy kiedykolwiek byłeś w stanie przetworzyć plik o pojemności 7 GB w USA?
kflaw
3

Jeśli występuje problem, najprawdopodobniej byłby specyficzny dla sterownika geojson OGR, a nie samego OGR. Spróbuj użyć nowszej wersji binarnej (takiej jak OSGeo4W ) lub jeszcze lepszej - wersji 64-bitowej. Przepraszamy, chyba że go kompilujesz, nie wiem, gdzie można uzyskać 64-bitowy plik binarny dla systemu Windows - jednak pliki binarne Ubuntu Linux i Mac KyngChaos będą 64-bitowe.

Ragi Yaser Burhum
źródło