def wfs(self): name = self.connectionCombo.currentText() conn = QgsOwsConnection("wfs", name) uri = conn.uri().param('url') req_version = conn.uri().param('version') s = QgsSettings() checked_version = s.value( "qgis/connections-wfs/{}/checked_version".format(name), False) if req_version == "auto" or not checked_version: # detect version u = QUrlQuery() u.addQueryItem("request", "GetCapabilities") u.addQueryItem("service", "WFS") if req_version == "auto": u.addQueryItem("acceptversions", "2.0.0,1.1.0,1.0.0") elif not checked_version: u.addQueryItem("version", req_version) final_url = QUrl(uri) final_url.setQuery(u) xml, ns_map = xml_parse(remote_open_from_qgis( final_url.toString())) root = xml.getroot() if 'ows' in ns_map: versions = [ v.text for v in root.findall( "./ows:ServiceIdentification/ows:ServiceTypeVersion", ns_map) ] else: versions = [ v.text for v in root.findall( "./ServiceIdentification/ServiceTypeVersion", ns_map) ] if not versions: if 'version' in root.attrib: versions = [root.attrib['version']] if not versions: raise RuntimeError("Cannot determine WFS version") # take the greatest version, if more than one version = sorted(versions)[-1] if version != req_version: QgsMessageLog.logMessage( "Requested WFS version {}, got {}".format( req_version, version)) else: s.setValue( "qgis/connections-wfs/{}/checked_version".format(name), True) else: version = req_version with qgis_proxy_settings(): return WebFeatureService(url=uri, version=version)
def testWfsConnection(self): c = QgsOwsConnection('WFS', 'test') uri = c.uri() self.assertEqual(uri.param('url'), 'ccc.ddd.com') self.assertEqual(uri.param('version'), '1.1.0') self.assertEqual(uri.param('maxNumFeatures'), '47') self.assertEqual(uri.param('IgnoreAxisOrientation'), '1') self.assertEqual(uri.param('InvertAxisOrientation'), '1')
def testWmsConnection(self): c = QgsOwsConnection('WMS', 'test') uri = c.uri() self.assertEqual(uri.param('url'), 'aaa.bbb.com') self.assertEqual(uri.param('referer'), 'my_ref') self.assertEqual(uri.param('IgnoreGetMapUrl'), '1') self.assertEqual(uri.param('IgnoreGetFeatureInfoUrl'), '1') self.assertEqual(uri.param('SmoothPixmapTransform'), '1') self.assertEqual(uri.param('dpiMode'), '4') self.assertEqual(uri.param('IgnoreAxisOrientation'), '1') self.assertEqual(uri.param('InvertAxisOrientation'), '1')
def wfs(self): conn = QgsOwsConnection("wfs", self.connectionCombo.currentText()) uri = conn.uri().param('url') version = conn.uri().param('version') if version == "auto": # detect version u = QUrlQuery(uri) u.addQueryItem("request", "GetCapabilities") u.addQueryItem("acceptversions", "2.0.0,1.1.0,1.0.0") xml, ns_map = xml_parse(remote_open_from_qgis(u.query())) root = xml.getroot() versions = [ v.text for v in root.findall( "./ows:ServiceIdentification/ows:ServiceTypeVersion", ns_map) ] # take the greatest version, if more than one version = sorted(versions)[-1] with qgis_proxy_settings(): return WebFeatureService(url=uri, version=version)