Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 bokeh-使用datashader绘制形状文件地图_Python 2.7_Bokeh_Datashader - Fatal编程技术网

Python 2.7 bokeh-使用datashader绘制形状文件地图

Python 2.7 bokeh-使用datashader绘制形状文件地图,python-2.7,bokeh,datashader,Python 2.7,Bokeh,Datashader,最初,我创建了一个英国邮政编码区的交互式地图,其中单个区域根据其值(例如,该邮政编码区的人口)以颜色表示,如下所示 from bokeh.plotting import figure from bokeh.palettes import Viridis256 as palette from bokeh.models import LinearColorMapper from bokeh.models import ColumnDataSource import geopandas as gpd

最初,我创建了一个英国邮政编码区的交互式地图,其中单个区域根据其值(例如,该邮政编码区的人口)以颜色表示,如下所示

from bokeh.plotting import figure
from bokeh.palettes import Viridis256 as palette
from bokeh.models import LinearColorMapper
from bokeh.models import ColumnDataSource
import geopandas as gpd

shp = 'file_path_to_the_downloaded_shapefile'
#read shape file into dataframe using geopandas
df = gpd.read_file(shp)

def expandMultiPolygons(row, geometry):
    if row[geometry].type = 'MultiPolygon':
       row[geometry] = [p for p in row[geometry]]
    return row
#Some rows were in MultiPolygons instead of Polygons.
#Expand MultiPolygons to multi rows of Polygons
df = df.apply(expandMultiPolygons, geometry='geometry', axis=1)
df = df.set_index('Area')['geometry'].apply(pd.Series).stack().reset_index()

#Visualize the polygons. To visualize different colors for different post areas, I added another column called 'value' which has some random integer value. 

p = figure()
color_mapper = LinearColorMapper(palette=palette)
source = ColumnDataSource(df)
p.patches('x', 'y', source=source,\
            fill_color={'field': 'value', 'transform': color_mapper},\
            fill_alpha=1.0, line_color="black", line_width=0.05)
其中df是由四列组成的数据框:邮政编码区、x坐标、y坐标、值(即人口)

上面的代码在web浏览器上创建了一个交互式地图,这很好,但我注意到交互速度不是很平稳。如果放大或移动贴图,它会缓慢渲染。数据帧的大小只有1106行,所以我很困惑为什么它这么慢

作为一种可能的解决方案,我遇到了datashader(),但我发现示例脚本相当复杂,其中大多数都是Jupyter笔记本上的holoview包,但我想使用bokeh创建一个仪表板

有人建议我将datashader合并到上面的bokeh脚本中吗?我是否需要datashader中的另一个函数来创建形状贴图,而不是使用bokeh的patches函数


任何建议都将不胜感激

如果没有数据文件,我无法直接回答您的问题,但可以提供一些观察结果:

  • Datashader不太可能在这方面有价值,因为Datashader目前不支持渲染多边形。根据经验,Datashader是用来聚合数据的,如果数据已经聚合,Datashader通常不会有帮助。在这里,您的数据是通过邮政编码聚合的,datashader无法处理邮政编码,但是如果您拥有每个人的原始数据,它会很乐意呈现它
  • 如果您更喜欢直接使用Bokeh,而不是通过更高级别的HoloView/GeoView界面,我建议您遵循Matt Rocklin在以下方面的工作:;他的方法应该很快达到你的目的
  • 总之,无论您是否想要创建仪表板,这都应该是与Bokeh一起工作的一种方便方式。例如,演示了如何使用这两个库制作简单的Bokeh仪表板。它不包括形状文件,但这些文件包含在中
    如果没有数据文件,我无法直接回答您的问题,但可以提供一些观察结果:

  • Datashader不太可能在这方面有价值,因为Datashader目前不支持渲染多边形。根据经验,Datashader是用来聚合数据的,如果数据已经聚合,Datashader通常不会有帮助。在这里,您的数据是通过邮政编码聚合的,datashader无法处理邮政编码,但是如果您拥有每个人的原始数据,它会很乐意呈现它
  • 如果您更喜欢直接使用Bokeh,而不是通过更高级别的HoloView/GeoView界面,我建议您遵循Matt Rocklin在以下方面的工作:;他的方法应该很快达到你的目的
  • 总之,无论您是否想要创建仪表板,这都应该是与Bokeh一起工作的一种方便方式。例如,演示了如何使用这两个库制作简单的Bokeh仪表板。它不包括形状文件,但这些文件包含在中
    正如我在评论中提到的,我相信多边形的复杂性可能会导致您的问题。链接到的文件包含多个不同大小和复杂程度的形状文件。您可以简化这些,即减少每个多边形的点数。这可以改变它们的外观。它的范围可以从几乎没有差别的“前卫”到棱角分明的外观。这取决于您选择的简化级别。根据您的需要,您可以选择不同级别的简单性

    我知道有三种简单的方法可以完成这项工作:

  • 桂:试试看。它是地理空间数据处理的一个伟大的开源工具。将Shapefile作为新图层加载。然后使用矢量菜单下的“简化几何图形”工具
  • 命令行:是一个开源库。它附带了一个有用的命令行工具。您可以这样使用它:
    ogr2ogr outfile.shp infle.shp-simplify 0.000001
  • 在线:访问。导入您的文件。选择简化并选择您的级别。然后,导出结果。我在这里真正喜欢的是,您的文件会立即呈现。因此,您可以立即看到简化的结果 除此之外,您还应该更新您的bokeh版本。它会定期更新,此后性能也有了一些改进


    使用HoloView或GeoView不会对您的性能产生积极影响。因此,它与您的问题无关。我猜@James A.Bednar只是给了一些附带的建议

    正如我在评论中提到的,我相信多边形的复杂性可能会导致您的问题。链接到的文件包含多个不同大小和复杂程度的形状文件。您可以简化这些,即减少每个多边形的点数。这可以改变它们的外观。它的范围可以从几乎没有差别的“前卫”到棱角分明的外观。这取决于您选择的简化级别。根据您的需要,您可以选择不同级别的简单性

    我知道有三种简单的方法可以完成这项工作:

  • 桂:试试看。它是地理空间数据处理的一个伟大的开源工具。将Shapefile作为新图层加载。然后使用矢量菜单下的“简化几何图形”工具
  • 命令行:是一个开源库。它附带了一个有用的命令行工具。您可以这样使用它:
    ogr2ogr outfile.shp infle.shp-simplify 0.000001
  • 在线:访问。导入您的文件。选择简化并选择您的级别。然后,导出结果。我在这里真正喜欢的是,您的文件会立即呈现。因此,您可以立即看到简化的结果 除此之外,您还应该更新您的bokeh版本。它会定期更新,性能也有所提高