0

我在地理数据框上的 groupby 之后遇到投影错误。您将在下面找到我正在使用的库:

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'

虽然这些是一些关键库的版本: bokeh 2.1.1 geopandas 0.6.1 geoviews 1.8.1 holoviews 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 的所有区域边界。

然后,我在我的地理数据框中添加了一个名为“Country”的新列,它将每个 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) 投影到墨卡托投影时,没有任何投影路径包含在投影指定的范围内。确保您为数据指定了正确的坐标系。”</p>

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

亲切的问候,

4

1 回答 1

0

出于某种原因,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 工作正常。

于 2020-07-10T15:57:27.940 回答