При загрузке большого файла geojson в Folium происходит сбой Jupyter Notebook
Я пытаюсь последовать примеру добавления наложения geo_json, найденному здесь. Файл geo_json, который я использую, - это карта почтовых индексов в Германии, найденная здесь. Это большой на 85,8 мб.
Вот мой MWE; Я загрузил файл 'postleitzahlen.geojson' в (pwd является моим "текущим рабочим каталогом") файл pwd/data/postleitzahlen.geojson. Обратите внимание, что та же проблема возникает, даже когда я меняю расширение с нестандартного.geojson на.json.
import folium
# Not sure if I need all of the packages below:
import json
import os
# Center map in middle of Berlin, zoom out enough so all of Germany is visible,
# and use mapbox bright instead of default OpenStreetMap so as to hopefully make
# images easier to render. But it still crashes the notebook anyway.
m=folium.Map(location=[52.5194, 13.4067], tiles='Mapbox Bright', zoom_start=5)
# This is the analog of the example on the Folium website, but I don't really understand it.
# Wouldn't we need to load the file into memory somehow, maybe using geopandas or something?
zipcode_regions = os.path.join('data', 'postleitzahlen.geojson')
# Add the geoJSON layer to map ostensibly:
folium.GeoJson(zipcode_regions, name='geo_json').add_to(m)
# Still crashes regardless of whether I include following line - I think it just adds control in top-right of map on example website, which I don't need.
folium.LayerControl().add_to(m)
m
В Jupyter Notebook (по крайней мере, на моем компьютере) происходит то, что для вывода ячейки, содержащей последнюю строку, просто получается большой пустой пробел. Кроме того, в верхней части написано "Ошибка автосохранения!". И когда кто-то пытается нажать кнопку "Сохранить", ноутбук на мгновение зависает, и тогда ничего не происходит. (Т.е. нет никаких признаков того, что файл был сохранен.)
Я все еще могу запускать новые ячейки (например, выполнять основную арифметику), но ничего не спасает. (РЕДАКТИРОВАТЬ: Нет, слишком часто это приводит к сбою ноутбука в Chrome.)
Это может быть ошибка в Jupyter, IPython или Folium, и в этом случае запрос здесь может не сильно помочь. Но я решил, что постараюсь спросить здесь, по крайней мере.
Глядя на документацию по этой функции (многократно прокручивайте вниз), следует ли мне попробовать (1) установить overlay
параметр для True
, так как по умолчанию False
? (2) настройка smooth_factor
до значения, превышающего значение по умолчанию 1.0
? (Я попробую оба и обновлю этот пост с любыми результатами.)
Я прочитал эти вопросы, но не понял, как использовать их ответы для решения моей проблемы. Если кто-то может объяснить, как применить эти ответы здесь, я был бы очень признателен. (1) (2) (3) (4) (5)
РЕДАКТИРОВАТЬ: я пытался сделать то, что сделал этот человек, а именно, увеличение лимита данных (в частности, я побежал jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10
запустить Jupyter Notebook), но возникла та же ошибка, что и раньше.
РЕДАКТИРОВАТЬ (2): Все еще происходит настройка overlay=True
и используя, и не используя увеличение предела данных.
РЕДАКТИРОВАТЬ (3): Настройка smooth_factor
в 10
, 100
, или же 1000
не исправил, хотя предпоследняя клетка работала быстрее. Так что это, скорее всего, проблема с Юпитером, чем с фолием.
Вывод терминала каждый раз для Jupyter Notebook содержит несколько ошибок вида:
Saving file at /map.ipynb
[I 12:00:00.000 NotebookApp] Malformed HTTP message from ::1: Content-Length too long
При более пристальном рассмотрении терминала во время работы ноутбука становится ясно, что эта ошибка возникает именно тогда, когда ноутбук пытается загрузить карту. Далее я попробую решения, предложенные здесь.
РЕДАКТИРОВАТЬ (4): Все еще не работает, пытаясь jupyter notebook --NotebookApp.tornado_settings="{'max_body_size': 104857600, 'max_buffer_size': 104857600}"
предложил здесь; также не работает при добавлении трех дополнительных нулей max_body_size
а также max_buffer_size
ни при добавлении шести дополнительных нулей к обоим. (Т. Е. Примерно 0,5 петабайта, в миллион раз больше значений по умолчанию.)
РЕДАКТИРОВАТЬ (5): Это теперь опубликовано как проблема на GitHub.