Folium выводит ValueError: отсутствует геометрия, однако данные геойсона выглядят нормально.Что мне не хватает? - PullRequest
2 голосов
/ 15 мая 2019

В настоящее время я пытаюсь нанести набор данных твитов, которые я собрал с помощью Twitter Streaming API и преобразовал в файл геоджон на интерактивной карте с помощью фолиума.Однако при попытке использовать приведенный ниже код я получаю сообщение об ошибке, показанное ниже.

Конечно, я проверил свой набор данных, но он выглядит нормально (см. Ниже) и загружается без проблем на geojson.io.,У меня просто проблема с фолием?Потому что, насколько я могу судить, данные (и геометрия в них) в порядке.Любая помощь будет высоко ценится!

Вот пример моих данных:

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [13.4, 52.53]
            },
            "properties": {
                "text": "Busy 2 week ahead! This Saturday spinning all         night in the main room of humboldthain club -#berlin - then     traveling\u2026",
                "created_at": "Mon Apr 15 12:57:26 +0000 2019"
            }
        },
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [13.37, 52.50]
            },
            "properties": {
                "text": "OFFICE today.\n.\n.\n#berlin #berlinerphilharmonie #sanofi #eenewolke @ Sanofi Berlin",
                "created_at": "Mon Apr 15 12:59:23 +0000 2019"
            }
        }
    ]
}

Это код:

from argparse import ArgumentParser
import folium
def get_parser():
    parser = ArgumentParser()
    parser.add_argument('--geojson')
    parser.add_argument('--map')
    return parser

def make_map(geojson_file, map_file):
    tweet_map = folium.Map(location=[50, 5],
                           zoom_start=5)
    geojson_layer = folium.GeoJson(open(geojson_file),
                                   name='geojson')
    geojson_layer.add_to(tweet_map)
    tweet_map.save(map_file)

if __name__ == '__main__':
    parser = get_parser()
    args = parser.parse_args()

    make_map(args.geojson, args.map)

И это ошибка:

"Traceback (most recent call last):
File "twitter_map_basic.py", line 21, in <module>
make_map(args.geojson, args.map)
File "twitter_map_basic.py", line 13, in make_map
name = 'geojson'>
File "C:\Users\user\AppData\Local\Programs\Python\Python37\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. <_io.TextIOWrapper name='staedteKlein.geojson' mode='r' encoding='cp1252'>

1 Ответ

1 голос
/ 15 мая 2019

Вам необходимо загрузить geojson_file перед передачей его на folium.GeoJson:

import json
geojson_layer = folium.GeoJson(json.load(open(geojson_file)),
                               name='geojson')

или просто передать имя файла:

geojson_layer = folium.GeoJson(geojson_file,
                               name='geojson')

Документация может быть более понятно, что file в data означает путь к файлу, а не дескриптор открытого файла.

...