【问题标题】:Folium outputs ValueError: missing geometries, however the geojson data looks normal. What am I missing?Folium 输出 ValueError: missing geometry,但是 geojson 数据看起来很正常。我错过了什么?
【发布时间】:2019-10-02 13:24:10
【问题描述】:

我目前正在尝试通过 folium 在交互式地图上绘制一组推文,这些推文是我通过 Twitter 流 API 收集并转换为 geojson 文件的。但是,当尝试使用下面的代码时,我收到如下所示的错误消息。

当然我检查了我的数据集,但它看起来很好(见下文),它在 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'>

【问题讨论】:

    标签: python twitter geojson folium


    【解决方案1】:

    您必须先加载您的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')
    

    documentation 中的file 可能更清楚,data 表示文件路径,而不是打开的文件描述符。

    【讨论】:

    • 非常感谢您的快速回复!现在像魅力一样工作:)
    • @OsakaJonny 当然,没问题。如果答案解决了您的问题,您可以将其标记为已接受:) stackoverflow.com/help/someone-answers
    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2017-06-08
    • 2012-01-29
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多