-
Notifications
You must be signed in to change notification settings - Fork 2
/
join.py
80 lines (58 loc) · 2.77 KB
/
join.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import pandas as pd
import geopandas as gpd
import os
import shutil
zoning = gpd.read_file('./los-angeles/los-angeles/zoning.geojson')
zoning_metadata = pd.read_csv('./los-angeles/los-angeles/zoning-metadata.csv')
zoning['zone'] = zoning.ZONE_CLASS
merged = zoning.merge(zoning_metadata, on='zone')
print("Lost {} parcels in merged from original list of {}".format(len(zoning) - len(merged),
len(zoning)))
query_params = ['sb_827_parking', 'sb_827_FAR', 'sb_827_res_density',
'sb_827_height_quarter_mile','sb_827_height_half_mile']
qual_prop = merged[merged[query_params].any(axis=1)]
print("num of qualified zones is ", len(qual_prop))
qual_prop = qual_prop[qual_prop['sb_827_non_res'] == False]
print("num of qualified minus non res is ", len(qual_prop))
hqtas = gpd.read_file('./transit-service/data/affected.geojson')
print("loading areas")
quarter_mile_area = gpd.read_file('./transit-service/data/high_rise_affected.geojson')
print("merging data")
aff_prop_list = {}
aff_prop_quarter_list = {}
hqta_geom = hqtas.geometry[0]
hqta_small_geom = quarter_mile_area.geometry[0]
import tqdm
for index, row in tqdm.tqdm(qual_prop.iterrows()):
if row['geometry'].intersects(hqta_geom):
aff_prop_list[index] = row
if row['geometry'].intersects(hqta_small_geom):
aff_prop_quarter_list[index] = row
aff_prop = gpd.GeoDataFrame(aff_prop_list)
aff_prop_quarter = gpd.GeoDataFrame(aff_prop_quarter_list)
aff_prop = aff_prop.transpose()
aff_prop_quarter = aff_prop_quarter.transpose()
print("making difference dataframes")
height_changes_85 = aff_prop_quarter[aff_prop_quarter['sb_827_height_quarter_mile'] == True]
height_changes_45 = aff_prop[aff_prop['sb_827_height_half_mile'] == True]
parking_changes = aff_prop[aff_prop['sb_827_parking'] == True]
res_density_increate = aff_prop[aff_prop['sb_827_res_density'] == True]
print("writing files")
if os.path.exists('./outputs'):
shutil.rmtree('./outputs')
os.mkdir('./outputs')
def gdf_bool_to_int(gdf):
"""For a given GeoDataFrame, returns a copy that
recasts all `bool`-type columns as `int`.
GeoDataFrame -> GeoDataFrame"""
df = gdf.copy()
coltypes = gpd.io.file.infer_schema(df)['properties']
for c in coltypes.items():
if c[1] == 'bool':
colname = c[0]
df[colname] = df[colname].astype('int')
return df
gdf_bool_to_int(height_changes_85).to_file('./outputs/height_85.geojson', driver='GeoJSON')
gdf_bool_to_int(height_changes_45).to_file('./outputs/height_45.geojson', driver='GeoJSON')
gdf_bool_to_int(parking_changes).to_file('./outputs/parking_changes.geojson', driver='GeoJSON')
gdf_bool_to_int(res_density_increate).to_file('./outputs/res_density.geojson', driver='GeoJSON')