folium包中Choropleth的配置技巧


在使用folium做區域熱力地圖的時候,發現總是配置錯誤。找了國內好多博主的文章,也只使用quickstart中的數據成功展示。經過兩天的探索結合業務總算完整做出了一個效果圖。

先上一個效果圖,山東臨沂的街道人口統計圖。

filePath = r'G:\smartlbs\chorop\wl250new.json'

population_data = pd.read_csv(r'G:\smartlbs\chorop\state.csv')
population_data.head()

 

m_china = folium.Map(location=[35.0896,118.2321], zoom_start=8)
folium.Choropleth(
                              geo_data=filePath,
                              name='choropleth',
                             data=population_data,
                             columns=['code', 'population'],
                             key_on='feature.id',
                             fill_color='YlGn',
                             fill_opacity=0.7,
                           line_opacity=0.2,
                            legend_name='Unemployment Rate (%)'
).add_to(m_china)

 

要想正確顯示有三個關鍵點:

1. folium需要的圍欄數據格式不是最新標准的GeoJSON。需要按照他的要求提供特殊的json文件。

最新標准的GeoJSON文件RFC79462016年版(https://tools.ietf.org/html/rfc7946#section-3.2),對於每一條記錄,只有三個屬性,分別是:type,properties,geometry

坐標放在geometry里,其他信息都是放在“properties”下的

{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [125.6, 10.1] }, "properties": { "name": "Dinagat Islands" } }

 但是folium提供的例子中 美國行政編碼,里面多了一個id。

這個是2008年第一版舊標准(http://geojson.org/geojson-spec)。

類型為"Feature"的GeoJSON對象是特征對象。 

  • 特征對象必須由一個名字為"geometry"的成員,這個幾何成員的值是上面定義的幾何對象或者JSON的null值。
  • 特征對象必須有一個名字為“properties"的成員,這個屬性成員的值是一個對象(任何JSON對象或者JSON的null值)。
  • 如果特征是常用的標識符,那么這個標識符應當包含名字為“id”的特征對象成員。

目前最新的geopandas包處理地理數據都是把屬性列放在properties里,這就坑爹了,只能使用json庫做循環一條記錄一條記錄調整了

for index in np.arange(len(data['features'])):
    data['features'][index]['id'] = data['features'][index]['properties']['code']

2. Choropleth類中key_on 只能是 feature.id 這樣的二級名稱,官方文檔說支持feature.properties.somethingname 這類三級名稱有bug.

也正是因為有這個bug,導致我們需要做第一步,在標准geojson文件中增加不那么標准的一列id.

3.對於區域圍欄,數據集太大的話沒法顯示,我測試的大約3M的數據就不行了。可以用https://mapshaper.org這個網站做抽稀。

現在展示給大家的的是255各街道圍欄數據,原始數據早就超過標准了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM