Загрузка оверлея GeoJSON в Folium повышает ValueError: Невозможно отобразить объекты с отсутствующими геометриями - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь загрузить карту границ округа (файл .geojson) в Folium и получаю ValueError.

Файл GeoJSON был извлечен отсюда: https://data.mo.gov/Demographics/Missouri-County-Boundaries-Map/n34b-fwqr

Похоже,:

{
  "type": "FeatureCollection",
  "features": [
    {"type":"Feature","properties":{"co_class":"3","acres":"327632.419997","pop_1990":"7547","cnty_seat":"Kahoka","countyname":"Clark","name_ucase":"CLARK","countygnis":"758477","countyfips":"045","pop_2000":"7416","sq_miles":"511.92565625"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-91.72916190319887,40.61370307324286],[-91.7211904460685,40.60303954172671],[-91.7200583614958,40.60152712696914],

...

Я проверил файл с помощью GeoPandas, и он, похоже, там правильно загружается и отображается.Я также попытался загрузить версию .json, но получил тот же результат.

import folium as f
import pathlib as pl

MO_LAT = 37.9643
MO_LONG = -91.8318
county_gjson = pl.Path.cwd() /"data" / "Missouri County Boundaries Map.geojson"
m = f.Map(
    location=[MO_LAT, MO_LONG],
    tiles='Mapbox Bright',
    zoom_start=7
)

f.GeoJson(
    county_gjson,
    name='geojson'
).add_to(m)
f.LayerControl().add_to(m)
m.save("mymap.html")

Я надеюсь получить наложение границ округа Миссури.Когда я запускаю код, я получаю:

runfile('C:/Users/Jason/Documents/Missouri/mo_counties.py', wdir='C:/Users/Jason/Documents/Missouri')
Traceback (most recent call last):

  File "<ipython-input-28-bdbf561151e1>", line 1, in <module>
    runfile('C:/Users/Jason/Documents/Missouri/mo_counties.py', wdir='C:/Users/Jason/Documents/Missouri')

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 704, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Jason/Documents/Missouri/mo_counties.py", line 23, in <module>
    name='geojson'

  File "C:\ProgramData\Anaconda3\lib\site-packages\folium\features.py", line 447, in __init__
    raise ValueError('Cannot render objects with any missing geometries. {!r}'.format(data))

ValueError: Cannot render objects with any missing geometries. WindowsPath('C:/Users/Jason/Documents/Missouri/data/Missouri County Boundaries Map.geojson')

1 Ответ

0 голосов
/ 13 мая 2019

Ошибка возникает, так как geoJSON функция ожидает объект GeoJSON вместо пути к файлу:

f.GeoJson(
    county_gjson,
    ^^^^^^^^^^^^
    expects a valid GeoJSON object
).add_to(m)

Для чтения GeoJSON из файла json.load() можно использовать метод :

county_path = os.path.join(pl.Path.cwd(),'data', 'Missouri County Boundaries Map.geojson') 
county_geojson = json.load(open(county_path))

Модифицированный пример

import folium as f
import json
import os

MO_LAT = 37.9643
MO_LONG = -91.8318
county_path = os.path.join(os.getcwd(),'data', 'Missouri County Boundaries Map.geojson') 
county_geojson = json.load(open(county_path))

m= f.Map(
    location=[MO_LAT, MO_LONG],
    tiles='Mapbox Bright',
    zoom_start=7
)

f.GeoJson(
    county_geojson,
    name='geojson'
).add_to(m)
f.LayerControl().add_to(m)
m.save("./mymap.html")
...