Exemple #1
0
def harmonize(uid):
    """This function is used to show and handle the harmonization options and process.

    GET request: Renders and returns a site showing harmonization options.

    POST request: Gets the harmonization options from the user and creates an object of the HarmonizeOptions class
    which holds the user's chosen and default options. The harmonize_datasets function from the OSMDeviationfinder class
    is called with the HarmonizeOptions object as parameter. The harmonize_datasets function uses 'yield' to return the
    progress, this is used to stream the progress to the client.
    """
    uid = uid.encode("ISO-8859-1")
    devfinder = OSMDeviationfinder(connectioninfo)
    dm = DevMap.query.filter_by(uid=uid).first()
    if request.method == "POST":
        devfinder.db_source = ogr.Open(devfinder.dbconnectioninfo_ogr, 1)

        harmonization_options = HarmonizeOptions(uid)

        #: Keep column osm_id while processing
        harmonization_options.keepcolumns_t2 = {"osm_id": "varchar"}

        if "azimuthdifftolerance" in request.form:
            harmonization_options.azimuthdifftolerance = request.form["azimuthdifftolerance"]
        if "maxcheckpointanglediff" in request.form:
            harmonization_options.maxcheckpointanglediff = request.form["maxcheckpointanglediff"]
        if "searchradius" in request.form:
            harmonization_options.searchradius = request.form["searchradius"]
        if "presplitref" in request.form:
            harmonization_options.presplitref = True
        if "presplitosm" in request.form:
            harmonization_options.presplitosm = True
        if "harmonize" in request.form:
            harmonization_options.harmonize = True
        if "cleanref" in request.form:
            harmonization_options.cleanref = True
        if "cleanosm" in request.form:
            harmonization_options.cleanosm = True
        if "cleandistance" in request.form:
            harmonization_options.cleanosmradius = request.form["cleandistance"]
            harmonization_options.cleanrefradius = request.form["cleandistance"]
        if "streetnamecol" in request.form:
            harmonization_options.streetnamecol = request.form["streetnamecol"]
        if harmonization_options.streetnamecol == "NoNameCol":
            devfinder.create_nonamecolumn("odf_" + uid + "_ref")
        dm.basetable = harmonization_options.basetable
        dm.harmonize = harmonization_options.harmonize
        dm.reftable = harmonization_options.reftable
        dm.osmtable = harmonization_options.osmtable
        dm.streetnamecol = harmonization_options.streetnamecol
        dm.outsuffix = harmonization_options.outsuffix
        dm.keepcolumns_t1 = harmonization_options.keepcolumns_t1
        dm.keepcolumns_t2 = harmonization_options.keepcolumns_t2
        dm.cleanref = harmonization_options.cleanref
        dm.cleanosm = harmonization_options.cleanosm
        dm.cleanrefradius = harmonization_options.cleanrefradius
        dm.cleanosmradius = harmonization_options.cleanosmradius
        dm.presplitref = harmonization_options.presplitref
        dm.presplitosm = harmonization_options.presplitosm
        dm.searchradius = harmonization_options.searchradius
        dm.azimuthdifftolerance = harmonization_options.azimuthdifftolerance
        dm.maxcheckpointanglediff = harmonization_options.maxcheckpointanglediff
        dm.max_roads_countdiff = harmonization_options.max_roads_countdiff
        dm.max_azdiff = harmonization_options.max_azdiff
        dm.max_distancediff = harmonization_options.max_distancediff
        db.session.add(dm)
        db.session.commit()
        return Response(devfinder.harmonize_datasets(harmonization_options), mimetype="text/html")
    namecolumns = devfinder.get_textcolumns("odf_" + uid + "_ref")
    return render_template("harmonize.html", uid=uid, namecolumns=namecolumns, dm=dm)