コード例 #1
0
ファイル: raw_query.py プロジェクト: andyprasetya/QuickOSM
    def processAlgorithm(self, parameters, context, feedback):
        raw_query = self.parameterAsString(parameters, self.QUERY, context)
        server = self.parameterAsString(parameters, self.SERVER, context)
        nominatim = self.parameterAsString(parameters, self.AREA, context)
        extent = self.parameterAsExtent(parameters, self.EXTENT, context)
        crs = self.parameterAsExtentCrs(parameters, self.EXTENT, context)

        crs_4326 = QgsCoordinateReferenceSystem(4326)
        transform = QgsCoordinateTransform(
            crs, crs_4326, QgsProject.instance())
        extent = transform.transform(extent)

        query_preparation = QueryPreparation(
            raw_query,
            extent=extent,
            area=nominatim,
            overpass=server
        )
        raw_query = query_preparation.prepare_query()
        url = query_preparation.prepare_url()

        outputs = {
            self.OUTPUT_URL: url,
            self.OUTPUT_OQL_QUERY: raw_query,
        }
        return outputs
コード例 #2
0
ファイル: process.py プロジェクト: ghtmtt/QuickOSM
def process_query(dialog=None,
                  query=None,
                  nominatim=None,
                  bbox=None,
                  output_dir=None,
                  prefix_file=None,
                  output_geometry_types=None,
                  layer_name="OsmQuery",
                  white_list_values=None,
                  config_outputs=None):
    """execute a query and send the result file to open_file."""

    # Prepare outputs
    dialog.set_progress_text(tr('Prepare outputs'))

    # Replace Nominatim or BBOX
    query = QueryPreparation(query, bbox, nominatim)

    # Getting the default overpass api and running the query
    server = get_setting('defaultOAPI')
    dialog.set_progress_text(tr('Downloading data from Overpass'))
    QApplication.processEvents()
    connexion_overpass_api = ConnexionOAPI(url=server, output="xml")
    osm_file = connexion_overpass_api.query(query.prepare_query())

    return open_file(dialog=dialog,
                     osm_file=osm_file,
                     output_geom_types=output_geometry_types,
                     white_list_column=white_list_values,
                     layer_name=layer_name,
                     output_dir=output_dir,
                     prefix_file=prefix_file,
                     config_outputs=config_outputs)
コード例 #3
0
 def generate_query(self):
     query = self.text_query.toPlainText()
     area = self.nominatim_value(Panels.Query).text()
     bbox = self.get_bounding_box()
     query = QueryPreparation(query, bbox, area)
     query_string = query.prepare_query()
     self.text_query.setPlainText(query_string)
コード例 #4
0
ファイル: build_query.py プロジェクト: Gustry/QuickOSM
    def build_query(self) -> Dict[str, str]:
        """Build the query requested."""
        query_factory = QueryFactory(
            query_type=self.QUERY_TYPE,
            key=self.key,
            value=self.value,
            area=self.area,
            around_distance=self.distance,
            timeout=self.timeout)
        raw_query = query_factory.make(QueryLanguage.OQL)
        self.feedback.pushInfo(query_factory.friendly_message())
        query_preparation = QueryPreparation(
            raw_query,
            area=self.area,
            extent=self.extent,
            overpass=self.server
        )
        raw_query = query_preparation.prepare_query()
        url = query_preparation.prepare_url()

        outputs = {
            self.OUTPUT_URL: url,
            self.OUTPUT_OQL_QUERY: raw_query,
        }
        return outputs
コード例 #5
0
    def processAlgorithm(self, parameters, context, feedback) -> Dict[str, str]:
        """Run the algorithm."""
        self.feedback = feedback
        self.fetch_based_parameters(parameters, context)

        crs_4326 = QgsCoordinateReferenceSystem(4326)
        transform = QgsCoordinateTransform(
            self.crs, crs_4326, QgsProject.instance())
        self.extent = transform.transform(self.extent)

        self.feedback.pushInfo('Prepare the url.')

        query_preparation = QueryPreparation(
            self.query,
            extent=self.extent,
            area=self.area,
            overpass=self.server
        )
        raw_query = query_preparation.prepare_query()
        url = query_preparation.prepare_url()

        outputs = {
            self.OUTPUT_URL: url,
            self.OUTPUT_OQL_QUERY: raw_query,
        }
        return outputs
