コード例 #1
0
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
コード例 #2
0
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}
コード例 #3
0
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}
コード例 #4
0
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
コード例 #5
0
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