0

我有一些示例代码可以使用 Bokeh 绘制安大略地图。该代码读取 shapefile 并将其转换为 geojson 文件,如 Internet 上的示例所建议的那样。shapefile 源数据是从 StatsCan 网站下载为 shapefile 的安大略省人口普查细分地理边界。

图片截图:https ://imgur.com/xn1Zzdh

到目前为止的结果是一个空图表,我不知道出了什么问题。

shapefile 首先作为 geopandas 数据框加载并转换为 geojson。

为我缺乏 stackoverflow 礼节道歉。我是新用户。

%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import geopandas

import os

from bokeh.plotting import figure, output_file, show, save,output_notebook
from bokeh.models import GeoJSONDataSource, LinearColorMapper, ColorBar
from bokeh.palettes import brewer


pd.options.display.max_rows = 10

workspace = r'C:\Users\user\Documents\lcsd000b16a_e'
CSD_LAYER = geopandas.read_file(os.path.join(workspace,r"lcsd000b16a_e.shp"))

ONT_CSD = CSD_LAYER[CSD_LAYER['PRUID']=='35']
ONT_CSD['geometry'].head()

1372    POLYGON ((7202895.13143 1077367.822855, 720382...
1373    POLYGON ((7205717.394285 1098087.974285, 72058...
1374    POLYGON ((7169056.905715 1216085.682855, 71693...
1614    POLYGON ((7162217.717145 948748.982855, 716229...
1809    POLYGON ((7506330.95143 1116872.145715, 750632... 



# # Get the CRS of our grid
CRS = ONT_CSD.crs
print('FROM:' + str(CRS))

ONT_CSD = ONT_CSD.to_crs(epsg=3857) #transform to webmercator
print('TO: '+ str(ONT_CSD.crs))

FROM:{'init': 'epsg:3347'}
TO: {'init': 'epsg:3857', 'no_defs': True}

import json

#read data to json file
ONT_CSD_json = json.loads(ONT_CSD.to_json())

#convert to string like object
ONT_CSD_JSON_DATA = json.dumps(ONT_CSD_json)

#Input GeoJSON source that contains features for plotting.
geosource = GeoJSONDataSource(geojson = ONT_CSD_JSON_DATA)

#Create figure object.
p = figure(title = 'test', plot_height = 600 , plot_width = 950)
p.xgrid.grid_line_color = None
p.ygrid.grid_line_color = None
#Add patch renderer to figure. 

p.patch('xs','ys', source = geosource,
          line_color = 'black', line_width = 1, fill_alpha = 0.75)
4

0 回答 0