コード例 #6
0
ファイル: query_panel.py プロジェクト: j16sdiz/QuickOSM
 def generate_query(self):
     query = self.dialog.text_query.toPlainText()
     area = self.dialog.places_edits[Panels.Query].text()
     self.write_nominatim_file(Panels.Query)
     bbox = self.dialog.get_bounding_box()
     query = QueryPreparation(query, bbox, area)
     query_string = query.prepare_query()
     self.dialog.text_query.setPlainText(query_string)
コード例 #7
0
 def generate_query(self):
     query = self.dialog.text_query.toPlainText()
     area = self.dialog.places_edits[Panels.Query].text()
     self.write_nominatim_file(Panels.Query)
     properties = self.gather_values()
     query = QueryPreparation(query, properties['bbox'], area)
     query_string = query.prepare_query()
     self.dialog.text_query.setPlainText(query_string)
コード例 #8
0
ファイル: query_dialog.py プロジェクト: 3liz/QuickOSM
    def generate_query(self):
        """
        Transform the template to query "out of the box"
        """

        query = self.textEdit_query.toPlainText()
        nominatim = self.lineEdit_nominatim.text()
        bbox = self.get_bounding_box()
        query = QueryPreparation(query, bbox, nominatim)
        query_string = query.prepare_query()
        self.textEdit_query.setPlainText(query_string)
コード例 #9
0
    def generate_query(self):
        """
        Transform the template to query "out of the box"
        """

        query = self.textEdit_query.toPlainText()
        nominatim = self.lineEdit_nominatim.text()
        bbox = self.get_bounding_box()
        query = QueryPreparation(query, bbox, nominatim)
        query_string = query.prepare_query()
        self.textEdit_query.setPlainText(query_string)
コード例 #10
0
ファイル: build_query.py プロジェクト: 3liz/QuickOSM
    def build_query(self):
        query_factory = QueryFactory(
            query_type=self.QUERY_TYPE,
            key=self.key,
            value=self.value,
            area=self.area,
            around_distance=self.distance,
            timeout=self.timeout)
        raw_query = query_factory.make()
        query_preparation = QueryPreparation(
            raw_query, nominatim_place=self.area, extent=self.extent, overpass=self.server
        )
        raw_query = query_preparation.prepare_query()
        url = query_preparation.prepare_url()

        outputs = {
            self.OUTPUT_URL: url,
            self.OUTPUT_OQL_QUERY: raw_query,
        }
        return outputs
コード例 #11
0
def process_query(
        dialog=None,
        query=None,
        area=None,
        bbox=None,
        output_dir=None,
        prefix_file=None,
        output_geometry_types=None,
        layer_name="OsmQuery",
        white_list_values=None,
        config_outputs=None):
    """execute a query and send the result file to open_file."""

    # Prepare outputs
    dialog.set_progress_text(tr('Prepare outputs'))

    # Getting the default overpass api and running the query
    server = get_setting('defaultOAPI', OVERPASS_SERVERS[0]) + 'interpreter'
    dialog.set_progress_text(
        tr('Downloading data from Overpass {server_name}'.format(
            server_name=server)))
    # Replace Nominatim or BBOX
    query = QueryPreparation(query, bbox, area, server)
    QApplication.processEvents()
    final_query = query.prepare_query()
    url = query.prepare_url()
    connexion_overpass_api = ConnexionOAPI(url)
    LOGGER.debug('Encoded URL: {}'.format(url))
    osm_file = connexion_overpass_api.run()

    return open_file(
        dialog=dialog,
        osm_file=osm_file,
        output_geom_types=output_geometry_types,
        white_list_column=white_list_values,
        layer_name=layer_name,
        output_dir=output_dir,
        prefix_file=prefix_file,
        final_query=final_query,
        config_outputs=config_outputs)
コード例 #12
0
ファイル: process.py プロジェクト: 3liz/QuickOSM
def process_query(
        dialog=None,
        query=None,
        nominatim=None,
        bbox=None,
        output_dir=None,
        prefix_file=None,
        output_geometry_types=None,
        layer_name="OsmQuery",
        white_list_values=None,
        config_outputs=None):
    """execute a query and send the result file to open_file."""

    # Prepare outputs
    dialog.set_progress_text(tr('Prepare outputs'))

    # Getting the default overpass api and running the query
    server = get_setting('defaultOAPI', OVERPASS_SERVERS[0]) + 'interpreter'
    dialog.set_progress_text(
        tr('Downloading data from Overpass {}').format(server))
    # Replace Nominatim or BBOX
    query = QueryPreparation(query, bbox, nominatim, server)
    QApplication.processEvents()
    final_query = query.prepare_query()
    url = query.prepare_url()
    connexion_overpass_api = ConnexionOAPI(url)
    LOGGER.debug('Encoded URL: {}'.format(url))
    osm_file = connexion_overpass_api.run()

    return open_file(
        dialog=dialog,
        osm_file=osm_file,
        output_geom_types=output_geometry_types,
        white_list_column=white_list_values,
        layer_name=layer_name,
        output_dir=output_dir,
        prefix_file=prefix_file,
        final_query=final_query,
        config_outputs=config_outputs)
