If you have grid or point data and polygon shapefiles for longitude and longitude. Using geopandas and shapely it’s easy to find grids or points in specific polygons.
import geopandas as gpd import pandas as pd import numpy as np import matplotlib.pyplot as plt from shapely.geometry import Point # US state polygon shape file US_states=gpd.GeoDataFrame.from_file('states_province_shapefile\cb_2018_us_state_20m\cb_2018_us_state_20m.shp') US_states
X=np.load('rainfed_maize_production_Xgrid.npy') #Longitudes of 2-dimension grid points Y=np.load('rainfed_maize_production_Ygrid.npy') #Latitudes of 2-dimension grid points xx=X.flatten() yy=Y.flatten() # df = pd.DataFrame({'lon':xx, 'lat':yy}) df['coords'] = list(zip(df['lon'],df['lat'])) df['coords'] = df['coords'].apply(Point) points=gpd.GeoDataFrame(df, geometry='coords', crs=US_states.crs) # pointInPolys = gpd.tools.sjoin(points, US_states, predicate="within", how='left') # pnt_Iowa = points[pointInPolys.NAME=='Iowa'] pnt_MN = points[pointInPolys.STUSPS=='MN'] pnt_IA = points[pointInPolys.STUSPS=='IA'] pnt_WI = points[pointInPolys.STUSPS=='WI'] pnt_IL = points[pointInPolys.STUSPS=='IL'] pnt_MI = points[pointInPolys.STUSPS=='MI'] pnt_IN = points[pointInPolys.STUSPS=='IN'] pnt_OH = points[pointInPolys.STUSPS=='OH'] pnt_NY = points[pointInPolys.STUSPS=='NY'] pnt_PA = points[pointInPolys.STUSPS=='PA'] pnt_MD = points[pointInPolys.STUSPS=='MD'] # pnt_IA.to_csv('state_province_gridcell_csvfiles\Gridcell_IA.csv') pnt_MN.to_csv('state_province_gridcell_csvfiles\Gridcell_MN.csv') pnt_WI.to_csv('state_province_gridcell_csvfiles\Gridcell_WI.csv') pnt_IL.to_csv('state_province_gridcell_csvfiles\Gridcell_IL.csv') pnt_MI.to_csv('state_province_gridcell_csvfiles\Gridcell_MI.csv') pnt_IN.to_csv('state_province_gridcell_csvfiles\Gridcell_IN.csv') pnt_OH.to_csv('state_province_gridcell_csvfiles\Gridcell_OH.csv') pnt_NY.to_csv('state_province_gridcell_csvfiles\Gridcell_NY.csv') pnt_PA.to_csv('state_province_gridcell_csvfiles\Gridcell_PA.csv') pnt_MD.to_csv('state_province_gridcell_csvfiles\Gridcell_MD.csv') # pnt_Iowa
figure=plt.figure(figsize=(20,15)) base = US_states.boundary.plot(linewidth=1, edgecolor="black") points.plot(ax=base, linewidth=1, color="blue", markersize=1) pnt_Iowa.plot(ax=base, linewidth=1, color="red", markersize=8) plt.xlim([-100,-70]) plt.ylim([35,65]) plt.show()
#Canada ## https://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/files-fichiers/gpr_000b11a_e.zip CA_provinces=gpd.GeoDataFrame.from_file('states_province_shapefile\gpr_000b11a_e\gpr_000b11a_e.shp') ca_points=gpd.GeoDataFrame(df, geometry='coords', crs=CA_provinces.crs) Ca_pointInPolys = gpd.tools.sjoin(ca_points, CA_provinces, predicate="within", how='left') CA_provinces
pnt_Ontario = ca_points[Ca_pointInPolys.PRENAME=='Ontario'] pnt_Quebec = ca_points[Ca_pointInPolys.PRENAME=='Quebec'] pnt_Quebec.to_csv('state_province_gridcell_csvfiles\Gridcell_QC.csv') # Plot map with points in Quebec in red #figure=plt.figure(figsize=(20,15)) base =CA_provinces.boundary.plot(linewidth=1, edgecolor="black") points.plot(ax=base, linewidth=1, color="blue", markersize=1) pnt_Quebec.plot(ax=base, linewidth=1, color="red", markersize=8) plt.xlim([-100,-70]) plt.ylim([35,65]) plt.show()
# Plot map with points in Ontario in red #figure=plt.figure(figsize=(20,15)) base =CA_provinces.boundary.plot(linewidth=1, edgecolor="black") points.plot(ax=base, linewidth=1, color="blue", markersize=1) pnt_Ontario.plot(ax=base, linewidth=1, color="red", markersize=8) plt.xlim([-100,-70]) plt.ylim([35,65]) plt.show()