from pdal import Pipeline import json import traceback import geopandas as gpd import numpy as np import sys global puntosIN global buffer global entwine args=json.loads(sys.argv[1]) #args['path_entwine'] #args['disk'] #args['path_geojson'] #args['buffer'] puntosIN=gpd.read_file("./in/"+args['path_geojson']) buffer=gpd.read_file("./in/"+args['buffer']) entwine="./in/"+args['path_entwine'] #{"path_entwine":"../DATA4/entwine_updated_Andalucia_Bloque1M/ept.json","disk":"","path_geojson":"./puntos.geojson","buffer":"2"} #{"path_entwine":"../DATA4/entwine_updated_Andalucia_Bloque1M/ept.json","disk":"","path_geojson":"./puntos.geojson","buffer":"2"} #'{"path_entwine":"../DATA3/master_folder/lidar/sources/entwine_data_25830/ept.json","disk":"","path_geojson":"./ruben_prueba_Los_Barrios.geojson","buffer":"./bufferedes/buffered_linestring.geojson"}' #puntosIN=gpd.read_file('./puntos.geojson') #buffer=2 #entwine="../DATA4/entwine_updated_Andalucia_Bloque1M/ept.json" #"../DATA4/entwine_updated_Andalucia_Bloque1M/ept.json" #"./puntos.geojson" def pdal(): jsonZ=[] readers= { "type": "readers.ept", "filename": entwine, "polygon": str(buffer['geometry'][0]) } gopython= { "type": "filters.python", "script": "give_Z.py", "function": "givez", "module": "anything" } jsonZ.append(readers) jsonZ.append(gopython) peticion = json.dumps(jsonZ) pipeline = Pipeline(peticion) count = pipeline.execute() arrays = pipeline.arrays #print('arrays '+ str(arrays)) metadata = pipeline.metadata #print('metadata '+ str(metadata)) log = pipeline.log print(log) def givez(ins,outs): XYLIDAR=np.column_stack((ins['X'],ins['Y'])).astype(float) #print("PUNTOSLIDAR",len(XYLIDAR)) XYIN=np.column_stack((puntosIN['X'],puntosIN['Y'])) Z=ins['Z'] #print(XYIN) #print(Z[0]) for i,punto in enumerate(XYIN): #numpypunto=np.array([punto[0],punto[1]]) #print("PUNTOBJETIVO",punto) distancias=np.linalg.norm(XYLIDAR-punto.astype(float), axis=1) if distancias.size == 0: continue minimo=np.argmin(distancias) #print(minimo) puntosIN['Z'][i]=Z[minimo] # puntosIN.to_file('./output_puntos.shp', driver="ESRI Shapefile") puntosIN.to_file("./in/"+args['path_geojson'], driver="GeoJSON") # quit() # XY=np.column_stack(puntosIN['X'],puntosIN['Y']) # for i,punto in enumerate(puntosIN['Z']): # continue return True if __name__ == '__main__': try: pdal() except Exception: traceback.print_exc()