コード例 #13
0
ファイル: overpass_query.py プロジェクト: ghtmtt/QuickOSM
    def processAlgorithm(self, progress):
        progress.setInfo("Preparing the Overpass query")
        progress.setPercentage(0)

        server = self.getParameterValue(self.SERVER)
        query = self.getParameterValue(self.QUERY_STRING)
        nominatim = self.getParameterValue(self.NOMINATIM)

        # Extent of the layer
        extent = self.getParameterValue(self.EXTENT)
        if extent != "0,0,0,0":
            # x_min, x_max, y_min, y_max
            extent = [float(i) for i in extent.split(',')]
            # noinspection PyCallByClass
            geometry_extent = QgsGeometry.fromRect(
                QgsRectangle(extent[0], extent[2], extent[1], extent[3]))
            source_crs = iface.mapCanvas().mapRenderer().destinationCrs()
            crs_transform = QgsCoordinateTransform(
                source_crs, QgsCoordinateReferenceSystem("EPSG:4326"))
            geometry_extent.transform(crs_transform)
            extent = geometry_extent.boundingBox()
        else:
            extent = None

        if nominatim == "":
            nominatim = None

        # Make some transformation on the query ({{box}}, Nominatim, ...
        query = QueryPreparation(query, extent, nominatim)

        overpass_api = ConnexionOAPI(url=server, output="xml")
        progress.setInfo("Downloading data from Overpass")
        progress.setPercentage(5)
        osm_file = overpass_api.get_file_from_query(query.prepare_query())

        # Set the output file for Processing
        progress.setPercentage(100)
        self.setOutputValue(self.OUTPUT_FILE, osm_file)
コード例 #14
0
ファイル: raw_query.py プロジェクト: 3liz/QuickOSM
    def processAlgorithm(self, parameters, context, feedback):
        raw_query = self.parameterAsString(parameters, self.QUERY, context)
        server = self.parameterAsString(parameters, self.SERVER, context)
        nominatim = self.parameterAsString(parameters, self.AREA, context)
        extent = self.parameterAsExtent(parameters, self.EXTENT, context)
        crs = self.parameterAsExtentCrs(parameters, self.EXTENT, context)

        crs_4326 = QgsCoordinateReferenceSystem(4326)
        transform = QgsCoordinateTransform(
            crs, crs_4326, QgsProject.instance())
        extent = transform.transform(extent)

        query_preparation = QueryPreparation(
            raw_query, extent=extent, nominatim_place=nominatim, overpass=server
        )
        raw_query = query_preparation.prepare_query()
        url = query_preparation.prepare_url()

        outputs = {
            self.OUTPUT_URL: url,
            self.OUTPUT_OQL_QUERY: raw_query,
        }
        return outputs
コード例 #15
0
ファイル: build_query.py プロジェクト: andyprasetya/QuickOSM
    def build_query(self):
        query_factory = QueryFactory(
            query_type=self.QUERY_TYPE,
            key=self.key,
            value=self.value,
            area=self.area,
            around_distance=self.distance,
            timeout=self.timeout)
        raw_query = query_factory.make()
        query_preparation = QueryPreparation(
            raw_query,
            area=self.area,
            extent=self.extent,
            overpass=self.server
        )
        raw_query = query_preparation.prepare_query()
        url = query_preparation.prepare_url()

        outputs = {
            self.OUTPUT_URL: url,
            self.OUTPUT_OQL_QUERY: raw_query,
        }
        return outputs
コード例 #16
0
ファイル: query_panel.py プロジェクト: Gustry/QuickOSM
    def generate_query(self, oql_output: bool = True):
        """Generate the query as final."""
        query = self.dialog.text_query.toPlainText()
        area = self.dialog.places_edits[Panels.Query].text()
        self.write_nominatim_file(Panels.Query)
        properties = self.gather_values()
        server = get_setting('defaultOAPI', OVERPASS_SERVERS[0]) + 'convert'
        query = QueryPreparation(query, properties['bbox'], area, server)
        query_string = query.prepare_query()
        if (oql_output
                and not query.is_oql_query()) or (not oql_output
                                                  and query.is_oql_query()):
            query.prepare_query()
            url = query.prepare_url(
                QueryLanguage.OQL if oql_output else QueryLanguage.XML)
            connexion_overpass_api = ConnexionOAPI(url)
            LOGGER.debug('Encoded URL: {}'.format(url))
            query_string = connexion_overpass_api.run_convert()
            query_string = html.unescape(query_string)

        self.dialog.text_query.setPlainText(query_string)
