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)