def get_features_function(parcelGeom, params): # split the layer list string into proper python list csvReader = csv.reader([params['layerList']], skipinitialspace=True) # iterate over layer and make intersects queries itemList = [] for item in csvReader: itemList.append(item) layerList = itemList[0] # test = 'empty' # # retrieve models from table2model # for layer in layerList: # model = table2model_match[layer] # spatial analysis featureList = [] for layer in layerList: targetModel = table2model_match[layer] intersectResult = DBSession.query(targetModel).filter(or_(targetModel.geom.ST_Intersects(parcelGeom), targetModel.geom.ST_Within(parcelGeom))).all() if intersectResult: # create geojson output with custom attributes for feature in intersectResult: geometryType = DBSession.scalar(feature.geom.ST_GeometryType()) geomType = '' intersectionMeasure = -9999 intersectionMeasureTxt = '' if geometryType == 'ST_Polygon' or geometryType == 'ST_MultiPolygon': intersectionMeasure = DBSession.scalar(feature.geom.ST_Intersection(parcelGeom).ST_Area()) if intersectionMeasure >= 1: intersectionMeasureTxt = ' : ' + str(int(round(intersectionMeasure, 0))) + ' [m2]' geomType = 'Polygone' jsonFeature = sloads(dumps(feature)) jsonFeature['properties']['layerName'] = layer jsonFeature['properties']['intersectionMeasure'] = intersectionMeasureTxt jsonFeature['properties']['geomType'] = 'area' featureList.append(jsonFeature) elif geometryType == 'ST_Line' or geometryType == 'ST_MultiLineString' or geometryType == 'ST_LineString': intersectionMeasure = DBSession.scalar(feature.geom.ST_Intersection(parcelGeom).ST_Length()) if intersectionMeasure >= 1: intersectionMeasureTxt = ' : ' + str(int(round(intersectionMeasure, 0))) + ' [m]' geomType = 'Ligne' jsonFeature = sloads(dumps(feature)) jsonFeature['properties']['layerName'] = layer jsonFeature['properties']['intersectionMeasure'] = intersectionMeasureTxt jsonFeature['properties']['geomType'] = 'line' featureList.append(jsonFeature) elif geometryType == 'ST_Point' or geometryType == 'ST_MultiPoint': featureMeasure = -9999 geomType = 'Point' intersectionMeasureTxt = ' ' # ' : point' jsonFeature = sloads(dumps(feature)) jsonFeature['properties']['layerName'] = layer jsonFeature['properties']['intersectionMeasure'] = intersectionMeasureTxt jsonFeature['properties']['geomType'] = 'point' featureList.append(jsonFeature) return featureList
def createNewDocEntry(request): # Attention il faut que l'utilisateur puisse écrire dans la table et d'1, mais aussi qu'il ait le droit sur la SEQUENCE dans PG # Généralement si erreur 'waitress' > problème avec PG/droits dans PG session = request.session #~ Add login to check user data = sloads(request.POST['data']) document = Documents() if data['numcom']: document.nocom = int(data['numcom']) else: document.nocom = None if data['nufeco']: document.nufeco = int(data['nufeco']) else: document.nufeco = None if data['numcad']: document.nocad = int(data['numcad']) else: document.nocad = None document.nomcom = data['comnom'] document.doctype = data['doctype'] document.topicfk = data['topicfk'] document.titre = data['titre'] document.titreofficiel = data['titreofficiel'] document.abreviation = data['abreviation'] document.noofficiel = data['noofficiel'] document.url = data['url'] document.statutjuridique = data['statutjuridique'] if data['datesanction']: document.datesanction = data['datesanction'] else: document.datesanction = None if data['dateabrogation']: document.dateabrogation = data['dateabrogation'] else: document.dateabrogation = None document.operateursaisie = data['operateursaisie'] if data['datesaisie']: document.datesaisie = data['datesaisie'] else: document.datesaisie = None document.canton = data['canton'] DBSession.add(document) DBSession.flush() return {'success':True}
def createNewDocEntry(request): # Attention il faut que l'utilisateur puisse écrire dans la table et d'1, mais aussi qu'il ait le droit sur la SEQUENCE dans PG data = sloads(request.POST['data']) document = Documents() if data['numcom']: document.nocom = int(data['numcom']) else: document.nocom = None if data['nufeco']: document.nufeco = int(data['nufeco']) else: document.nufeco = None if data['numcad']: document.nocad = int(data['numcad']) else: document.nocad = None document.nomcom = data['comnom'] document.doctype = data['doctype'] document.topicfk = data['topicfk'] document.titre = data['titre'] document.titreofficiel = data['titreofficiel'] document.abreviation = data['abreviation'] document.noofficiel = data['noofficiel'] document.url = data['url'] document.statutjuridique = data['statutjuridique'] if data['datesanction']: document.datesanction = data['datesanction'] else: document.datesanction = None if data['dateabrogation']: document.dateabrogation = data['dateabrogation'] else: document.dateabrogation = None document.operateursaisie = data['operateursaisie'] if data['datesaisie']: document.datesaisie = data['datesaisie'] else: document.datesaisie = None document.canton = data['canton'] DBSession.add(document) DBSession.flush() return {'success': True}
def get_features_function(parcelGeom, params): # split the layer list string into proper python list csvReader = csv.reader([params['layerList']], skipinitialspace=True) # iterate over layer and make intersects queries itemList = [] for item in csvReader: itemList.append(item) layerList = itemList[0] # test = 'empty' # # retrieve models from table2model # for layer in layerList: # model = table2model_match[layer] # spatial analysis featureList = [] for layer in layerList: targetModel = table2model_match[layer] intersectResult = DBSession.query(targetModel).filter( or_(targetModel.geom.ST_Intersects(parcelGeom), targetModel.geom.ST_Within(parcelGeom))).all() if intersectResult: # create geojson output with custom attributes for feature in intersectResult: geometryType = DBSession.scalar(feature.geom.ST_GeometryType()) geomType = '' intersectionMeasure = -9999 intersectionMeasureTxt = '' if geometryType == 'ST_Polygon' or geometryType == 'ST_MultiPolygon': intersectionMeasure = DBSession.scalar( feature.geom.ST_Intersection(parcelGeom).ST_Area()) if intersectionMeasure >= 1: intersectionMeasureTxt = ' : ' + str( int(round(intersectionMeasure, 0))) + ' [m2]' geomType = 'Polygone' jsonFeature = sloads(dumps(feature)) jsonFeature['properties']['layerName'] = layer jsonFeature['properties'][ 'intersectionMeasure'] = intersectionMeasureTxt jsonFeature['properties']['geomType'] = 'area' featureList.append(jsonFeature) elif geometryType == 'ST_Line' or geometryType == 'ST_MultiLineString' or geometryType == 'ST_LineString': intersectionMeasure = DBSession.scalar( feature.geom.ST_Intersection(parcelGeom).ST_Length()) if intersectionMeasure >= 1: intersectionMeasureTxt = ' : ' + str( int(round(intersectionMeasure, 0))) + ' [m]' geomType = 'Ligne' jsonFeature = sloads(dumps(feature)) jsonFeature['properties']['layerName'] = layer jsonFeature['properties'][ 'intersectionMeasure'] = intersectionMeasureTxt jsonFeature['properties']['geomType'] = 'line' featureList.append(jsonFeature) elif geometryType == 'ST_Point' or geometryType == 'ST_MultiPoint': featureMeasure = -9999 geomType = 'Point' intersectionMeasureTxt = ' ' # ' : point' jsonFeature = sloads(dumps(feature)) jsonFeature['properties']['layerName'] = layer jsonFeature['properties'][ 'intersectionMeasure'] = intersectionMeasureTxt jsonFeature['properties']['geomType'] = 'point' featureList.append(jsonFeature) return featureList
def get_features_function(params): # for dev purposes: matching dictionnary model-table name table2model = { 'at39_itineraires_pedestres':PedestrianWays, 'at14_zones_communales': CommunalArea, 'at08_zones_cantonales': StateArea, 'clo_couloirs': Corridors, 'clo_cotes_altitude_surfaces': AltitudeRatings, 'en07_canepo_accidents': PollutedSitesAccidents, 'en07_canepo_decharges': PollutedSitesLandDumps, 'en07_canepo_decharges_points': PollutedSitesLandDumpsPts, 'en07_canepo_decharges_polygones': PollutedSitesLandDumpsPoly, 'en07_canepo_entreprises': PollutedSitesCompanies, 'en07_canepo_entreprises_points': PollutedSitesCompaniesPts, 'en07_canepo_entreprises_polygones': PollutedSitesCompaniesPoly, 'at28_limites_constructions': ConstructionsLimits, 'en05_degres_sensibilite_bruit': RoadNoise, 'en01_zone_sect_protection_eaux': Zoneprotection } parcelId = params['id'] # get the parcel geometry queryParcel =DBSession.query(ImmeublesCanton).filter_by(idemai=parcelId).first() parcelGeom = queryParcel.geom # split the layer list string into proper python list csvReader = csv.reader([params['layerList']], skipinitialspace=True) # iterate over layer and make intersects queries itemList = [] for item in csvReader: itemList.append(item) layerList = itemList[0] test = 'empty' # retrieve models from table2model for layer in layerList: model = table2model[layer] # spatial analysis featureList = [] for layer in layerList: targetModel = table2model[layer] intersectResult = DBSession.query(targetModel).filter(or_(targetModel.geom.intersects(parcelGeom), targetModel.geom.within(parcelGeom))).all() if intersectResult: # create geojson output with custom attributes for feature in intersectResult: geometryType = DBSession.scalar(feature.geom.geometry_type()) geomType = '' featureClass = '' featureMeasure = -9999 intersectionMeasure = -9999 intersectionMeasureTxt = '' if geometryType == 'ST_Polygon' or geometryType == 'ST_MultiPolygon': intersectionMeasure = DBSession.scalar(feature.geom.intersection(parcelGeom).area()) intersectionMeasureTxt = ' - ' + str(math.ceil(intersectionMeasure*10)/10) + ' [m2]' featureMeasure = 100 * intersectionMeasure / DBSession.scalar(parcelGeom.area()) geomType = 'Polygone' if featureMeasure >= 99: featureClass = 'within' elif featureMeasure < 99 and featureMeasure >= 0: featureClass = 'intersects' elif featureMeasure < 0: featureClass = 'adjacent' elif geometryType == 'ST_Line' or geometryType == 'ST_MultiLineString' or geometryType == 'ST_LineString': intersectionMeasure = intersectionMeasure = DBSession.scalar(feature.geom.intersection(parcelGeom).length()) intersectionMeasureTxt = ' - ' + str(math.ceil(intersectionMeasure*10)/10) + ' [m]' geomType = 'Ligne' elif geometryType == 'ST_Point' or geometryType == 'ST_MultiPoint': featureMeasure = -9999 geomType = 'Point' intersectionMeasureTxt = ' - point' jsonFeature = sloads(dumps(feature)) jsonFeature['properties']['layerName'] = layer jsonFeature['properties']['featureClass'] = featureClass jsonFeature['properties']['intersectionMeasure'] = intersectionMeasureTxt featureList.append(jsonFeature) return featureList