使用folium可视化时丢失geojson的特征属性信息

如何解决使用folium可视化时丢失geojson的特征属性信息

目前我已经制作了一个 geojson 文件(称为输出): {"type": "FeatureCollection","features": [ {"type": "Feature","geometry": {"type": "Point","coordinates": [103.815381,1.279109]},"properties": {"temperature": 24,"marker-symbol": "park","marker-color": "#AF4646"}},{"type": "Feature","geometry": {"type": "MultiLinestring","coordinates": [[[103.809297,1.294906],[103.799445,1.283906],[103.815381,1.294906]]]},"stroke": "#AF4646"}}]}

它包含一个多行字符串类型和一个点类型。预期的输出应该是这样的(使用 geojson.io 可视化),所有属性(例如字符串和标记的颜色,标记的森林图标)都保留

enter image description here

我的目标是生成此地图的 html 或图像文件(最佳选择)。所以我转向大叶。但是,当我使用命令时:

m = folium.Map(location=[1.2791,103.8154],zoom_start=12) folium.GeoJson(output,name='test').add_to(m) m.save('map.html') 可视化是这样的:

enter image description here

所有财产信息都被抹去的地方。有没有办法保留这些财产信息?谢谢。

解决方法

提供的 GeoJSON (output) 包含 simplestyle spec 中定义的样式属性,传单 L.geoJSON 不支持这些属性

leaflet-simplestyle plugin 可以用来扩展 L.geoJSON 来支持 simplestyle 规范,这里有一个关于如何在 folium 中使用它的例子

import folium
from folium.elements import JSCSSMixin
from folium.map import Layer
from jinja2 import Template


class StyledGeoJson(JSCSSMixin,Layer):
    """
    Creates a GeoJson which supports.

    """
    _template = Template(u"""
        {% macro script(this,kwargs) %}

            var {{ this.get_name() }} = L.geoJson({{ this.data }},{
                    useSimpleStyle: true,useMakiMarkers: true
                }
            ).addTo({{ this._parent.get_name() }});
        {% endmacro %}
        """)  

    default_js = [
        ('leaflet-simplestyle','https://unpkg.com/leaflet-simplestyle'),]

    def __init__(self,data,name=None,overlay=True,control=True,show=True):
        super(StyledGeoJson,self).__init__(name=name,overlay=overlay,control=control,show=show)
        self._name = 'StyledGeoJson'
        self.data = data

用法

output = {"type": "FeatureCollection","features": [ {"type": "Feature","geometry": {"type": "Point","coordinates": [103.815381,1.279109]},"properties": {"temperature": 24,"marker-symbol": "park","marker-color": "#AF4646"}},{"type": "Feature","geometry":  {"type": "MultiLineString","coordinates": [[[103.809297,1.294906],[103.799445,1.283906],[103.815381,1.294906]]]},"stroke": "#AF4646"}}]}
m = folium.Map(location=[1.2791,103.8154],zoom_start=14)

StyledGeoJson(output).add_to(m)
m

结果

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?