#load libraries and APIs
import time
start = time.time() # start time
import pandas as pd
import geopandas as gpd
import numpy as np
import shapely
from shapely.geometry import Point, Polygon
import fiona
import folium
import os
import math
# Path to data
Project_folder = "Sample_Files"
sample_points = os.path.join(Project_folder, "eMerges 21 Test Longitudes and Lattitude Records for UpWork.csv")
dist_cong = os.path.join(Project_folder, "Maryland_Election_Boundaries__US_Congressional_Districts_2011.shp")
dist_legi = os.path.join(Project_folder, "Maryland_Election_Boundaries__Maryland_Legislative_Districts_2012.shp")
output_folder = 'data'
if not os.path.exists(output_folder):
os.makedirs(output_folder)
#import data
## Read Sample Points
df = pd.read_csv(sample_points)
### Change datatype of conflicting data types
for column in df:
if df[column].dtype == 'bool':
df[column] = df[column].astype('str')
## Change dataframe to geospatial
geometry = [Point(xy) for xy in zip(df.Mailing_Addresses_Longitude, df.Mailing_Addresses_Latitude)]
crs = {'init': 'epsg:4326'}
geo_df = gpd.GeoDataFrame(df, crs=crs, geometry=geometry)
## Read Spatial Data
dist_cong_df = gpd.read_file(dist_cong)
dist_legi_df = gpd.read_file(dist_legi)
dist_cong_df.plot()
dist_legi_df.plot()
# Spatial Joins for the Data
temp_df = gpd.sjoin(geo_df, dist_cong_df, how="inner", op='intersects')
temp_df['Congressional District#'] = temp_df['DISTRICT']
geo_df = temp_df[df.columns]
temp_df = gpd.sjoin(geo_df, dist_legi_df, how="inner", op='intersects')
temp_df['Legislative District#'] = temp_df['DISTRICT']
geo_df = temp_df[df.columns]
# Drop Geometry Column
df = geo_df.drop(columns=['geometry'])
geo_df.plot()
# Write output files
outcsv = os.path.join(output_folder, "Sample_Points_Joined.csv")
df.to_csv(outcsv, encoding='utf-8', index=False)
df