mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -04:00
[Server 3.0] Tests reliability + new auth test
- Local server searches for a free port before binding - Server tests now ignore attributes order - Updated reference docs - Renamed projects ("+" -> "_") - Added a smoke test for auth manager and WMS/WFS providers
This commit is contained in:
parent
a50ce7d4fd
commit
49ae0206f4
@ -150,4 +150,5 @@ IF (WITH_SERVER)
|
||||
ADD_PYTHON_TEST(PyQgsServerAccessControl test_qgsserver_accesscontrol.py)
|
||||
ADD_PYTHON_TEST(PyQgsServerWFST test_qgsserver_wfst.py)
|
||||
ADD_PYTHON_TEST(PyQgsOfflineEditingWFS test_offline_editing_wfs.py)
|
||||
ADD_PYTHON_TEST(PyQgsAuthManagerEnpointTest test_authmanager_endpoint.py)
|
||||
ENDIF (WITH_SERVER)
|
||||
|
@ -5,6 +5,13 @@ QGIS Server HTTP wrapper
|
||||
This script launches a QGIS Server listening on port 8081 or on the port
|
||||
specified on the environment variable QGIS_SERVER_DEFAULT_PORT
|
||||
|
||||
For testing purposes, HTTP Basic can be enabled by setting the following
|
||||
environment variables:
|
||||
|
||||
* QGIS_SERVER_HTTP_BASIC_AUTH (default not set, set to anything to enable)
|
||||
* QGIS_SERVER_USERNAME (default ="username")
|
||||
* QGIS_SERVER_PASSWORD (default ="password")
|
||||
|
||||
.. note:: This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
@ -22,6 +29,8 @@ __revision__ = '$Format:%H$'
|
||||
|
||||
|
||||
import os
|
||||
import sys
|
||||
import signal
|
||||
import urllib.parse
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||
from qgis.core import QgsApplication
|
||||
@ -36,11 +45,35 @@ qgs_app = QgsApplication([], False)
|
||||
qgs_server = QgsServer()
|
||||
|
||||
|
||||
if os.environ.get('QGIS_SERVER_HTTP_BASIC_AUTH') is not None:
|
||||
from qgis.server import QgsServerFilter
|
||||
import base64
|
||||
|
||||
class HTTPBasicFilter(QgsServerFilter):
|
||||
|
||||
def responseComplete(self):
|
||||
request = self.serverInterface().requestHandler()
|
||||
if self.serverInterface().getEnv('HTTP_AUTHORIZATION'):
|
||||
username, password = base64.b64decode(self.serverInterface().getEnv('HTTP_AUTHORIZATION')[6:]).split(b':')
|
||||
if (username.decode('utf-8') == os.environ.get('QGIS_SERVER_USERNAME', 'username')
|
||||
and password.decode('utf-8') == os.environ.get('QGIS_SERVER_PASSWORD', 'password')):
|
||||
return
|
||||
# No auth ...
|
||||
request.clearHeaders()
|
||||
request.setHeader('Status', '401 Authorization required')
|
||||
request.setHeader('WWW-Authenticate', 'Basic realm="QGIS Server"')
|
||||
request.clearBody()
|
||||
request.appendBody(b'<h1>Authorization required</h1>')
|
||||
|
||||
filter = HTTPBasicFilter(qgs_server.serverInterface())
|
||||
qgs_server.serverInterface().registerFilter(filter)
|
||||
|
||||
|
||||
class Handler(BaseHTTPRequestHandler):
|
||||
|
||||
def do_GET(self):
|
||||
# CGI vars:
|
||||
for k, v in list(self.headers.items()):
|
||||
for k, v in self.headers.items():
|
||||
qgs_server.putenv('HTTP_%s' % k.replace(' ', '-').replace('-', '_').replace(' ', '-').upper(), v)
|
||||
qgs_server.putenv('SERVER_PORT', str(self.server.server_port))
|
||||
qgs_server.putenv('SERVER_NAME', self.server.server_name)
|
||||
@ -52,7 +85,7 @@ class Handler(BaseHTTPRequestHandler):
|
||||
self.send_response(int(headers_dict['Status'].split(' ')[0]))
|
||||
except:
|
||||
self.send_response(200)
|
||||
for k, v in list(headers_dict.items()):
|
||||
for k, v in headers_dict.items():
|
||||
self.send_header(k, v)
|
||||
self.end_headers()
|
||||
self.wfile.write(body)
|
||||
@ -71,5 +104,12 @@ if __name__ == '__main__':
|
||||
server = HTTPServer(('localhost', QGIS_SERVER_DEFAULT_PORT), Handler)
|
||||
print('Starting server on localhost:%s, use <Ctrl-C> to stop' %
|
||||
QGIS_SERVER_DEFAULT_PORT)
|
||||
|
||||
def signal_handler(signal, frame):
|
||||
global qgs_app
|
||||
print("\nExiting QGIS...")
|
||||
qgs_app.exitQgis()
|
||||
sys.exit(0)
|
||||
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
server.serve_forever()
|
||||
qgs_app.exitQgis()
|
||||
|
180
tests/src/python/test_authmanager_endpoint.py
Normal file
180
tests/src/python/test_authmanager_endpoint.py
Normal file
@ -0,0 +1,180 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Tests for auth manager WMS/WFS using QGIS Server through HTTP Basic
|
||||
enabled qgis_wrapped_server.py.
|
||||
|
||||
This is an integration test for QGIS Desktop Auth Manager WFS and WMS provider
|
||||
and QGIS Server WFS/WMS that check if QGIS can use a stored auth manager auth
|
||||
configuration to access an HTTP Basic protected endpoint.
|
||||
|
||||
|
||||
From build dir, run: ctest -R PyQgsAuthManagerEnpointTest -V
|
||||
|
||||
.. note:: This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import tempfile
|
||||
import random
|
||||
import string
|
||||
import urllib
|
||||
|
||||
__author__ = 'Alessandro Pasotti'
|
||||
__date__ = '18/09/2016'
|
||||
__copyright__ = 'Copyright 2016, The QGIS Project'
|
||||
# This will get replaced with a git SHA1 when you do a git archive
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
from time import sleep
|
||||
from urllib.parse import quote
|
||||
from shutil import rmtree
|
||||
|
||||
from utilities import unitTestDataPath
|
||||
from qgis.core import (
|
||||
QgsAuthManager,
|
||||
QgsAuthMethodConfig,
|
||||
QgsVectorLayer,
|
||||
QgsRasterLayer,
|
||||
)
|
||||
from qgis.testing import (
|
||||
start_app,
|
||||
unittest,
|
||||
)
|
||||
|
||||
try:
|
||||
QGIS_SERVER_AUTHMANAGER_DEFAULT_PORT = os.environ['QGIS_SERVER_AUTHMANAGER_DEFAULT_PORT']
|
||||
except:
|
||||
import socket
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.bind(("", 0))
|
||||
QGIS_SERVER_AUTHMANAGER_DEFAULT_PORT = s.getsockname()[1]
|
||||
s.close()
|
||||
|
||||
QGIS_AUTH_DB_DIR_PATH = tempfile.mkdtemp()
|
||||
|
||||
os.environ['QGIS_AUTH_DB_DIR_PATH'] = QGIS_AUTH_DB_DIR_PATH
|
||||
|
||||
qgis_app = start_app()
|
||||
|
||||
|
||||
class TestAuthManager(unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
"""Run before all tests:
|
||||
Creates an auth configuration"""
|
||||
cls.port = QGIS_SERVER_AUTHMANAGER_DEFAULT_PORT
|
||||
# Clean env just to be sure
|
||||
env_vars = ['QUERY_STRING', 'QGIS_PROJECT_FILE']
|
||||
for ev in env_vars:
|
||||
try:
|
||||
del os.environ[ev]
|
||||
except KeyError:
|
||||
pass
|
||||
cls.testdata_path = unitTestDataPath('qgis_server') + '/'
|
||||
cls.project_path = quote(cls.testdata_path + "test_project.qgs")
|
||||
# Enable auth
|
||||
#os.environ['QGIS_AUTH_PASSWORD_FILE'] = QGIS_AUTH_PASSWORD_FILE
|
||||
authm = QgsAuthManager.instance()
|
||||
assert (authm.setMasterPassword('masterpassword', True))
|
||||
cls.auth_config = QgsAuthMethodConfig('Basic')
|
||||
cls.auth_config.setName('test_auth_config')
|
||||
cls.username = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
|
||||
cls.password = cls.username[::-1] # reversed
|
||||
cls.auth_config.setConfig('username', cls.username)
|
||||
cls.auth_config.setConfig('password', cls.password)
|
||||
assert (authm.storeAuthenticationConfig(cls.auth_config)[0])
|
||||
|
||||
os.environ['QGIS_SERVER_HTTP_BASIC_AUTH'] = '1'
|
||||
os.environ['QGIS_SERVER_USERNAME'] = cls.username
|
||||
os.environ['QGIS_SERVER_PASSWORD'] = cls.password
|
||||
os.environ['QGIS_SERVER_DEFAULT_PORT'] = str(cls.port)
|
||||
server_path = os.path.dirname(os.path.realpath(__file__)) + \
|
||||
'/qgis_wrapped_server.py'
|
||||
cls.server = subprocess.Popen([sys.executable, server_path],
|
||||
env=os.environ)
|
||||
sleep(2)
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
"""Run after all tests"""
|
||||
cls.server.terminate()
|
||||
rmtree(QGIS_AUTH_DB_DIR_PATH)
|
||||
del cls.server
|
||||
|
||||
def setUp(self):
|
||||
"""Run before each test."""
|
||||
pass
|
||||
|
||||
def tearDown(self):
|
||||
"""Run after each test."""
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def _getWFSLayer(cls, type_name, layer_name=None, authcfg=None):
|
||||
"""
|
||||
WFS layer factory
|
||||
"""
|
||||
if layer_name is None:
|
||||
layer_name = 'wfs_' + type_name
|
||||
parms = {
|
||||
'srsname': 'EPSG:4326',
|
||||
'typename': type_name,
|
||||
'url': 'http://127.0.0.1:%s/?map=%s' % (cls.port, cls.project_path),
|
||||
'version': 'auto',
|
||||
'table': '',
|
||||
}
|
||||
if authcfg is not None:
|
||||
parms.update({'authcfg': authcfg})
|
||||
uri = ' '.join([("%s='%s'" % (k, v)) for k, v in list(parms.items())])
|
||||
wfs_layer = QgsVectorLayer(uri, layer_name, 'WFS')
|
||||
return wfs_layer
|
||||
|
||||
@classmethod
|
||||
def _getWMSLayer(cls, layers, layer_name=None, authcfg=None):
|
||||
"""
|
||||
WMS layer factory
|
||||
"""
|
||||
if layer_name is None:
|
||||
layer_name = 'wms_' + layers.replace(',', '')
|
||||
parms = {
|
||||
'crs': 'EPSG:4326',
|
||||
'url': 'http://127.0.0.1:%s/?map=%s' % (cls.port, cls.project_path),
|
||||
'format': 'image/png',
|
||||
# This is needed because of a really wierd implementation in QGIS Server, that
|
||||
# replaces _ in the the real layer name with spaces
|
||||
'layers': urllib.parse.quote(layers).replace('_', ' '),
|
||||
'styles': '',
|
||||
#'sql': '',
|
||||
}
|
||||
if authcfg is not None:
|
||||
parms.update({'authcfg': authcfg})
|
||||
uri = '&'.join([("%s=%s" % (k, v.replace('=', '%3D'))) for k, v in list(parms.items())])
|
||||
wms_layer = QgsRasterLayer(uri, layer_name, 'wms')
|
||||
return wms_layer
|
||||
|
||||
def testValidAuthAccess(self):
|
||||
"""
|
||||
Access the HTTP Basic protected layer with valid credentials
|
||||
"""
|
||||
wfs_layer = self._getWFSLayer('testlayer_èé', authcfg=self.auth_config.id())
|
||||
self.assertTrue(wfs_layer.isValid())
|
||||
wms_layer = self._getWMSLayer('testlayer_èé', authcfg=self.auth_config.id())
|
||||
self.assertTrue(wms_layer.isValid())
|
||||
|
||||
def testInvalidAuthAccess(self):
|
||||
"""
|
||||
Access the HTTP Basic protected layer with no credentials
|
||||
"""
|
||||
wfs_layer = self._getWFSLayer('testlayer_èé')
|
||||
self.assertFalse(wfs_layer.isValid())
|
||||
wms_layer = self._getWMSLayer('testlayer_èé')
|
||||
self.assertFalse(wms_layer.isValid())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
@ -45,10 +45,15 @@ from qgis.testing import (
|
||||
|
||||
from offlineditingtestbase import OfflineTestBase
|
||||
|
||||
|
||||
try:
|
||||
QGIS_SERVER_WFST_DEFAULT_PORT = os.environ['QGIS_SERVER_WFST_DEFAULT_PORT']
|
||||
except:
|
||||
QGIS_SERVER_WFST_DEFAULT_PORT = 8081
|
||||
import socket
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.bind(("", 0))
|
||||
QGIS_SERVER_WFST_DEFAULT_PORT = s.getsockname()[1]
|
||||
s.close()
|
||||
|
||||
qgis_app = start_app()
|
||||
|
||||
|
@ -30,11 +30,37 @@ import osgeo.gdal
|
||||
# Also strip all multi-attribute tags (Qt5 attr order is random)
|
||||
# FIXME: this is a temporary workaround to make the test pass, a more
|
||||
# robust implementation must check for attributes too
|
||||
RE_STRIP_UNCHECKABLE = b'<LatLongBoundingBox [^>]*>|<sld:UserDefinedSymbolization [^>]*>|<Attribute [^>]*>|<Layer [^>]*>|MAP=[^"]+|Content-Length: \d+|<OnlineResource[^>]*>|<BoundingBox[^>]*>|<WMS_Capabilities[^>]*>|<WFS_Capabilities[^>]*>|<element[^>]*>|<schema [^>]*>|<import [^>]*>|<gml:coordinates [^>]*>'
|
||||
#RE_STRIP_UNCHECKABLE = b'<LatLongBoundingBox [^>]*>|<sld:UserDefinedSymbolization [^>]*>|<Attribute [^>]*>|<Layer [^>]*>|MAP=[^"]+|Content-Length: \d+|<OnlineResource[^>]*>|<BoundingBox[^>]*>|<WMS_Capabilities[^>]*>|<WFS_Capabilities[^>]*>|<element[^>]*>|<schema [^>]*>|<import [^>]*>|<gml:coordinates [^>]*>'
|
||||
RE_STRIP_UNCHECKABLE = b'MAP=[^"]+|Content-Length: \d+'
|
||||
RE_ATTRIBUTES = b'[^>\s]+=[^>\s]+'
|
||||
|
||||
|
||||
class TestQgsServer(unittest.TestCase):
|
||||
|
||||
def assertXMLEqual(self, response, expected, msg=''):
|
||||
"""Compare XML line by line and sorted attributes"""
|
||||
response_lines = response.splitlines()
|
||||
expected_lines = expected.splitlines()
|
||||
line_no = 1
|
||||
for expected_line in expected_lines:
|
||||
expected_line = expected_line.strip()
|
||||
response_line = response_lines[line_no - 1].strip()
|
||||
# Compare tag
|
||||
try:
|
||||
self.assertEqual(re.findall(b'<([^>\s]+)[ >]', expected_line)[0],
|
||||
re.findall(b'<([^>\s]+)[ >]', response_line)[0], msg=msg + "\nTag mismatch on line %s: %s != %s" % (line_no, expected_line, response_line))
|
||||
except IndexError:
|
||||
self.assertEqual(expected_line, response_line, msg=msg + "\nTag line mismatch %s: %s != %s" % (line_no, expected_line, response_line))
|
||||
#print("---->%s\t%s == %s" % (line_no, expected_line, response_line))
|
||||
# Compare attributes
|
||||
if re.match(RE_ATTRIBUTES, expected_line): # has attrs
|
||||
expected_attrs = re.findall(RE_ATTRIBUTES, expected_line)
|
||||
expected_attrs.sort()
|
||||
response_attrs = re.findall(RE_ATTRIBUTES, response_line)
|
||||
response_attrs.sort()
|
||||
self.assertEqual(expected_attrs, response_attrs, msg=msg + "\nXML attributes differ at line {0}: {1} != {2}".format(line_no, expected_attrs, response_attrs))
|
||||
line_no += 1
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.app = QgsApplication([], False)
|
||||
@ -170,7 +196,7 @@ class TestQgsServer(unittest.TestCase):
|
||||
|
||||
# WMS tests
|
||||
def wms_request_compare(self, request, extra=None, reference_file=None):
|
||||
project = self.testdata_path + "test+project.qgs"
|
||||
project = self.testdata_path + "test_project.qgs"
|
||||
assert os.path.exists(project), "Project file not found: " + project
|
||||
|
||||
query_string = 'MAP=%s&SERVICE=WMS&VERSION=1.3&REQUEST=%s' % (urllib.parse.quote(project), request)
|
||||
@ -202,7 +228,7 @@ class TestQgsServer(unittest.TestCase):
|
||||
if int(osgeo.gdal.VersionInfo()[:1]) < 2:
|
||||
expected = expected.replace(b'typeName="Integer64" precision="0" length="10" editType="TextEdit" type="qlonglong"', b'typeName="Integer" precision="0" length="10" editType="TextEdit" type="int"')
|
||||
|
||||
self.assertEqual(response, expected, msg="request %s failed.\n Query: %s\n Expected:\n%s\n\n Response:\n%s" % (query_string, request, expected.decode('utf-8'), response.decode('utf-8')))
|
||||
self.assertXMLEqual(response, expected, msg="request %s failed.\n Query: %s\n Expected:\n%s\n\n Response:\n%s" % (query_string, request, expected.decode('utf-8'), response.decode('utf-8')))
|
||||
|
||||
def test_project_wms(self):
|
||||
"""Test some WMS request"""
|
||||
@ -239,7 +265,7 @@ class TestQgsServer(unittest.TestCase):
|
||||
|
||||
def wms_inspire_request_compare(self, request):
|
||||
"""WMS INSPIRE tests"""
|
||||
project = self.testdata_path + "test+project_inspire.qgs"
|
||||
project = self.testdata_path + "test_project_inspire.qgs"
|
||||
assert os.path.exists(project), "Project file not found: " + project
|
||||
|
||||
query_string = 'MAP=%s&SERVICE=WMS&VERSION=1.3.0&REQUEST=%s' % (urllib.parse.quote(project), request)
|
||||
@ -259,7 +285,7 @@ class TestQgsServer(unittest.TestCase):
|
||||
"""
|
||||
response = re.sub(RE_STRIP_UNCHECKABLE, b'', response)
|
||||
expected = re.sub(RE_STRIP_UNCHECKABLE, b'', expected)
|
||||
self.assertEqual(response, expected, msg="request %s failed.\n Query: %s\n Expected:\n%s\n\n Response:\n%s" % (query_string, request, expected.decode('utf-8'), response.decode('utf-8')))
|
||||
self.assertXMLEqual(response, expected, msg="request %s failed.\n Query: %s\n Expected:\n%s\n\n Response:\n%s" % (query_string, request, expected.decode('utf-8'), response.decode('utf-8')))
|
||||
|
||||
def test_project_wms_inspire(self):
|
||||
"""Test some WMS request"""
|
||||
@ -268,7 +294,7 @@ class TestQgsServer(unittest.TestCase):
|
||||
|
||||
# WFS tests
|
||||
def wfs_request_compare(self, request):
|
||||
project = self.testdata_path + "test+project_wfs.qgs"
|
||||
project = self.testdata_path + "test_project_wfs.qgs"
|
||||
assert os.path.exists(project), "Project file not found: " + project
|
||||
|
||||
query_string = 'MAP=%s&SERVICE=WFS&VERSION=1.0.0&REQUEST=%s' % (urllib.parse.quote(project), request)
|
||||
@ -294,7 +320,7 @@ class TestQgsServer(unittest.TestCase):
|
||||
if int(osgeo.gdal.VersionInfo()[:1]) < 2:
|
||||
expected = expected.replace(b'<element type="long" name="id"/>', b'<element type="integer" name="id"/>')
|
||||
|
||||
self.assertEqual(response, expected, msg="request %s failed.\n Query: %s\n Expected:\n%s\n\n Response:\n%s" % (query_string, request, expected.decode('utf-8'), response.decode('utf-8')))
|
||||
self.assertXMLEqual(response, expected, msg="request %s failed.\n Query: %s\n Expected:\n%s\n\n Response:\n%s" % (query_string, request, expected.decode('utf-8'), response.decode('utf-8')))
|
||||
|
||||
def test_project_wfs(self):
|
||||
"""Test some WFS request"""
|
||||
@ -302,7 +328,7 @@ class TestQgsServer(unittest.TestCase):
|
||||
self.wfs_request_compare(request)
|
||||
|
||||
def wfs_getfeature_compare(self, requestid, request):
|
||||
project = self.testdata_path + "test+project_wfs.qgs"
|
||||
project = self.testdata_path + "test_project_wfs.qgs"
|
||||
assert os.path.exists(project), "Project file not found: " + project
|
||||
|
||||
query_string = 'MAP=%s&SERVICE=WFS&VERSION=1.0.0&REQUEST=%s' % (urllib.parse.quote(project), request)
|
||||
@ -333,8 +359,8 @@ class TestQgsServer(unittest.TestCase):
|
||||
"""
|
||||
response = re.sub(RE_STRIP_UNCHECKABLE, b'', response)
|
||||
expected = re.sub(RE_STRIP_UNCHECKABLE, b'', expected)
|
||||
self.assertEqual(response, expected, msg="%s\n Expected:\n%s\n\n Response:\n%s"
|
||||
% (error_msg_header,
|
||||
self.assertXMLEqual(response, expected, msg="%s\n Expected:\n%s\n\n Response:\n%s"
|
||||
% (error_msg_header,
|
||||
str(expected, errors='replace'),
|
||||
str(response, errors='replace')))
|
||||
|
||||
@ -349,7 +375,7 @@ class TestQgsServer(unittest.TestCase):
|
||||
self.wfs_getfeature_compare(id, req)
|
||||
|
||||
def wfs_getfeature_post_compare(self, requestid, request):
|
||||
project = self.testdata_path + "test+project_wfs.qgs"
|
||||
project = self.testdata_path + "test_project_wfs.qgs"
|
||||
assert os.path.exists(project), "Project file not found: " + project
|
||||
|
||||
query_string = 'MAP={}'.format(urllib.parse.quote(project))
|
||||
@ -365,7 +391,6 @@ class TestQgsServer(unittest.TestCase):
|
||||
header, body,
|
||||
)
|
||||
|
||||
@unittest.skip
|
||||
def test_getfeature_post(self):
|
||||
template = """<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wfs:GetFeature service="WFS" version="1.0.0" {} xmlns:wfs="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
|
||||
@ -392,20 +417,20 @@ class TestQgsServer(unittest.TestCase):
|
||||
for id, req in tests:
|
||||
self.wfs_getfeature_post_compare(id, req)
|
||||
|
||||
@unittest.skip
|
||||
def test_getLegendGraphics(self):
|
||||
"""Test that does not return an exception but an image"""
|
||||
parms = {
|
||||
'MAP': self.testdata_path + "test%2Bproject.qgs",
|
||||
'MAP': self.testdata_path + "test_project.qgs",
|
||||
'SERVICE': 'WMS',
|
||||
'VERSION': '1.0.0',
|
||||
'VERSION': '1.3.0',
|
||||
'REQUEST': 'GetLegendGraphic',
|
||||
'FORMAT': 'image/png',
|
||||
#'WIDTH': '20', # optional
|
||||
#'HEIGHT': '20', # optional
|
||||
'LAYER': 'testlayer+èé',
|
||||
'LAYER': 'testlayer%20èé',
|
||||
}
|
||||
qs = '&'.join(["%s=%s" % (k, v) for k, v in parms.items()])
|
||||
print(qs)
|
||||
h, r = self.server.handleRequest(qs)
|
||||
self.assertEqual(-1, h.find(b'Content-Type: text/xml; charset=utf-8'), "Header: %s\nResponse:\n%s" % (h, r))
|
||||
self.assertNotEqual(-1, h.find(b'Content-Type: image/png'), "Header: %s\nResponse:\n%s" % (h, r))
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Tests for WFS-T provider using QGIS Server through qgis_wrapped_server.py.
|
||||
@ -58,7 +59,11 @@ from qgis.testing import (
|
||||
try:
|
||||
QGIS_SERVER_WFST_DEFAULT_PORT = os.environ['QGIS_SERVER_WFST_DEFAULT_PORT']
|
||||
except:
|
||||
QGIS_SERVER_WFST_DEFAULT_PORT = 8081
|
||||
import socket
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.bind(("", 0))
|
||||
QGIS_SERVER_WFST_DEFAULT_PORT = s.getsockname()[1]
|
||||
s.close()
|
||||
|
||||
|
||||
qgis_app = start_app()
|
||||
|
16
tests/testdata/qgis_server/getcapabilities.txt
vendored
16
tests/testdata/qgis_server/getcapabilities.txt
vendored
@ -2,7 +2,7 @@ Content-Length: 5590
|
||||
Content-Type: text/xml; charset=utf-8
|
||||
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<WMS_Capabilities xmlns:sld="http://www.opengis.net/sld" version="1.3" xmlns="http://www.opengis.net/wms" xmlns:qgs="http://www.qgis.org/wms" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd http://www.qgis.org/wms http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgsSERVICE=WMS&REQUEST=GetSchemaExtension">
|
||||
<WMS_Capabilities xmlns:sld="http://www.opengis.net/sld" version="1.3" xmlns="http://www.opengis.net/wms" xmlns:qgs="http://www.qgis.org/wms" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd http://www.qgis.org/wms http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgsSERVICE=WMS&REQUEST=GetSchemaExtension">
|
||||
<Service>
|
||||
<Name>WMS</Name>
|
||||
<Title>QGIS TestProject</Title>
|
||||
@ -30,7 +30,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -45,7 +45,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -59,7 +59,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -70,7 +70,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -80,7 +80,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -90,7 +90,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -131,7 +131,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<Title>default</Title>
|
||||
<LegendURL>
|
||||
<Format>image/png</Format>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs&SERVICE=WMS&VERSION=1.3&REQUEST=GetLegendGraphic&LAYER=testlayer èé&FORMAT=image/png&STYLE=default"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs&SERVICE=WMS&VERSION=1.3&REQUEST=GetLegendGraphic&LAYER=testlayer èé&FORMAT=image/png&STYLE=default"/>
|
||||
</LegendURL>
|
||||
</Style>
|
||||
</Layer>
|
||||
|
@ -2,7 +2,7 @@ Content-Length: 7368
|
||||
Content-Type: text/xml; charset=utf-8
|
||||
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<WMS_Capabilities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:inspire_vs="http://inspire.ec.europa.eu/schemas/inspire_vs/1.0" xmlns:inspire_common="http://inspire.ec.europa.eu/schemas/common/1.0" version="1.3.0" xmlns="http://www.opengis.net/wms" xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd http://www.qgis.org/wms http://inspire.ec.europa.eu/schemas/inspire_vs/1.0 http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsd http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test%2Bproject_inspire.qgs&SERVICE=WMS&REQUEST=GetSchemaExtension" xmlns:sld="http://www.opengis.net/sld" xmlns:qgs="http://www.qgis.org/wms">
|
||||
<WMS_Capabilities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:inspire_vs="http://inspire.ec.europa.eu/schemas/inspire_vs/1.0" xmlns:inspire_common="http://inspire.ec.europa.eu/schemas/common/1.0" version="1.3.0" xmlns="http://www.opengis.net/wms" xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd http://www.qgis.org/wms http://inspire.ec.europa.eu/schemas/inspire_vs/1.0 http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsd http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test-project_inspire.qgs&SERVICE=WMS&REQUEST=GetSchemaExtension" xmlns:sld="http://www.opengis.net/sld" xmlns:qgs="http://www.qgis.org/wms">
|
||||
<Service>
|
||||
<Name>WMS</Name>
|
||||
<Title>QGIS TestProject</Title>
|
||||
@ -30,7 +30,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test%2Bproject_inspire.qgs&"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test-project_inspire.qgs&"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -45,7 +45,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test%2Bproject_inspire.qgs&"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test-project_inspire.qgs&"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -59,7 +59,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test%2Bproject_inspire.qgs&"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test-project_inspire.qgs&"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -70,7 +70,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test%2Bproject_inspire.qgs&"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test-project_inspire.qgs&"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -80,7 +80,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test%2Bproject_inspire.qgs&"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test-project_inspire.qgs&"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -90,7 +90,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test%2Bproject_inspire.qgs&"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test-project_inspire.qgs&"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -152,7 +152,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<Title>default</Title>
|
||||
<LegendURL>
|
||||
<Format>image/png</Format>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test%2Bproject_inspire.qgs&&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetLegendGraphic&LAYER=testlayer èé&FORMAT=image/png&STYLE=default&SLD_VERSION=1.1.0"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/dhont/3liz_dev/QGIS/qgis_rldhont/tests/testdata/qgis_server/test-project_inspire.qgs&&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetLegendGraphic&LAYER=testlayer èé&FORMAT=image/png&STYLE=default&SLD_VERSION=1.1.0"/>
|
||||
</LegendURL>
|
||||
</Style>
|
||||
</Layer>
|
||||
|
@ -2,7 +2,7 @@ Content-Length: 6685
|
||||
Content-Type: text/xml; charset=utf-8
|
||||
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<WMS_Capabilities xmlns:sld="http://www.opengis.net/sld" version="1.3.0" xmlns="http://www.opengis.net/wms" xmlns:qgs="http://www.qgis.org/wms" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd http://www.qgis.org/wms http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgsSERVICE=WMS&REQUEST=GetSchemaExtension">
|
||||
<WMS_Capabilities xmlns:sld="http://www.opengis.net/sld" version="1.3.0" xmlns="http://www.opengis.net/wms" xmlns:qgs="http://www.qgis.org/wms" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd http://www.qgis.org/wms http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgsSERVICE=WMS&REQUEST=GetSchemaExtension">
|
||||
<Service>
|
||||
<Name>WMS</Name>
|
||||
<Title>QGIS TestProject</Title>
|
||||
@ -30,7 +30,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -45,7 +45,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -59,7 +59,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -70,7 +70,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -80,7 +80,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -90,7 +90,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -102,7 +102,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<DCPType>
|
||||
<HTTP>
|
||||
<Get>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs"/>
|
||||
</Get>
|
||||
</HTTP>
|
||||
</DCPType>
|
||||
@ -112,6 +112,9 @@ Content-Type: text/xml; charset=utf-8
|
||||
<Format>text/xml</Format>
|
||||
</Exception>
|
||||
<sld:UserDefinedSymbolization UserStyle="1" RemoteWFS="0" SupportSLD="1" UserLayer="0" RemoteWCS="0" InlineFeature="0"/>
|
||||
<WFSLayers>
|
||||
<WFSLayer name="testlayer èé"/>
|
||||
</WFSLayers>
|
||||
<Layer queryable="1">
|
||||
<Name>QGIS Test Project</Name>
|
||||
<Title>QGIS Test Project</Title>
|
||||
@ -145,7 +148,7 @@ Content-Type: text/xml; charset=utf-8
|
||||
<Title>default</Title>
|
||||
<LegendURL>
|
||||
<Format>image/png</Format>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test%2Bproject.qgs&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetLegendGraphic&LAYER=testlayer èé&FORMAT=image/png&STYLE=default&SLD_VERSION=1.1.0"/>
|
||||
<OnlineResource xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http:?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test-project.qgs&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetLegendGraphic&LAYER=testlayer èé&FORMAT=image/png&STYLE=default&SLD_VERSION=1.1.0"/>
|
||||
</LegendURL>
|
||||
</Style>
|
||||
<TreeName>testlayer èé</TreeName>
|
||||
|
@ -1,11 +1,11 @@
|
||||
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
|
||||
<qgis projectname="QGIS Test Project" version="2.99.0-Master">
|
||||
<qgis projectname="QGIS Test Project" version="2.16.3">
|
||||
<title>QGIS Test Project</title>
|
||||
<autotransaction active="0"/>
|
||||
<evaluateDefaultValues active="0"/>
|
||||
<layer-tree-group name="" checked="Qt::Checked" expanded="1">
|
||||
<layer-tree-group expanded="1" checked="Qt::Checked" name="">
|
||||
<customproperties/>
|
||||
<layer-tree-layer id="testlayer20150528120452665" name="testlayer èé" checked="Qt::Checked" expanded="1">
|
||||
<layer-tree-layer expanded="1" checked="Qt::Checked" id="testlayer20150528120452665" name="testlayer èé">
|
||||
<customproperties/>
|
||||
</layer-tree-layer>
|
||||
</layer-tree-group>
|
||||
@ -13,10 +13,10 @@
|
||||
<mapcanvas>
|
||||
<units>degrees</units>
|
||||
<extent>
|
||||
<xmin>8.20315414376310059</xmin>
|
||||
<ymin>44.9012858326611024</ymin>
|
||||
<xmax>8.204164917965862</xmax>
|
||||
<ymax>44.90154911342418131</ymax>
|
||||
<xmin>8.20202108826836884</xmin>
|
||||
<ymin>44.9009031607650968</ymin>
|
||||
<xmax>8.20606418507941449</xmax>
|
||||
<ymax>44.90195628381741244</ymax>
|
||||
</extent>
|
||||
<rotation>0</rotation>
|
||||
<projections>1</projections>
|
||||
@ -34,7 +34,7 @@
|
||||
</destinationsrs>
|
||||
<rendermaptile>0</rendermaptile>
|
||||
<layer_coordinate_transform_info>
|
||||
<layer_coordinate_transform srcDatumTransform="-1" layerid="testlayer20150528120452665" destDatumTransform="-1" srcAuthId="EPSG:4326" destAuthId="EPSG:4326"/>
|
||||
<layer_coordinate_transform destAuthId="EPSG:4326" srcAuthId="EPSG:4326" srcDatumTransform="-1" destDatumTransform="-1" layerid="testlayer20150528120452665"/>
|
||||
</layer_coordinate_transform_info>
|
||||
</mapcanvas>
|
||||
<layer-tree-canvas>
|
||||
@ -43,14 +43,14 @@
|
||||
</custom-order>
|
||||
</layer-tree-canvas>
|
||||
<legend updateDrawingOrder="true">
|
||||
<legendlayer open="true" showFeatureCount="0" checked="Qt::Checked" name="testlayer èé" drawingOrder="-1">
|
||||
<legendlayer drawingOrder="-1" open="true" checked="Qt::Checked" name="testlayer èé" showFeatureCount="0">
|
||||
<filegroup open="true" hidden="false">
|
||||
<legendlayerfile visible="1" layerid="testlayer20150528120452665" isInOverview="0"/>
|
||||
<legendlayerfile isInOverview="0" layerid="testlayer20150528120452665" visible="1"/>
|
||||
</filegroup>
|
||||
</legendlayer>
|
||||
</legend>
|
||||
<projectlayers>
|
||||
<maplayer simplifyMaxScale="1" simplifyDrawingHints="0" type="vector" simplifyLocal="1" minimumScale="-4.65661e-10" hasScaleBasedVisibilityFlag="0" geometry="Point" maximumScale="1e+08" simplifyAlgorithm="0" simplifyDrawingTol="1" readOnly="0">
|
||||
<maplayer simplifyAlgorithm="0" minimumScale="-4.65661e-10" maximumScale="1e+08" simplifyDrawingHints="0" readOnly="0" minLabelScale="1" maxLabelScale="1e+08" simplifyDrawingTol="1" geometry="Point" simplifyMaxScale="1" type="vector" hasScaleBasedVisibilityFlag="0" simplifyLocal="1" scaleBasedLabelVisibilityFlag="0">
|
||||
<id>testlayer20150528120452665</id>
|
||||
<datasource>./testlayer.shp</datasource>
|
||||
<title>A test vector layer</title>
|
||||
@ -72,70 +72,65 @@
|
||||
</spatialrefsys>
|
||||
</srs>
|
||||
<provider encoding="UTF-8">ogr</provider>
|
||||
<previewExpression>"name"</previewExpression>
|
||||
<vectorjoins/>
|
||||
<layerDependencies/>
|
||||
<defaults>
|
||||
<default field="id" expression=""/>
|
||||
<default field="name" expression=""/>
|
||||
<default field="utf8nameè" expression=""/>
|
||||
</defaults>
|
||||
<dataDependencies/>
|
||||
<expressionfields/>
|
||||
<map-layer-style-manager current="">
|
||||
<map-layer-style name=""/>
|
||||
</map-layer-style-manager>
|
||||
<edittypes>
|
||||
<edittype name="id" widgetv2type="TextEdit">
|
||||
<widgetv2config fieldEditable="1" constraint="" labelOnTop="0" notNull="0" constraintDescription="" IsMultiline="0" UseHtml="0"/>
|
||||
<edittype widgetv2type="TextEdit" name="id">
|
||||
<widgetv2config IsMultiline="0" fieldEditable="1" constraint="" UseHtml="0" labelOnTop="0" constraintDescription="" notNull="0"/>
|
||||
</edittype>
|
||||
<edittype name="name" widgetv2type="TextEdit">
|
||||
<widgetv2config fieldEditable="1" constraint="" labelOnTop="0" notNull="0" constraintDescription="" IsMultiline="0" UseHtml="0"/>
|
||||
<edittype widgetv2type="TextEdit" name="name">
|
||||
<widgetv2config IsMultiline="0" fieldEditable="1" constraint="" UseHtml="0" labelOnTop="0" constraintDescription="" notNull="0"/>
|
||||
</edittype>
|
||||
<edittype name="utf8nameè" widgetv2type="TextEdit">
|
||||
<widgetv2config fieldEditable="1" constraint="" labelOnTop="0" notNull="0" constraintDescription="" IsMultiline="0" UseHtml="0"/>
|
||||
<edittype widgetv2type="TextEdit" name="utf8nameè">
|
||||
<widgetv2config IsMultiline="0" fieldEditable="1" constraint="" UseHtml="0" labelOnTop="0" constraintDescription="" notNull="0"/>
|
||||
</edittype>
|
||||
</edittypes>
|
||||
<renderer-v2 type="singleSymbol" forceraster="0" enableorderby="0" symbollevels="0">
|
||||
<renderer-v2 forceraster="0" symbollevels="0" type="singleSymbol" enableorderby="0">
|
||||
<symbols>
|
||||
<symbol alpha="1" type="marker" name="0" clip_to_extent="1">
|
||||
<layer class="SimpleMarker" pass="0" locked="0">
|
||||
<prop v="0" k="angle"/>
|
||||
<prop v="102,164,67,255" k="color"/>
|
||||
<prop v="1" k="horizontal_anchor_point"/>
|
||||
<prop v="bevel" k="joinstyle"/>
|
||||
<prop v="circle" k="name"/>
|
||||
<prop v="0,0" k="offset"/>
|
||||
<prop v="0,0,0,0,0,0" k="offset_map_unit_scale"/>
|
||||
<prop v="MM" k="offset_unit"/>
|
||||
<prop v="0,0,0,255" k="outline_color"/>
|
||||
<prop v="solid" k="outline_style"/>
|
||||
<prop v="0" k="outline_width"/>
|
||||
<prop v="0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
|
||||
<prop v="MM" k="outline_width_unit"/>
|
||||
<prop v="area" k="scale_method"/>
|
||||
<prop v="2" k="size"/>
|
||||
<prop v="0,0,0,0,0,0" k="size_map_unit_scale"/>
|
||||
<prop v="MM" k="size_unit"/>
|
||||
<prop v="1" k="vertical_anchor_point"/>
|
||||
<effect type="effectStack" enabled="0">
|
||||
<symbol alpha="1" clip_to_extent="1" type="marker" name="0">
|
||||
<layer pass="0" class="SimpleMarker" locked="0">
|
||||
<prop k="angle" v="0"/>
|
||||
<prop k="color" v="102,164,67,255"/>
|
||||
<prop k="horizontal_anchor_point" v="1"/>
|
||||
<prop k="joinstyle" v="bevel"/>
|
||||
<prop k="name" v="circle"/>
|
||||
<prop k="offset" v="0,0"/>
|
||||
<prop k="offset_map_unit_scale" v="0,0,0,0,0,0"/>
|
||||
<prop k="offset_unit" v="MM"/>
|
||||
<prop k="outline_color" v="0,0,0,255"/>
|
||||
<prop k="outline_style" v="solid"/>
|
||||
<prop k="outline_width" v="0"/>
|
||||
<prop k="outline_width_map_unit_scale" v="0,0,0,0,0,0"/>
|
||||
<prop k="outline_width_unit" v="MM"/>
|
||||
<prop k="scale_method" v="area"/>
|
||||
<prop k="size" v="2"/>
|
||||
<prop k="size_map_unit_scale" v="0,0,0,0,0,0"/>
|
||||
<prop k="size_unit" v="MM"/>
|
||||
<prop k="vertical_anchor_point" v="1"/>
|
||||
<effect enabled="0" type="effectStack">
|
||||
<effect type="drawSource">
|
||||
<prop v="0" k="blend_mode"/>
|
||||
<prop v="2" k="draw_mode"/>
|
||||
<prop v="1" k="enabled"/>
|
||||
<prop v="0" k="transparency"/>
|
||||
<prop k="blend_mode" v="0"/>
|
||||
<prop k="draw_mode" v="2"/>
|
||||
<prop k="enabled" v="1"/>
|
||||
<prop k="transparency" v="0"/>
|
||||
</effect>
|
||||
</effect>
|
||||
</layer>
|
||||
</symbol>
|
||||
</symbols>
|
||||
<rotation/>
|
||||
<sizescale/>
|
||||
<effect type="effectStack" enabled="0">
|
||||
<sizescale scalemethod="diameter"/>
|
||||
<effect enabled="0" type="effectStack">
|
||||
<effect type="drawSource">
|
||||
<prop v="0" k="blend_mode"/>
|
||||
<prop v="2" k="draw_mode"/>
|
||||
<prop v="1" k="enabled"/>
|
||||
<prop v="0" k="transparency"/>
|
||||
<prop k="blend_mode" v="0"/>
|
||||
<prop k="draw_mode" v="2"/>
|
||||
<prop k="enabled" v="1"/>
|
||||
<prop k="transparency" v="0"/>
|
||||
</effect>
|
||||
</effect>
|
||||
</renderer-v2>
|
||||
@ -286,51 +281,73 @@
|
||||
<blendMode>0</blendMode>
|
||||
<featureBlendMode>0</featureBlendMode>
|
||||
<layerTransparency>0</layerTransparency>
|
||||
<SingleCategoryDiagramRenderer sizeLegend="0" attributeLegend="1" diagramType="Pie">
|
||||
<DiagramCategory angleOffset="1440" width="15" transparency="0" minScaleDenominator="-4.65661e-10" minimumSize="0" lineSizeType="MM" sizeScale="0,0,0,0,0,0" enabled="0" height="15" labelPlacementMethod="XHeight" lineSizeScale="0,0,0,0,0,0" maxScaleDenominator="1e+08" sizeType="MM" scaleBasedVisibility="0" scaleDependency="Area" penAlpha="255" backgroundAlpha="255" diagramOrientation="Up" penColor="#000000" penWidth="0" backgroundColor="#ffffff" barWidth="5">
|
||||
<fontProperties style="" description="Ubuntu,9,-1,5,50,0,0,0,0,0"/>
|
||||
<attribute color="#000000" field="" label=""/>
|
||||
<displayfield>name</displayfield>
|
||||
<label>0</label>
|
||||
<labelattributes>
|
||||
<label fieldname="" text="Etichetta"/>
|
||||
<family fieldname="" name="Ubuntu"/>
|
||||
<size fieldname="" units="pt" value="12"/>
|
||||
<bold fieldname="" on="0"/>
|
||||
<italic fieldname="" on="0"/>
|
||||
<underline fieldname="" on="0"/>
|
||||
<strikeout fieldname="" on="0"/>
|
||||
<color fieldname="" red="0" blue="0" green="0"/>
|
||||
<x fieldname=""/>
|
||||
<y fieldname=""/>
|
||||
<offset x="0" y="0" units="pt" yfieldname="" xfieldname=""/>
|
||||
<angle fieldname="" value="0" auto="0"/>
|
||||
<alignment fieldname="" value="center"/>
|
||||
<buffercolor fieldname="" red="255" blue="255" green="255"/>
|
||||
<buffersize fieldname="" units="pt" value="1"/>
|
||||
<bufferenabled fieldname="" on=""/>
|
||||
<multilineenabled fieldname="" on=""/>
|
||||
<selectedonly on=""/>
|
||||
</labelattributes>
|
||||
<SingleCategoryDiagramRenderer diagramType="Pie" sizeLegend="0" attributeLegend="1">
|
||||
<DiagramCategory penColor="#000000" labelPlacementMethod="XHeight" penWidth="0" diagramOrientation="Up" sizeScale="0,0,0,0,0,0" minimumSize="0" barWidth="5" penAlpha="255" maxScaleDenominator="1e+08" backgroundColor="#ffffff" transparency="0" width="15" scaleDependency="Area" backgroundAlpha="255" angleOffset="1440" scaleBasedVisibility="0" enabled="0" height="15" lineSizeScale="0,0,0,0,0,0" sizeType="MM" lineSizeType="MM" minScaleDenominator="-4.65661e-10">
|
||||
<fontProperties description="Ubuntu,9,-1,5,50,0,0,0,0,0" style=""/>
|
||||
<attribute field="" color="#000000" label=""/>
|
||||
</DiagramCategory>
|
||||
<symbol alpha="1" type="marker" name="sizeSymbol" clip_to_extent="1">
|
||||
<layer class="SimpleMarker" pass="0" locked="0">
|
||||
<prop v="0" k="angle"/>
|
||||
<prop v="255,0,0,255" k="color"/>
|
||||
<prop v="1" k="horizontal_anchor_point"/>
|
||||
<prop v="bevel" k="joinstyle"/>
|
||||
<prop v="circle" k="name"/>
|
||||
<prop v="0,0" k="offset"/>
|
||||
<prop v="0,0,0,0,0,0" k="offset_map_unit_scale"/>
|
||||
<prop v="MM" k="offset_unit"/>
|
||||
<prop v="0,0,0,255" k="outline_color"/>
|
||||
<prop v="solid" k="outline_style"/>
|
||||
<prop v="0" k="outline_width"/>
|
||||
<prop v="0,0,0,0,0,0" k="outline_width_map_unit_scale"/>
|
||||
<prop v="MM" k="outline_width_unit"/>
|
||||
<prop v="diameter" k="scale_method"/>
|
||||
<prop v="2" k="size"/>
|
||||
<prop v="0,0,0,0,0,0" k="size_map_unit_scale"/>
|
||||
<prop v="MM" k="size_unit"/>
|
||||
<prop v="1" k="vertical_anchor_point"/>
|
||||
<symbol alpha="1" clip_to_extent="1" type="marker" name="sizeSymbol">
|
||||
<layer pass="0" class="SimpleMarker" locked="0">
|
||||
<prop k="angle" v="0"/>
|
||||
<prop k="color" v="255,0,0,255"/>
|
||||
<prop k="horizontal_anchor_point" v="1"/>
|
||||
<prop k="joinstyle" v="bevel"/>
|
||||
<prop k="name" v="circle"/>
|
||||
<prop k="offset" v="0,0"/>
|
||||
<prop k="offset_map_unit_scale" v="0,0,0,0,0,0"/>
|
||||
<prop k="offset_unit" v="MM"/>
|
||||
<prop k="outline_color" v="0,0,0,255"/>
|
||||
<prop k="outline_style" v="solid"/>
|
||||
<prop k="outline_width" v="0"/>
|
||||
<prop k="outline_width_map_unit_scale" v="0,0,0,0,0,0"/>
|
||||
<prop k="outline_width_unit" v="MM"/>
|
||||
<prop k="scale_method" v="diameter"/>
|
||||
<prop k="size" v="2"/>
|
||||
<prop k="size_map_unit_scale" v="0,0,0,0,0,0"/>
|
||||
<prop k="size_unit" v="MM"/>
|
||||
<prop k="vertical_anchor_point" v="1"/>
|
||||
</layer>
|
||||
</symbol>
|
||||
</SingleCategoryDiagramRenderer>
|
||||
<DiagramLayerSettings zIndex="0" dist="0" priority="0" showAll="1" placement="0" linePlacementFlags="10" yPosColumn="-1" showColumn="0" obstacle="0" xPosColumn="-1"/>
|
||||
<DiagramLayerSettings yPosColumn="-1" showColumn="0" linePlacementFlags="10" placement="0" dist="0" xPosColumn="-1" priority="0" obstacle="0" zIndex="0" showAll="1"/>
|
||||
<annotationform>.</annotationform>
|
||||
<aliases>
|
||||
<alias index="0" name="" field="id"/>
|
||||
<alias index="1" name="" field="name"/>
|
||||
<alias index="2" name="" field="utf8nameè"/>
|
||||
<alias field="id" index="0" name=""/>
|
||||
<alias field="name" index="1" name=""/>
|
||||
<alias field="utf8nameè" index="2" name=""/>
|
||||
</aliases>
|
||||
<excludeAttributesWMS/>
|
||||
<excludeAttributesWFS/>
|
||||
<attributeactions default="0"/>
|
||||
<attributetableconfig sortExpression="" sortOrder="0" actionWidgetStyle="dropDown">
|
||||
<attributetableconfig actionWidgetStyle="dropDown" sortExpression="" sortOrder="0">
|
||||
<columns/>
|
||||
</attributetableconfig>
|
||||
<editform>.</editform>
|
||||
<editforminit/>
|
||||
<editforminitcodesource>0</editforminitcodesource>
|
||||
<editforminitfilepath></editforminitfilepath>
|
||||
<editforminitfilepath>.</editforminitfilepath>
|
||||
<editforminitcode><![CDATA[]]></editforminitcode>
|
||||
<featformsuppress>0</featformsuppress>
|
||||
<editorlayout>generatedlayout</editorlayout>
|
||||
@ -339,106 +356,119 @@
|
||||
<rowstyles/>
|
||||
<fieldstyles/>
|
||||
</conditionalstyles>
|
||||
<expressionfields/>
|
||||
<previewExpression>"name"</previewExpression>
|
||||
<mapTip></mapTip>
|
||||
</maplayer>
|
||||
</projectlayers>
|
||||
<properties>
|
||||
<WMSKeywordList type="QStringList">
|
||||
<value></value>
|
||||
</WMSKeywordList>
|
||||
<WMSUrl type="QString"></WMSUrl>
|
||||
<SpatialRefSys>
|
||||
<ProjectCRSProj4String type="QString">+proj=longlat +datum=WGS84 +no_defs</ProjectCRSProj4String>
|
||||
<ProjectCrs type="QString">EPSG:4326</ProjectCrs>
|
||||
<ProjectCRSID type="int">3452</ProjectCRSID>
|
||||
<ProjectionsEnabled type="int">1</ProjectionsEnabled>
|
||||
</SpatialRefSys>
|
||||
<Measurement>
|
||||
<DistanceUnits type="QString">meters</DistanceUnits>
|
||||
<AreaUnits type="QString">m2</AreaUnits>
|
||||
</Measurement>
|
||||
<Legend>
|
||||
<filterByMap type="bool">false</filterByMap>
|
||||
</Legend>
|
||||
<WMSExtent type="QStringList">
|
||||
<value>8.20315414376310059</value>
|
||||
<value>44.901236559338642</value>
|
||||
<value>8.204164917965862</value>
|
||||
<value>44.90159838674664172</value>
|
||||
</WMSExtent>
|
||||
<WMSUrl type="QString"></WMSUrl>
|
||||
<DefaultStyles>
|
||||
<Fill type="QString"></Fill>
|
||||
<Line type="QString"></Line>
|
||||
<Marker type="QString"></Marker>
|
||||
<RandomColors type="bool">true</RandomColors>
|
||||
<AlphaInt type="int">255</AlphaInt>
|
||||
<ColorRamp type="QString"></ColorRamp>
|
||||
</DefaultStyles>
|
||||
<WMSAccessConstraints type="QString">None</WMSAccessConstraints>
|
||||
<WMSContactMail type="QString">elpaso@itopen.it</WMSContactMail>
|
||||
<WMSImageQuality type="int">90</WMSImageQuality>
|
||||
<WFSLayersPrecision>
|
||||
<testlayer20150528120452665 type="int">8</testlayer20150528120452665>
|
||||
</WFSLayersPrecision>
|
||||
<WMSRestrictedComposers type="QStringList"/>
|
||||
<WMSServiceTitle type="QString">QGIS TestProject</WMSServiceTitle>
|
||||
<WMSContactPhone type="QString"></WMSContactPhone>
|
||||
<WFSTLayers>
|
||||
<Insert type="QStringList">
|
||||
<value>testlayer20150528120452665</value>
|
||||
</Insert>
|
||||
<Update type="QStringList">
|
||||
<value>testlayer20150528120452665</value>
|
||||
</Update>
|
||||
<Delete type="QStringList">
|
||||
<value>testlayer20150528120452665</value>
|
||||
</Delete>
|
||||
</WFSTLayers>
|
||||
<WCSLayers type="QStringList"/>
|
||||
<WMSRestrictedLayers type="QStringList"/>
|
||||
<WMSContactPhone type="QString"></WMSContactPhone>
|
||||
<Identify>
|
||||
<disabledLayers type="QStringList"/>
|
||||
</Identify>
|
||||
<WMSImageQuality type="int">90</WMSImageQuality>
|
||||
<WMSServiceAbstract type="QString">Some UTF8 text èòù</WMSServiceAbstract>
|
||||
<WMSAddWktGeometry type="bool">true</WMSAddWktGeometry>
|
||||
<WCSUrl type="QString"></WCSUrl>
|
||||
<Measurement>
|
||||
<DistanceUnits type="QString"></DistanceUnits>
|
||||
<AreaUnits type="QString"></AreaUnits>
|
||||
</Measurement>
|
||||
<WMSServiceTitle type="QString">QGIS TestProject</WMSServiceTitle>
|
||||
<WMSAccessConstraints type="QString"></WMSAccessConstraints>
|
||||
<WMSOnlineResource type="QString"></WMSOnlineResource>
|
||||
<WMSPrecision type="QString">4</WMSPrecision>
|
||||
<SpatialRefSys>
|
||||
<ProjectCRSProj4String type="QString">+proj=longlat +datum=WGS84 +no_defs</ProjectCRSProj4String>
|
||||
<ProjectionsEnabled type="int">1</ProjectionsEnabled>
|
||||
<ProjectCrs type="QString">EPSG:4326</ProjectCrs>
|
||||
<ProjectCRSID type="int">3452</ProjectCRSID>
|
||||
</SpatialRefSys>
|
||||
<Paths>
|
||||
<Absolute type="bool">false</Absolute>
|
||||
</Paths>
|
||||
<WMSUseLayerIDs type="bool">false</WMSUseLayerIDs>
|
||||
<Digitizing>
|
||||
<LayerSnappingList type="QStringList"/>
|
||||
<LayerSnappingToleranceUnitList type="QStringList"/>
|
||||
<DefaultSnapType type="QString">off</DefaultSnapType>
|
||||
<SnappingMode type="QString">current_layer</SnappingMode>
|
||||
<LayerSnappingEnabledList type="QStringList"/>
|
||||
<LayerSnappingToleranceList type="QStringList"/>
|
||||
<DefaultSnapTolerance type="double">0</DefaultSnapTolerance>
|
||||
<LayerSnapToList type="QStringList"/>
|
||||
<DefaultSnapToleranceUnit type="int">2</DefaultSnapToleranceUnit>
|
||||
<AvoidIntersectionsList type="QStringList"/>
|
||||
</Digitizing>
|
||||
<WMSFees type="QString">conditions unknown</WMSFees>
|
||||
<Macros>
|
||||
<pythonCode type="QString"></pythonCode>
|
||||
</Macros>
|
||||
<WMSAddWktGeometry type="bool">true</WMSAddWktGeometry>
|
||||
<WCSUrl type="QString"></WCSUrl>
|
||||
<WMSOnlineResource type="QString"></WMSOnlineResource>
|
||||
<WMSPrecision type="QString">4</WMSPrecision>
|
||||
<Digitizing>
|
||||
<LayerSnappingList type="QStringList"/>
|
||||
<LayerSnappingEnabledList type="QStringList"/>
|
||||
<DefaultSnapToleranceUnit type="int">2</DefaultSnapToleranceUnit>
|
||||
<SnappingMode type="QString">current_layer</SnappingMode>
|
||||
<AvoidIntersectionsList type="QStringList"/>
|
||||
<LayerSnappingToleranceUnitList type="QStringList"/>
|
||||
<LayerSnapToList type="QStringList"/>
|
||||
<DefaultSnapType type="QString">off</DefaultSnapType>
|
||||
<DefaultSnapTolerance type="double">0</DefaultSnapTolerance>
|
||||
<LayerSnappingToleranceList type="QStringList"/>
|
||||
</Digitizing>
|
||||
<Identify>
|
||||
<disabledLayers type="QStringList"/>
|
||||
</Identify>
|
||||
<WMSContactPerson type="QString">Alessandro Pasotti</WMSContactPerson>
|
||||
<WMSContactOrganization type="QString">QGIS dev team</WMSContactOrganization>
|
||||
<WMSRestrictedComposers type="QStringList"/>
|
||||
<WFSUrl type="QString"></WFSUrl>
|
||||
<WFSLayers type="QStringList"/>
|
||||
<WMSServiceCapabilities type="bool">true</WMSServiceCapabilities>
|
||||
<WMSContactMail type="QString">elpaso@itopen.it</WMSContactMail>
|
||||
<Measure>
|
||||
<Ellipsoid type="QString">WGS84</Ellipsoid>
|
||||
</Measure>
|
||||
<WMSKeywordList type="QStringList">
|
||||
<value></value>
|
||||
</WMSKeywordList>
|
||||
<Paths>
|
||||
<Absolute type="bool">false</Absolute>
|
||||
</Paths>
|
||||
<Variables>
|
||||
<variableNames type="QStringList"/>
|
||||
<variableValues type="QStringList"/>
|
||||
</Variables>
|
||||
<WMSContactPosition type="QString"></WMSContactPosition>
|
||||
<PositionPrecision>
|
||||
<DecimalPlaces type="int">2</DecimalPlaces>
|
||||
<Automatic type="bool">true</Automatic>
|
||||
<DegreeFormat type="QString">D</DegreeFormat>
|
||||
</PositionPrecision>
|
||||
<WFSTLayers>
|
||||
<Update type="QStringList"/>
|
||||
<Delete type="QStringList"/>
|
||||
<Insert type="QStringList"/>
|
||||
</WFSTLayers>
|
||||
<WMSContactPerson type="QString">Alessandro Pasotti</WMSContactPerson>
|
||||
<Legend>
|
||||
<filterByMap type="bool">false</filterByMap>
|
||||
</Legend>
|
||||
<DefaultStyles>
|
||||
<Fill type="QString"></Fill>
|
||||
<RandomColors type="bool">true</RandomColors>
|
||||
<Line type="QString"></Line>
|
||||
<AlphaInt type="int">255</AlphaInt>
|
||||
<ColorRamp type="QString"></ColorRamp>
|
||||
<Marker type="QString"></Marker>
|
||||
</DefaultStyles>
|
||||
<WMSFees type="QString"></WMSFees>
|
||||
<Gui>
|
||||
<SelectionColorRedPart type="int">255</SelectionColorRedPart>
|
||||
<SelectionColorGreenPart type="int">255</SelectionColorGreenPart>
|
||||
<CanvasColorGreenPart type="int">255</CanvasColorGreenPart>
|
||||
<CanvasColorBluePart type="int">255</CanvasColorBluePart>
|
||||
<SelectionColorBluePart type="int">0</SelectionColorBluePart>
|
||||
<CanvasColorGreenPart type="int">255</CanvasColorGreenPart>
|
||||
<CanvasColorRedPart type="int">255</CanvasColorRedPart>
|
||||
<SelectionColorRedPart type="int">255</SelectionColorRedPart>
|
||||
<SelectionColorAlphaPart type="int">255</SelectionColorAlphaPart>
|
||||
<SelectionColorGreenPart type="int">255</SelectionColorGreenPart>
|
||||
<CanvasColorBluePart type="int">255</CanvasColorBluePart>
|
||||
</Gui>
|
||||
<Measure>
|
||||
<Ellipsoid type="QString">WGS84</Ellipsoid>
|
||||
</Measure>
|
||||
<WMSServiceAbstract type="QString">Some UTF8 text èòù</WMSServiceAbstract>
|
||||
<WFSLayers type="QStringList">
|
||||
<value>testlayer20150528120452665</value>
|
||||
</WFSLayers>
|
||||
<WFSUrl type="QString"></WFSUrl>
|
||||
<WMSServiceCapabilities type="bool">true</WMSServiceCapabilities>
|
||||
<WMSUseLayerIDs type="bool">false</WMSUseLayerIDs>
|
||||
</properties>
|
||||
<visibility-presets/>
|
||||
</qgis>
|
Loading…
x
Reference in New Issue
Block a user