Ejemplo n.º 1
0
    def triggerResult(self, result):
        #print('PdokFilter triggerResult called-----')
        ##print(result.displayString)
        ##print(result.userData)

        ##print('triggerResult called, result: {}'.format(result))

        # PDOK Location server return id's which have to picked up then
        id = result.userData['id']
        url = 'https://geodata.nationaalgeoregister.nl/locatieserver/v3/lookup?id={}'.format(
            id)
        try:
            (response, content) = self.nam.request(url)
            #print('response: {}'.format(response))
            # TODO: check statuscode etc
            #print('content: {}'.format(content))
            content_string = content.decode('utf-8')
            obj = json.loads(content_string)

            found = obj['response']['numFound']
            if found != 1:
                print('XXXXXXXXXXXXXXXXX  numFound != 1')
            else:
                doc = obj['response']['docs'][0]
                point = QgsPoint()
                point.fromWkt(doc['centroide_ll'])
                point_xy = QgsPointXY(point)
                dest_crs = QgsProject.instance().crs()
                results_crs = QgsCoordinateReferenceSystem(
                    4326, QgsCoordinateReferenceSystem.PostgisCrsId)
                transform = QgsCoordinateTransform(results_crs, dest_crs,
                                                   QgsProject.instance())
                point_xy = transform.transform(point_xy)
                self.iface.mapCanvas().setCenter(point_xy)

                scale_denominator = 10000.0
                # map the result types to generic GeocoderLocator types to determine the zoom
                if doc['type'] == 'adres':
                    scale_denominator = self.ADDRESS
                elif doc['type'] == 'weg':
                    scale_denominator = self.STREET
                elif doc['type'] == 'postcode':
                    scale_denominator = self.ZIP
                elif doc['type'] == 'gemeente':
                    scale_denominator = self.PLACE
                elif doc['type'] == 'woonplaats':
                    scale_denominator = self.CITY
                self.iface.mapCanvas().zoomScale(scale_denominator)
                self.iface.mapCanvas().refresh()

        except RequestsException:
            # Handle exception
            print('!!!!!!!!!!! EXCEPTION !!!!!!!!!!!!!: \n{}'.format(
                RequestsException.args))
    def triggerResult(self, result):
        self.info("UserClick: {}".format(result.displayString))
        # PDOK Location server return id's which have to picked up then
        id = result.userData['id']
        url = 'https://geodata.nationaalgeoregister.nl/locatieserver/v3/lookup?id={}'.format(
            id)
        nam = NetworkAccessManager()
        try:
            (response, content) = nam.request(url)
            #print('response: {}'.format(response))
            # TODO: check statuscode etc
            #print('content: {}'.format(content))
            content_string = content.decode('utf-8')
            obj = json.loads(content_string)

            found = obj['response']['numFound']
            if found != 1:
                print('XXXXXXXXXXXXXXXXX  numFound != 1')
            else:
                doc = obj['response']['docs'][0]
                point = QgsPoint()
                point.fromWkt(doc['centroide_ll'])
                point_xy = QgsPointXY(point)
                dest_crs = QgsProject.instance().crs()
                results_crs = QgsCoordinateReferenceSystem(
                    4326, QgsCoordinateReferenceSystem.PostgisCrsId)
                transform = QgsCoordinateTransform(results_crs, dest_crs,
                                                   QgsProject.instance())
                point_xy = transform.transform(point_xy)
                self.iface.mapCanvas().setCenter(point_xy)

                scale_denominator = 10000.0
                # map the result types to generic GeocoderLocator types to determine the zoom
                if doc['type'] == 'adres':
                    scale_denominator = self.ADDRESS
                elif doc['type'] == 'weg':
                    scale_denominator = self.STREET
                elif doc['type'] == 'postcode':
                    scale_denominator = self.ZIP
                elif doc['type'] == 'gemeente':
                    scale_denominator = self.PLACE
                elif doc['type'] == 'woonplaats':
                    scale_denominator = self.CITY
                self.iface.mapCanvas().zoomScale(scale_denominator)
                self.iface.mapCanvas().refresh()

        except RequestsException as err:
            # Handle exception..
            # only this one seems to work
            self.info(err)
            # THIS: results in a floating window with a warning in it, wrong thread/parent?
            #self.iface.messageBar().pushWarning("PDOKLocatieserverLocatorFilter Error", '{}'.format(err))
            # THIS: emitting the signal here does not work either?
            self.resultProblem.emit('{}'.format(err))
Ejemplo n.º 3
0
 def create_line_geometry_from_geometriobjekter(
     self,
     geometriobjekt1: GeometriObjekt,
     geometriobjekt2: GeometriObjekt,
     feedback: QgsProcessingFeedback,
 ):
     if geometriobjekt1 and geometriobjekt2:
         wkt1 = geometriobjekt1.geometri.wkt
         g1 = QgsPoint()
         g1.fromWkt(wkt1)
         wkt2 = geometriobjekt2.geometri.wkt
         g2 = QgsPoint()
         g2.fromWkt(wkt2)
         geom = QgsGeometry.fromPolyline([g1, g2])
         return geom
     else:
         return None
Ejemplo n.º 4
0
from qgis.core import QgsGeometry, QgsPoint

g = QgsGeometry.fromWkt('POINT ZM (1 2 5 60)')  # your geometry

# if you don't need z and m, you could do this:

p = g.asPoint()  # you'll get a QgsPointXY object
x = p.x()
y = p.y()

# if you need z and m, and you don't want to use regex, you could do this:

p = QgsPoint()
p.fromWkt(g.asWkt())

x = p.x()
y = p.y()
z = p.z()
m = p.m()

# example to parse multilinestring if you don't need z and m

g2 = QgsGeometry.fromWkt(
    'MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))')
for points in g2.asMultiPolyline(
):  # asMultiPolyline() returns a list of a list of QgsPointXY
    point_list = [(p.x(), p.y()) for p in points
                  ]  # converts QgsPointXY objects to a simple tuple
    print(point_list)