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))
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
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)