I'm working with meteorological data and I want to insert the grid points and also their polygon in a GeoDataFrame. They are generated by ERA5 and in a GRIB format.
When I try to create the GeoDataFrame, it prompts the following error:
TypeError: Input must be valid geometry objects: p_std
I did some debug and some search on the internet, but I still don't get where is wrong. I don't know either if it is some theoretical or code mistake.
Code:
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point, Polygon
wkt_grib = 'GEOGCS["Coordinate System imported from GRIB file",DATUM["unnamed",SPHEROID["Sphere",6367470,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST]]'
#latitude | -90 a 90
lat = [i*0.01 for i in range(-9000,9001,25)]
#longitude | -180 a 179.75
long = [(i*0.01)-180 for i in range(0,36000,25)]
#the list size is 1038240 | from 0 to 1038239
lat_list = [i for i in lat for x in range(len(long))]
long_list = [x for i in range(len(lat)) for x in long]
name_list = [ str(lat_list[i])+"_"+str(long_list[i]) for i in range(len(long_list))]
p_std_list = gpd.points_from_xy(x=long_list, y=lat_list, crs=wkt_grib)
p_central_list = gpd.points_from_xy(x=[i+0.125 for i in long_list], y=[i+0.125 for i in lat_list], crs=wkt_grib)
grid_list = [Polygon([(long_list[i], lat_list[i]), \
(long_list[i]+0.25, lat_list[i]), \
(long_list[i]+0.25, lat_list[i]+0.25), \
(long_list[i], lat_list[i]+0.25)]) for i in range(len(long_list))]
dict_df = {'name':name_list,'lat':lat_list, 'long':long_list, 'p_std':p_std_list, 'p_central': p_central_list, 'grid':grid_list}
geodf = gpd.GeoDataFrame(dict_df, crs = wkt_grib, geometry = ['p_std','p_central','grid'])