def wkt_to_geometry(wkt: str) -> Geometry: """ Convert wkt to qgis geometry Handle CRS= prefix """ m = WKT_EXPR.match(wkt) if m: g = QgsGeometry.fromWkt(m.groups('')[1]) if not g.isNull(): crs = QgsCoordinateReferenceSystem(m.groups('')[0]) if crs.isValid(): g = QgsReferencedGeometry(g, crs) return g raise InvalidParameterValue("Invalid wkt format")
def gml_to_geometry(gml: str) -> Geometry: """ Handle json to qgis geometry """ # Lookup for srsName geom = ogr.CreateGeometryFromGML(gml) if not geom: raise InvalidParameterValue("Invalid gml format") geom = QgsGeometry.fromWkt(geom.ExportToWkt()) # Check for crs m = SRSNAME_EXPR.search(gml) if m: crs = QgsCoordinateReferenceSystem(m.groups('')[0]) if crs.isValid(): geom = QgsReferencedGeometry(geom, crs) return geom
def json_to_geometry(data: str) -> Geometry: """ Handle json to qgis geometry """ try: data = json.loads(data) crs = data.get('crs') if crs: crs = QgsCoordinateReferenceSystem(crs['properties']['name']) data = data['geometry'] geom = ogr.CreateGeometryFromJson(json.dumps(data)) if geom: geom = QgsGeometry.fromWkt(geom.ExportToWkt()) if crs and crs.isValid(): geom = QgsReferencedGeometry(geom, crs) return geom except (json.JSONDecodeError, KeyError) as err: LOGGER.error("Error decoding json input: %s", err) raise InvalidParameterValue("Invalid geojson format")
def testQgsReferencedGeometryRepr(self): g = QgsReferencedGeometry(QgsGeometry.fromPointXY(QgsPointXY(1, 2)), QgsCoordinateReferenceSystem('EPSG:4326')) self.assertEqual(g.__repr__(), '<QgsReferencedGeometry: Point (1 2) (EPSG:4326)>')