Geoview 和 geopandas groupby 投影错误

Geoview and geopandas groupby projection error

我在对地理数​​据框进行分组后遇到投影错误。您将在下面找到我正在使用的库:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import holoviews as hv
from holoviews import opts
import panel as pn
from bokeh.resources import INLINE
import geopandas as gpd
import geoviews as gv
from cartopy import crs
hv.extension('bokeh', 'matplotlib')
gv.extension('bokeh')
pd.options.plotting.backend = 'holoviews'

虽然这些是一些关键库的版本: 散景 2.1.1 大熊猫 0.6.1 地理视图 1.8.1 全息视图 1.13.3

我连接了 3 个 shapefile 以构建英国医疗保健边界的多边形图片(如果需要,可提供文件链接)。不幸的是,根据我的发现,英国并没有生成一个结合了所有这些的文件,因此不得不合并来自我感兴趣的 3 个国家的形状文件。这 3 个形状文件的大小为:

形状文件 1 = (https://www.opendatani.gov.uk/dataset/department-of-health-trust-boundaries)

形状文件 2 = (https://geoportal.statistics.gov.uk/datasets/5252644ec26e4bffadf9d3661eef4826_4)

形状文件 3 = (https://data.gov.uk/dataset/31ab16a2-22da-40d5-b5f0-625bafd76389/local-health-boards-december-2016-ultra-generalised-clipped-boundaries-in-wales)

我将它们连接在一起的代码如下:

England_CCG.drop(['objectid', 'bng_e', 'bng_n', 'long', 'lat', 'st_areasha', 'st_lengths'], inplace = True, axis = 1 )
Wales_HB.drop(['objectid', 'bng_e', 'bng_n', 'long', 'lat', 'st_areasha', 'st_lengths', 'lhb16nmw'], inplace = True, axis = 1 )
Scotland_HB.drop(['Shape_Leng', 'Shape_Area'], inplace = True, axis = 1)
#NI_HB.drop(['Shape_Leng', 'Shape_Area'], inplace = True, axis = 1 )

England_CCG.rename(columns={'ccg20cd': 'CCG_Code', 'ccg20nm': 'CCG_Name'}, inplace = True )
Wales_HB.rename(columns={'lhb16cd': 'CCG_Code', 'lhb16nm': 'CCG_Name'}, inplace = True )
Scotland_HB.rename(columns={'HBCode': 'CCG_Code', 'HBName': 'CCG_Name'}, inplace = True )
#NI_HB.rename(columns={'TrustCode': 'CCG_Code', 'TrustName': 'CCG_Name'}, inplace = True )

UK_shape = [England_CCG, Wales_HB, Scotland_HB]

Merged_Shapes = gpd.GeoDataFrame(pd.concat(UK_shape))

每个文件在加入后都有相同的 esri 投影,当我 运行:

时,形状完美地绘制成一个
Test= gv.Polygons(Merged_Shapes, vdims=[('CCG_Name')], crs=crs.OSGB())

这为我提供了英国的多边形图,其中包含每个 ccg 的所有区域边界。

然后,在我的地理数据框中添加一个名为“国家/地区”的新列,将每个 CCG 归因于它们所属的国家/地区。因此,所有威尔士 CCG 都归于威尔士,所有英国 CCG 归于英格兰,所有苏格兰 CCG 归于苏格兰。真的只是一个简单的额外数据分组。

我想要实现的是在我制作的多边形地图旁边有一个下拉菜单,当从下拉小部件中选择它时,它将显示特定国家/地区的所有 CCG。我知道这样做的方法是通过 groupby。但是,当我使用以下代码来实现时:

c1 = gv.Polygons(Merged_Shapes, vdims=[('CCG_Name','Country')], crs=crs.OSGB()).groupby(['Country'])

我收到一长串投影错误:

“警告:param.project_path:将多边形元素从 PlateCarree 坐标参考系统 (crs) 投影到墨卡托投影 none 时,投影路径包含在投影指定的范围内.确保您为数据指定了正确的坐标系。”

我没有地图,但我保留了小部件。有谁知道这里出了什么问题以及可能的解决方案是什么?快把我逼疯了!

亲切的问候,

出于某种原因,geoviews 不喜欢 OSGB 投影然后跟一个 groupby,因为它试图默认回到 platecaree 投影。

我修复它的方法是在 epsg:4326 中制作整个数据集项目。对于同样遇到此问题的任何人,请使用以下代码(这是一个有据可查的解决方案:

Merged_Shapes.to_crs({'init': 'epsg:4326'},inplace=True) 
gv.Polygons(Merged_Shapes, vdims=[('CCG_Name'),('Country')]).groupby('Country')

groupby 在此之后工作正常。