Python ValueError:未处理的对象<_io.TextIOWrapper name=';json';模式=';r';编码=';utf-8-sig'&燃气轮机;
我正在尝试使用GeoJson多边形颜色功能更改一个国家的颜色 这是给我一个错误的代码Python ValueError:未处理的对象<_io.TextIOWrapper name=';json';模式=';r';编码=';utf-8-sig'&燃气轮机;,python,geojson,Python,Geojson,我正在尝试使用GeoJson多边形颜色功能更改一个国家的颜色 这是给我一个错误的代码 import folium import pandas data = pandas.read_csv("Volcanoes_USA.txt") lat = list(data["LAT"]) lon = list(data["LON"]) elev = list(data["ELEV"]) def color_producer(elevation): if elevation < 1000:
import folium
import pandas
data = pandas.read_csv("Volcanoes_USA.txt")
lat = list(data["LAT"])
lon = list(data["LON"])
elev = list(data["ELEV"])
def color_producer(elevation):
if elevation < 1000:
return 'green'
elif 1000 <= elevation < 3000:
return 'orange'
else:
return 'red'
map = folium.Map(location=[38.58,-99.09], zoom_start=6, tiles="Mapbox Bright")
fg = folium.FeatureGroup(name="My Map")
for lt,ln,el in zip(lat, lon, elev):
fg.add_child(folium.CircleMarker(location=[lt, ln], radius = 6, popup=str(el)+ " m", color = color_producer(el), fill_color= 'grey', fill_opacity=1.15))
fg.add_child(folium.GeoJson(data=open('world.json','r', encoding='utf-8-sig'),
style_function = lambda x: {'fillColour':'yellow'}))
importfolium
进口大熊猫
data=pandas.read\u csv(“火山”\u USA.txt)
lat=列表(数据[“lat”])
lon=列表(数据[“lon”])
elev=列表(数据[“elev”])
def颜色发生器(立面图):
如果标高<1000:
返回“绿色”
elif 1000>回溯(最近一次调用last):文件“map1.py”,第25行,在
>style_function=lambda x:{'fillcolor':'yellow'})文件“/Users/g_wauns/anaconda3/lib/python3.6/site packages/folium/features.py”,
>第495行,在_init中__
>raise VALUERROR('Unhandled object{!r}.'.format(data))VALUERROR:Unhandled object mode='r'encoding='utf-8-sig'>。
因为我对编码是新手,所以我不知道这意味着什么。现在看(),看起来像是folium。GeoJson
构造函数只能处理(针对您的场景)以下两种情况之一:
fg.add_child(folium.GeoJson("world.json", style_function=lambda x: {"fillColour": "yellow"}))
当然,您可以自己将文件读入dict(使用模块),但这正是上面的文件在下面20行中所做的。我用下面代码块中的代码解决了上面完全相同的问题
import folium
import pandas
import json
data = pandas.read_csv("Volcanoes_USA.csv")
我必须创建以下行作为str函数,以使代码正常工作
正确读取world.json文件。本课程中的例子并非如此
为我工作。因此,我必须导入json库并读取该文件
首先使用编码,然后将其传递给GeoJson方法
在下面的代码中进一步描述
data_json = open("world.json", 'r', encoding='utf-8-sig').read()
lat = list(data["LAT"])
long = list(data["LON"])
elev = list(data["ELEV"])
name = list(data["NAME"])
def pin_color(elev):
if elev <= 1500.0:
return "green"
elif elev >= 3000.0:
return "red"
else:
return "orange"
map = folium.Map(location=[38.58,-99.09], zoom_start=6, control_scale=True,
tiles="Stamen Terrain")
map.add_child(folium.LatLngPopup())
map
fg = folium.FeatureGroup(name="my_map")
data\u json=open(“world.json”,“r',encoding='utf-8-sig')。read()
lat=列表(数据[“lat”])
长=列表(数据[“LON”])
elev=列表(数据[“elev”])
名称=列表(数据[“名称”])
def引脚颜色(elev):
如果elev=3000.0:
返回“红色”
其他:
返回“橙色”
map=folium.map(位置=[38.58,-99.09],缩放开始=6,控制比例=真,
tiles=“雄蕊地形”)
map.add_child(folium.LatLngPopup())
地图
fg=folium.FeatureGroup(name=“我的地图”)
我无法使用课程中解释的线路,原因是:
fg.add_child(folium.GeoJson(data=open('world.json','r',encoding=utf-8-sig)))
因此,我在上面的代码中将data_json定义为下面要读取的str
由folium.GeoJson编写
fg.add_child(folium.GeoJson(data=data_json,
style_function=lambda x: {'fillColor':'green' if x['properties']
['POP2005'] < 10000000
else 'orange' if 10000000 <= x['properties']['POP2005'] < 20000000 else
'red' }))
for i,j,z,v in zip(lat, long, elev, name):
icn_pin=folium.Popup(str(v)+" Volcano"+": "+"Elevation:"+str(z)+"m "+"
"+"Lat:"+str(i)+" "+"Long:"+str(j),parse_html=True)
fg.add_child(folium.CircleMarker(location=[i,j], popup=icn_pin,
radius=7, fill=True, color=pin_color(z), fill_color=pin_color(z),
fill_opacity=0.85))
map.add_child(fg)
map.save("world_pop_map.html")
fg.add_child(folium.GeoJson(data=data_json,
style_function=lambda x:{'fillColor':'green'如果x['properties']
['POP2005']<10000000
else'orange'if 10000000如用户9608587所示,它帮助我了解了如何完成此任务
我导入了“io”模块并使用了io.open()函数
import io
data_json = io.open("world.json",'r',encoding='utf-8-sig').read()
最后的代码,你可以复制粘贴它,它会工作的
import folium
import pandas,io
data = pandas.read_csv("Volcanoes_USA.txt")
data_json = io.open("world.json",'r',encoding='utf-8-sig').read()
lat = list(data.LAT)
lon = list(data.LON)
elev = list(data.ELEV)
def colour_producer(elev):
if elev<1000:
return "green"
elif 1000<= elev <3000:
return "orange"
else:
return "red"
Map = folium.Map(location=[38.58,-99.09],zoom_start=6,tiles = "Mapbox Bright")
fg = folium.FeatureGroup(name="My Map")
'''for lat,lon,elev in zip(lat,lon,elev):
fg.add_child(folium.CircleMarker(location=[lat,lon],popup=str(elev) + "m",radius
= 6,fill_color = colour_producer(elev),
color = 'grey',fill_opacity = 0.7))'''
fg.add_child(folium.GeoJson(data=data_json,style_function=lambda x: {'fillColor':'blue' if x['properties']
['POP2005'] < 10000000
else 'green' if 10000000 <= x['properties']['POP2005'] < 20000000 else
'red' }))
Map.add_child(fg)
Map.save("Map1.html")
importfolium
进口大熊猫
data=pandas.read\u csv(“火山”\u USA.txt)
data_json=io.open(“world.json”,'r',encoding='utf-8-sig').read()
lat=列表(data.lat)
lon=列表(data.lon)
elev=列表(data.elev)
def颜色发生器(elev):
如果elev只需为数据添加read()
fg.add_child(folium.GeoJson(data=open('world.json', 'r', encoding='utf-8-sig').read(), style_function=lambda x: {'fillColor':'yellow'}))
这对我来说是个好办法fg.add_child(folium.GeoJson(data=(open)(“world.json”,“r”,encoding=(“utf-8-sig”)))).read())这个问题的确切答案已经发布了。下次请解释一下为什么你的答案是正确的。
fg.add_child(folium.GeoJson(data=open('world.json', 'r', encoding='utf-8-sig').read(), style_function=lambda x: {'fillColor':'yellow'}))