Another Example of GeoPandas and Python Spatial Joins
Another Example of GeoPandas and Python Spatial Joins πΊ
Yesterday, I posted a much more complicated piece of code that pulled addresses from the SAM (State Address Management) database and did a spatial join to add a column to the file with Assembly District and Municipality. This was a bit too complex, so I made a simpler one for other purposes that doesn’t require the coordinates to be obtained from SAM.
This python script takes two parameters:
- Path to a CSV file that contains an X and Y coordinate
- Path to a Shapefile or Geopackage to Join Against
Then the code will create a new CSV file with the spatially joined attributes pulled from the Shapefile. I have only run it on a few large data sets, but I found it took roughly 1 second to join 1,000 records from call to end of end of script.
#!/usr/bin/python import requests,sys,json,os,csv import pandas as pd import geopandas as gpd lines=[] # read list of addresses from parameter 1 with open(sys.argv[-2], newline='') as csvfile: for line in csv.DictReader(csvfile): lines.append(line) # convert to pandas locPd = pd.DataFrame(lines,columns=lines[0].keys()) locPd.convert_dtypes() locPd = gpd.GeoDataFrame(locPd, geometry=gpd.points_from_xy(locPd.x.astype('float32'), locPd.y.astype('float32'))) # run spatial joins against parameter 2 ad = gpd.read_file(sys.argv[-1]) locPd = gpd.sjoin(locPd, ad, op="within") # remove added geometery and index columns del locPd['geometry'] del locPd['index_right'] # write pandas back to out csv locPd.to_csv (os.path.splitext(sys.argv[-2])[0]+'-output.csv', index = False, header=True)
1 Trackback or Pingback