-
Notifications
You must be signed in to change notification settings - Fork 0
/
geo_tools.py
67 lines (52 loc) · 1.75 KB
/
geo_tools.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
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 30 08:08:59 2021
@author: Beau.Uriona
"""
from os import path
import pandas as pd
THIS_DIR = path.dirname(path.abspath(__file__))
STATIC_DIR = path.join(THIS_DIR, "static")
def rename_btype(topo_dict):
geom = topo_dict["objects"]["hucall_simplified"]["geometries"]
for g in geom:
g["properties"]["btype"] = g["properties"].pop("type")
topo_dict["objects"]["hucall_simplified"]["geometries"] = geom
return topo_dict
def frmt_geo_response(gdf, frmt="geojson", orient="records"):
if isinstance(gdf, Exception):
return gdf
if frmt == "geojson":
return gdf.to_json()
df = pd.DataFrame(gdf.drop(columns="geom"))
if frmt == "json":
index = True
if orient in ["split", "table"]:
index = False
return df.to_json(index=index, orient=orient)
if frmt == "csv":
return df.to_csv(index=False)
def get_gdf_attrs(gdf, b_attr="btype", unique=False):
if not b_attr in gdf.columns:
return []
b_attrs = gdf[b_attr]
if unique:
b_attrs = b_attrs.unique()
return list(b_attrs)
def filter_geom(gdf, val, b_attr="btype", filter_type="eq"):
wildcard_custom_dict = {"xx_8": 4, "xx2_8": 5, "xx3": 3}
val = str(val).lower()
if val == "all":
return gdf
if filter_type == "eq":
if val.startswith("xx"):
str_len = wildcard_custom_dict.get(val, 4)
return gdf[gdf[b_attr].str.len() == str_len]
return gdf[gdf[b_attr].str.lower() == val]
if filter_type == "in":
if isinstance(val, str):
val = [i.strip() for i in val.split(",")]
return gdf[gdf[b_attr].str.lower().isin(val)]
return gdf
if __name__ == "__main__":
pass