コード例 #17
0
ファイル: process.py プロジェクト: Gustry/QuickOSM
def reload_query(query: str,
                 layer_name: str = 'Reloaded_query',
                 dialog: QDialog = None,
                 new_file: bool = True):
    """ Reload a query with only the query """
    # Getting the default overpass api and running the query
    server = get_setting('defaultOAPI', OVERPASS_SERVERS[0]) + 'interpreter'

    query = QueryPreparation(query, overpass=server)
    final_query = query.prepare_query()
    url = query.prepare_url()
    connexion_overpass_api = ConnexionOAPI(url)
    LOGGER.debug('Encoded URL: {}'.format(url))
    osm_file = connexion_overpass_api.run()

    if new_file:
        layer_name += "_reloaded"
        return open_file(
            dialog=dialog,
            osm_file=osm_file,
            layer_name=layer_name,
            final_query=final_query,
        )
コード例 #18
0
ファイル: query_dialog.py プロジェクト: ghtmtt/QuickOSM
    def save_final_query(self):
        """
        Save the query without any templates, usefull for bbox
        """

        # Which geometry at the end ?
        output_geometry_types = self.get_output_geometry_types()
        white_list_values = self.get_white_list_values()

        query = str(self.textEdit_query.toPlainText())
        nominatim = str(self.lineEdit_nominatim.text())
        bbox = self.get_bounding_box()

        # Delete any templates
        query = QueryPreparation(query, bbox, nominatim).prepare_query()

        # Save the query
        save_query_dialog = SaveQueryDialog(
            query=query,
            output_geometry_types=output_geometry_types,
            white_list_values=white_list_values)
        save_query_dialog.signal_new_query_successful.connect(
            self.signal_new_query_successful.emit)
        save_query_dialog.exec_()
コード例 #19
0
ファイル: process.py プロジェクト: Gustry/QuickOSM
def process_query(dialog: QDialog = None,
                  query: str = None,
                  description: str = None,
                  area: Union[str, List[str]] = None,
                  key: Union[str, List[str]] = None,
                  value: Union[str, List[str]] = None,
                  type_multi_request: list = None,
                  bbox: QgsRectangle = None,
                  output_dir: str = None,
                  output_format: Format = None,
                  prefix_file: str = None,
                  output_geometry_types: list = None,
                  layer_name: str = "OsmQuery",
                  white_list_values: dict = None,
                  config_outputs: dict = None) -> int:
    """execute a query and send the result file to open_file."""
    # Save the query in the historic
    q_manage = QueryManagement(query=query,
                               name=prefix_file if prefix_file else layer_name,
                               description=description,
                               advanced=value is None,
                               type_multi_request=type_multi_request,
                               keys=key,
                               values=value,
                               area=area,
                               bbox=bbox,
                               output_geometry_types=output_geometry_types,
                               white_list_column=white_list_values)
    q_manage.write_query_historic()

    if dialog.feedback_process.isCanceled():
        return None

    # Prepare outputs
    dialog.set_progress_text(tr('Prepare outputs'))

    # Getting the default overpass api and running the query
    server = get_setting('defaultOAPI', OVERPASS_SERVERS[0]) + 'interpreter'
    dialog.set_progress_text(
        tr('Downloading data from Overpass {server_name}'.format(
            server_name=server)))
    # Replace Nominatim or BBOX
    query = QueryPreparation(query, bbox, area, server)
    QApplication.processEvents()
    final_query = query.prepare_query()
    url = query.prepare_url()
    connexion_overpass_api = ConnexionOAPI(url)
    LOGGER.debug('Encoded URL: {}'.format(url))
    osm_file = connexion_overpass_api.run()

    return open_file(dialog=dialog,
                     osm_file=osm_file,
                     output_geom_types=output_geometry_types,
                     white_list_column=white_list_values,
                     key=key,
                     layer_name=layer_name,
                     output_dir=output_dir,
                     output_format=output_format,
                     prefix_file=prefix_file,
                     final_query=final_query,
                     config_outputs=config_outputs,
                     feedback=dialog.feedback_process)