Newer
Older
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import sys
from shapely.ops import unary_union
from shapely import wkt
from utils import *
def computeData(df):
"""
Specific treatments
"""
# Init var
DB_params = {
"host" : os.getenv('DB_HOST'),
"user" : os.getenv('DB_USER'),
"password" : os.getenv('DB_PWD'),
"database" : os.getenv('DB_NAME'),
}
DB_schema = os.getenv('DB_SCHEMA')
ENV_targetProj = os.getenv('TARGET_PROJ')
#TODO: Reproj
df = checkAndReproj(df, ENV_targetProj)
print("df input")
print(df)
print(type(df))
print(df.geom_type)
print(df.loc[[0],'geometry'])
print(type(df.loc[[0],'geometry']))
# print(df.loc[[0],'geometry'][1]._geom)
# Init timer
unionTimer = startTimerLog('Union Timer')
# Convert geom str to WKT
df['geometry'] = df.geometry.apply(lambda x: wkt.dumps(x))
print(df)
df['geometry'] = df.geometry.apply(lambda x: wkt.loads(x))
print(df)
# Regroup
unionGeom = unary_union(df)
# Make GDF
dataUnion = {'geometry': unionGeom}
unionParcelleDF = gp.GeoDataFrame(dataUnion, crs=ENV_targetProj)
#TODO: Reproj
unionParcelleDF = checkAndReproj(unionParcelleDF, ENV_targetProj)
# End timer
endTimerLog(unionTimer)
# Get communes datas
query = "SELECT geom_poly as geom FROM " + DB_schema + ".commmunes"
communesGDF = getGDFfromDB(DB_params, query, ENV_targetProj)
# Init timer
substractTimer = startTimerLog('Substract Timer')
# Substract with existing batiment geom
diffDF = gp.overlay(communesGDF, unionParcelleDF, how='difference')
print(diffDF)
print(type(diffDF))
# DEBUG
# diffDF.to_file("./file_data/bati_result_overlay.shp")
# End timer
endTimerLog(substractTimer)
### IS_EMPTY ? ###
# facadeGDF = checkAndDeleteEmptyGeomFromGDF(facadeGDF)
return diffDF
def wrongArguments():
print(style.RED + '/!\ Subscript error : Please specify a source and result filename as arguments to launch this script \n', style.RESET)
sys.exit(1)
if __name__ == "__main__":
# Init timer
subTimer = startTimerLog('Parcelle Grand Lyon subscript process')
# Get data with temp filename in argv
argv = sys.argv[1:]
firstArgv = None
secArgv = None
# Argv exist ?
if argv:
if len(sys.argv[1:]) > 0:
firstArgv = sys.argv[1:][0]
else:
wrongArguments()
if len(sys.argv[1:]) > 1:
secArgv = sys.argv[1:][1]
else:
wrongArguments()
# Load file Data (geoJSON)
currentGDF = createGDFfromGeoJSON(firstArgv)
# Log & Launch treatment
currentGDF = computeData(currentGDF)
# Write Result in temp file
currentGDF.to_file(secArgv)
# End timer
endTimerLog(subTimer)
else:
wrongArguments()