From 5f19c6b31923114886fa44a6f99a733acf1f8f19 Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Wed, 7 Nov 2012 09:12:37 +0100 Subject: [PATCH] Fix bug #6582: QGIS server displayes text layers only with absolute pathes --- src/mapserver/qgsprojectparser.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/mapserver/qgsprojectparser.cpp b/src/mapserver/qgsprojectparser.cpp index 8a46111fdfb..1f5a4df7486 100644 --- a/src/mapserver/qgsprojectparser.cpp +++ b/src/mapserver/qgsprojectparser.cpp @@ -41,6 +41,7 @@ #include #include #include "QTextStream" +#include QgsProjectParser::QgsProjectParser( QDomDocument* xmlDoc, const QString& filePath ): QgsConfigParser(), mXMLDoc( xmlDoc ), mProjectPath( filePath ) @@ -1305,6 +1306,24 @@ QgsMapLayer* QgsProjectParser::createLayerFromElement( const QDomElement& elem, } } } + else if ( uri.startsWith( "file:" ) ) //a file based datasource in url notation (e.g. delimited text layer) + { + QString filePath = uri.mid( 5, uri.indexOf( "?" ) - 5 ); + QString absoluteFilePath = convertToAbsolutePath( filePath ); + if ( filePath != absoluteFilePath ) + { + QUrl destUrl = QUrl::fromEncoded( uri.toAscii() ); + destUrl.setScheme( "file" ); + destUrl.setPath( absoluteFilePath ); + absoluteUri = destUrl.toEncoded(); + QDomText absoluteTextNode = mXMLDoc->createTextNode( absoluteUri ); + dataSourceElem.replaceChild( absoluteTextNode, dataSourceElem.firstChild() ); + } + else + { + absoluteUri = uri; + } + } else //file based data source { absoluteUri = convertToAbsolutePath( uri );