Ошибка проекции Geoview и geo pandas groupby - PullRequest
0 голосов
/ 10 июля 2020

У меня возникают ошибки проекции после группы по 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 geo pandas 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.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 Wel sh приписываются Уэльсу, все Engli sh - Англии, а все Scotti sh - Шотландии. На самом деле это всего лишь простая дополнительная группировка данных.

Чего я хочу добиться, так это иметь раскрывающийся список рядом с полигональной картой, которую я создаю, которая будет отображать все CCG в конкретной стране, когда она выбрана из выпадающий виджет. Я понимаю, что это можно сделать в группах. Однако, когда я использую следующий код для достижения этого:

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

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

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

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

С уважением,

1 Ответ

0 голосов
/ 10 июля 2020

По какой-то причине 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 отлично работает.

...