Как загрузить большой файл geojson в mapbox?
У меня большой файл geoJson (почти 700 МБ), и мне нужно загрузить его в мою карту с помощью сервера mapbox и openmaptiles. Мне нужен внешний файл, поэтому я не могу использовать Mapbox Studio для загрузки и преобразования данных.
Я не могу использовать geojson2mvt, так как файл большой и превышает кучу памяти. Итак, я использовал Tippecanoe, чтобы преобразовать его в.Mbtiles. Тем не менее, я не могу использовать этот формат в mapbox. Я следую за этими шагами, чтобы преобразовать Mbtiles в.mvt:
Установите tippecanoe ( https://github.com/mapbox/tippecanoe) и создайте mbtiles:
tippecanoe -o mbt_file.mbtiles -z18 input_file.geojson -pC
Установите mb-util ( https://github.com/mapbox/mbutil) и конвертируйте mbtiles в плитки mvt:
./mbutil/mb-util mbt_file.mbtiles mvt_dir --image_format=pbf
Все файлы теперь в правильном формате, но вы должны изменить их расширение:
find mvt_dir -iname "*.pbf" -exec bash -c 'mv "$0" "${0%\.pbf}.mvt"' {} \;
файл был успешно преобразован в.mvt, но когда я пытаюсь загрузить его в свою карту, появляется следующая ошибка:
blob:null/e1d9d487-dfa4-48b1-aa0e-b66527f28ac8:11754 Uncaught Error: Unimplemented type: 3
at No.skip (blob:null/e1d9d487-dfa4-48b1-aa0e-b66527f28ac8:11754)
at No.readFields (blob:null/e1d9d487-dfa4-48b1-aa0e-b66527f28ac8:11574)
at new Za (blob:null/e1d9d487-dfa4-48b1-aa0e-b66527f28ac8:9948)
at $a (blob:null/e1d9d487-dfa4-48b1-aa0e-b66527f28ac8:9964)
at No.readFields (blob:null/e1d9d487-dfa4-48b1-aa0e-b66527f28ac8:11573)
at new VectorTile (blob:null/e1d9d487-dfa4-48b1-aa0e-b66527f28ac8:9978)
at blob:null/e1d9d487-dfa4-48b1-aa0e-b66527f28ac8:14432
at XMLHttpRequest.T.r.onload (blob:null/e1d9d487-dfa4-48b1-aa0e-b66527f28ac8:416)
Может кто-нибудь помочь мне исправить это? или есть ли способ показать мой большой файл geojson?
Спасибо!
1 ответ
Как намекал @Caramiriel, тип Unimplemented: 3 обычно означает, что ваши плитки сжаты, а Mapbox GL JS ожидает несжатых плиток. Просто добавьте заголовок Content-Encoding: gzip и дайте браузеру распаковать на лету.