Ошибка проекции Geoview и geopandas groupby

У меня возникают ошибки проецирования после группы по geodataframe. Ниже вы найдете библиотеки, которые я использую:

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 шейп-файла, чтобы построить многоугольную картину границ здравоохранения Великобритании (при необходимости предоставляются ссылки на файлы). К сожалению, из того, что я обнаружил, Великобритания не создает один файл, который объединяет все это, поэтому мне пришлось объединить шейп-файлы из 3 отдельных стран, которые меня интересуют. Три шейп-файла имеют размер:

файл формы 1 = (https://www.opendatani.gov.uk/dataset/department-of-health-trust-boundaries)

файл формы 2 = (https://geoportal.statistics.gov.ee/datase4ec/5252 а>)

файл формы 3 = (https://data.gov.uk/dataset/31ab16a2-22da-40d5-b5f0-625bafd76389/local-health-boards-deDecember-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 в конкретной стране, когда оно выбрано из выпадающего виджета. Я понимаю, что это можно сделать в группах. Однако, когда я использую для этого следующий код:

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

Я получаю длинный список ошибок проекции, в котором говорится:

«ПРЕДУПРЕЖДЕНИЕ: param.project_path: при проецировании элемента Polygons из системы координат PlateCarree (crs) в проекцию Меркатора ни один из проецируемых путей не находился в границах, указанных проекцией. Убедитесь, что вы указали правильную систему координат для ваших данных ».

На что я остался без карты, но сохранил виджет. Кто-нибудь знает, что здесь происходит не так и какое может быть решение? это сводило меня с ума!

С уважением,


person Amen_90    schedule 09.07.2020    source источник


Ответы (1)


По какой-то причине geoviews не нравится проекция OSGB, за которой следует groupby, поскольку она пытается по умолчанию вернуться к проекции планшетов.

Я исправил это, просто сделав весь проект набора данных в epsg: 4326. Для тех, кто также сталкивается с этой проблемой, приведите код ниже (это хорошо документированное решение:

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

После этого groupby работает нормально.

person Amen_90    schedule 10.07.2020