TLDR: Używając Pythona, jak mogę przekonwertować plik kmz na GeoJSON? Wygląda na to, że plik kmz wywołuje usługi sieciowe.
Szczegóły:
Pobrałem plik FEMA_NFHL_v3.2.kmz
z FEMA tutaj: https://hazards.fema.gov/femaportal/wps/portal/NFHLWMSkmzdownload
Moim celem jest pobranie tego pliku i przekonwertowanie go na format, do którego mogę przesłać MapBox lub w inny sposób użyj do wypełnienia bazy danych PostGIS. Mój preferowany format to GeoJSON.
Znalazłem następujący kod w sieci StackExchange, ale wydaje się, że nie działa.
import gdal srcDS = gdal.OpenEx("./FEMA_NFHL_v3.2.kmz") ds = gdal.VectorTranslate("output.json", srcDS, format="GeoJSON")
Powyższy kod generuje ten błąd:
$ python scratch.py Warning 1: The output driver does not natively support DateTime type for field timestamp. Misconversion can happen. -mapFieldType can be used to control field type conversion. Warning 1: The output driver does not natively support DateTime type for field begin. Misconversion can happen. -mapFieldType can be used to control field type conversion. Warning 1: The output driver does not natively support DateTime type for field end. Misconversion can happen. -mapFieldType can be used to control field type conversion. ERROR 1: Layer "NFHL" does not already exist in the output dataset, and cannot be created by the output driver. ERROR 1: Terminating translation prematurely after failed translation of layer NFHL (use -skipfailures to skip errors)
Rozpakowałem plik kmz i mam następujące informacje:
$ tree FEMA_NFHL_v3.2 FEMA_NFHL_v3.2 ├── doc.kml └── files ├── FEMA_Logo.png ├── GenStruct_item.gif ├── LOMA_item.gif ├── Levee_item.gif ├── LiMWA_item.gif ├── NFHL_Legend.png ├── NFHL_Quick_Start_Instructions.png └── RivMrk_item.gif 1 directory, 9 files
Wygląda na to, że jedynym wartym rozważenia plikiem zawierającym jakiekolwiek dane jest doc.kml
. Po sprawdzeniu doc.kml
, widzę To jakiś kod odwołujący się do usługi sieciowej FEMA. Co więcej, otwierając FEMA NFHL v3.2 kmz
w Google Earth, widzę, że jest to rzeczywiście wykonywanie wywołań usług internetowych.
Czy istnieje sposób, aby programowo, używając Pythona, mieć plik .kmz wywołuje usługi sieciowe, a następnie generuje plik GeoJSON?
Komentarze
- " To czy tamto " pytania to w rzeczywistości dwa pytania, co narusza naszą zasadę „Jedno pytanie na pytanie”. Wybierz, czy chcesz mieć dane wyjściowe JSON czy shapefile; jeśli to konieczne, możesz poprosić o drugie pytanie w późniejszym pytaniu.
- Zaktualizowałem pytanie ograniczając je do GeoJSON, chociaż plik shapefile też by się nadawał.
- Nie, możesz ' t. Usługi WMS zwracają stylizowane obrazy map. Według strony FEMA, możesz pobrać rzeczywiste dane – " Korzystając z opcji „Wyszukaj wszystkie produkty” na MSC , możesz pobrać dane NFHL dla hrabstwa lub stanu w formacie shapefile. " Zobacz także fema.gov/media-library -data / …