geopandas 从 ncFile 中绘制图像?

问题描述 投票:0回答:1

我的代码如下:

import xarray as xr
import geopandas as gpd
import matplotlib.pyplot as plt

# notice : test_data is   xr.open_set("**.nc")
data = test_data
china_PRECT = data.PRECT  

# use geopandas to get map 
hebei_map = gpd.read_file('hebei.json')
hebei_geometry = hebei_map.geometry.unary_union

gdf = gpd.GeoDataFrame(
    test_data.PRECT.mean(dim='time').values, geometry=gpd.points_from_xy(test_data.longitude.values, test_data.latitude.values), crs="EPSG:4326"
)

然而上面是错误的: ValueError:形状不匹配:对象无法广播到单个形状。形状 (156,) 的 arg 0 和形状 (178,) 的 arg 1 之间不匹配。

我像这样打印变量:

print(data.PRECT.mean(dim='time').values.shape)
print(test_data.longitude.shape)
print(test_data.latitude.shape)
print(test_data.longitude.attrs)

结果: (178, 156) (156,) (178,) {'standard_name': '经度', 'long_name': '经度', '单位': ' Degrees_east', 'axis': 'X'}

我该如何解决?

geopandas
1个回答
0
投票

问题来自于您的数据是二维的。 在创建

GeoDataFrame
之前,您必须展平数组。

使用 numpy 的

meshgrid
可以帮助做到这一点:

import numpy as np
import geopandas as gpd

longitude_2d, latitude2d = np.meshgrid(test_data.longitude.values, test_data.latitude.values)

prect_flat = test_data.PRECT.mean(dim='time').values.flatten()
longitude_flat = longitude_2d.flatten()
latitude_flat = latitude2d.flatten()

gdf = gpd.GeoDataFrame({
    "prect": prect_flat ,
    "geometry": gpd.points_from_xy(longitude_flat, latitude_flat)
}, crs="epsg:4326")

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.