//**************************************************************************** //** Browser Map void MainObject::on_browsermap(){ QUrl mapUrl(X->getx("show_mpmap")); if (X->get_ena("show_mpmap")) { mapUrl.addQueryItem("follow", X->getx("--callsign=")); QDesktopServices::openUrl(mapUrl); outLog("Opening browser map: "+mapUrl.toString()); } }
QString QgsWCSServer::serviceUrl() const { QUrl mapUrl( getenv( "REQUEST_URI" ) ); mapUrl.setHost( getenv( "SERVER_NAME" ) ); //Add non-default ports to url QString portString = getenv( "SERVER_PORT" ); if ( !portString.isEmpty() ) { bool portOk; int portNumber = portString.toInt( &portOk ); if ( portOk ) { if ( portNumber != 80 ) { mapUrl.setPort( portNumber ); } } } if ( QString( getenv( "HTTPS" ) ).compare( "on", Qt::CaseInsensitive ) == 0 ) { mapUrl.setScheme( "https" ); } else { mapUrl.setScheme( "http" ); } QList<QPair<QString, QString> > queryItems = mapUrl.queryItems(); QList<QPair<QString, QString> >::const_iterator queryIt = queryItems.constBegin(); for ( ; queryIt != queryItems.constEnd(); ++queryIt ) { if ( queryIt->first.compare( "REQUEST", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "VERSION", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "SERVICE", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "_DC", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } } return mapUrl.toString(); }
QDomDocument QgsWFSServer::getCapabilities() { QgsDebugMsg( "Entering." ); QDomDocument doc; //wfs:WFS_Capabilities element QDomElement wfsCapabilitiesElement = doc.createElement( "WFS_Capabilities"/*wms:WFS_Capabilities*/ ); wfsCapabilitiesElement.setAttribute( "xmlns", "http://www.opengis.net/wfs" ); wfsCapabilitiesElement.setAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); wfsCapabilitiesElement.setAttribute( "xsi:schemaLocation", "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd" ); wfsCapabilitiesElement.setAttribute( "xmlns:ogc", "http://www.opengis.net/ogc" ); wfsCapabilitiesElement.setAttribute( "xmlns:gml", "http://www.opengis.net/gml" ); wfsCapabilitiesElement.setAttribute( "xmlns:ows", "http://www.opengis.net/ows" ); wfsCapabilitiesElement.setAttribute( "xmlns:xlink", "http://www.w3.org/1999/xlink" ); wfsCapabilitiesElement.setAttribute( "version", "1.0.0" ); wfsCapabilitiesElement.setAttribute( "updateSequence", "0" ); doc.appendChild( wfsCapabilitiesElement ); if ( mConfigParser ) { mConfigParser->serviceCapabilities( wfsCapabilitiesElement, doc ); } //wfs:Capability element QDomElement capabilityElement = doc.createElement( "Capability"/*wfs:Capability*/ ); wfsCapabilitiesElement.appendChild( capabilityElement ); //wfs:Request element QDomElement requestElement = doc.createElement( "Request"/*wfs:Request*/ ); capabilityElement.appendChild( requestElement ); //wfs:GetCapabilities QDomElement getCapabilitiesElement = doc.createElement( "GetCapabilities"/*wfs:GetCapabilities*/ ); requestElement.appendChild( getCapabilitiesElement ); QDomElement capabilitiesFormatElement = doc.createElement( "Format" );/*wfs:Format*/ getCapabilitiesElement.appendChild( capabilitiesFormatElement ); QDomText capabilitiesFormatText = doc.createTextNode( "text/xml" ); capabilitiesFormatElement.appendChild( capabilitiesFormatText ); QDomElement dcpTypeElement = doc.createElement( "DCPType"/*wfs:DCPType*/ ); getCapabilitiesElement.appendChild( dcpTypeElement ); QDomElement httpElement = doc.createElement( "HTTP"/*wfs:HTTP*/ ); dcpTypeElement.appendChild( httpElement ); //Prepare url //Some client requests already have http://<SERVER_NAME> in the REQUEST_URI variable QString hrefString; QString requestUrl = getenv( "REQUEST_URI" ); QUrl mapUrl( requestUrl ); mapUrl.setHost( QString( getenv( "SERVER_NAME" ) ) ); //Add non-default ports to url QString portString = getenv( "SERVER_PORT" ); if ( !portString.isEmpty() ) { bool portOk; int portNumber = portString.toInt( &portOk ); if ( portOk ) { if ( portNumber != 80 ) { mapUrl.setPort( portNumber ); } } } if ( QString( getenv( "HTTPS" ) ).compare( "on", Qt::CaseInsensitive ) == 0 ) { mapUrl.setScheme( "https" ); } else { mapUrl.setScheme( "http" ); } QList<QPair<QString, QString> > queryItems = mapUrl.queryItems(); QList<QPair<QString, QString> >::const_iterator queryIt = queryItems.constBegin(); for ( ; queryIt != queryItems.constEnd(); ++queryIt ) { if ( queryIt->first.compare( "REQUEST", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "VERSION", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "SERVICE", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "_DC", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } } hrefString = mapUrl.toString(); //only Get supported for the moment QDomElement getElement = doc.createElement( "Get"/*wfs:Get*/ ); httpElement.appendChild( getElement ); QDomElement olResourceElement = doc.createElement( "OnlineResource"/*wfs:OnlineResource*/ ); olResourceElement.setAttribute( "xlink:type", "simple" ); requestUrl.truncate( requestUrl.indexOf( "?" ) + 1 ); olResourceElement.setAttribute( "xlink:href", hrefString ); getElement.appendChild( olResourceElement ); //wfs:DescribeFeatureType QDomElement describeFeatureTypeElement = doc.createElement( "DescribeFeatureType"/*wfs:DescribeFeatureType*/ ); requestElement.appendChild( describeFeatureTypeElement ); QDomElement schemaDescriptionLanguageElement = doc.createElement( "SchemaDescriptionLanguage"/*wfs:SchemaDescriptionLanguage*/ ); describeFeatureTypeElement.appendChild( schemaDescriptionLanguageElement ); QDomElement xmlSchemaElement = doc.createElement( "XMLSCHEMA"/*wfs:XMLSCHEMA*/ ); schemaDescriptionLanguageElement.appendChild( xmlSchemaElement ); QDomElement describeFeatureTypeDhcTypeElement = dcpTypeElement.cloneNode().toElement();//this is the same as for 'GetCapabilities' describeFeatureTypeElement.appendChild( describeFeatureTypeDhcTypeElement ); //wfs:GetFeature QDomElement getFeatureElement = doc.createElement( "GetFeature"/*wfs:GetFeature*/ ); requestElement.appendChild( getFeatureElement ); QDomElement getFeatureFormatElement = doc.createElement( "ResultFormat" );/*wfs:ResultFormat*/ getFeatureElement.appendChild( getFeatureFormatElement ); QDomElement gmlFormatElement = doc.createElement( "GML2" );/*wfs:GML2*/ getFeatureFormatElement.appendChild( gmlFormatElement ); QDomElement geojsonFormatElement = doc.createElement( "GeoJSON" );/*wfs:GeoJSON*/ getFeatureFormatElement.appendChild( geojsonFormatElement ); QDomElement getFeatureDhcTypeElement = dcpTypeElement.cloneNode().toElement();//this is the same as for 'GetCapabilities' getFeatureElement.appendChild( getFeatureDhcTypeElement ); //wfs:FeatureTypeList element QDomElement featureTypeListElement = doc.createElement( "FeatureTypeList"/*wfs:FeatureTypeList*/ ); wfsCapabilitiesElement.appendChild( featureTypeListElement ); //wfs:Operations element QDomElement operationsElement = doc.createElement( "Operations"/*wfs:Operations*/ ); featureTypeListElement.appendChild( operationsElement ); //wfs:Query element QDomElement queryElement = doc.createElement( "Query"/*wfs:Query*/ ); operationsElement.appendChild( queryElement ); /* * Adding layer liste in featureTypeListElement */ if ( mConfigParser ) { mConfigParser->featureTypeList( featureTypeListElement, doc ); } /* * Adding ogc:Filter_Capabilities in capabilityElement */ //ogc:Filter_Capabilities element QDomElement filterCapabilitiesElement = doc.createElement( "ogc:Filter_Capabilities"/*ogc:Filter_Capabilities*/ ); capabilityElement.appendChild( filterCapabilitiesElement ); QDomElement spatialCapabilitiesElement = doc.createElement( "ogc:Spatial_Capabilities"/*ogc:Spatial_Capabilities*/ ); filterCapabilitiesElement.appendChild( spatialCapabilitiesElement ); QDomElement spatialOperatorsElement = doc.createElement( "ogc:Spatial_Operators"/*ogc:Spatial_Operators*/ ); spatialCapabilitiesElement.appendChild( spatialOperatorsElement ); QDomElement ogcBboxElement = doc.createElement( "ogc:BBOX"/*ogc:BBOX*/ ); spatialOperatorsElement.appendChild( ogcBboxElement ); QDomElement scalarCapabilitiesElement = doc.createElement( "ogc:Scalar_Capabilities"/*ogc:Scalar_Capabilities*/ ); filterCapabilitiesElement.appendChild( scalarCapabilitiesElement ); QDomElement comparisonOperatorsElement = doc.createElement( "ogc:Comparison_Operators"/*ogc:Comparison_Operators*/ ); scalarCapabilitiesElement.appendChild( comparisonOperatorsElement ); QDomElement simpleComparisonsElement = doc.createElement( "ogc:Simple_Comparisons"/*ogc:Simple_Comparisons*/ ); comparisonOperatorsElement.appendChild( simpleComparisonsElement ); return doc; }
void QgsWFSServer::startGetFeature( QgsRequestHandler& request, const QString& format, QgsCoordinateReferenceSystem& crs, QgsRectangle* rect ) { QByteArray result; QString fcString; if ( format == "GeoJSON" ) { fcString = "{\"type\": \"FeatureCollection\",\n"; fcString += " \"bbox\": [ " + QString::number( rect->xMinimum(), 'f', 6 ).remove( QRegExp( "[0]{1,5}$" ) ) + ", " + QString::number( rect->yMinimum(), 'f', 6 ).remove( QRegExp( "[0]{1,5}$" ) ) + ", " + QString::number( rect->xMaximum(), 'f', 6 ).remove( QRegExp( "[0]{1,5}$" ) ) + ", " + QString::number( rect->yMaximum(), 'f', 6 ).remove( QRegExp( "[0]{1,5}$" ) ) + "],\n"; fcString += " \"features\": [\n"; result = fcString.toUtf8(); request.startGetFeatureResponse( &result, format ); } else { //Prepare url //Some client requests already have http://<SERVER_NAME> in the REQUEST_URI variable QString hrefString; QString requestUrl = getenv( "REQUEST_URI" ); QUrl mapUrl( requestUrl ); mapUrl.setHost( QString( getenv( "SERVER_NAME" ) ) ); //Add non-default ports to url QString portString = getenv( "SERVER_PORT" ); if ( !portString.isEmpty() ) { bool portOk; int portNumber = portString.toInt( &portOk ); if ( portOk ) { if ( portNumber != 80 ) { mapUrl.setPort( portNumber ); } } } if ( QString( getenv( "HTTPS" ) ).compare( "on", Qt::CaseInsensitive ) == 0 ) { mapUrl.setScheme( "https" ); } else { mapUrl.setScheme( "http" ); } QList<QPair<QString, QString> > queryItems = mapUrl.queryItems(); QList<QPair<QString, QString> >::const_iterator queryIt = queryItems.constBegin(); for ( ; queryIt != queryItems.constEnd(); ++queryIt ) { if ( queryIt->first.compare( "REQUEST", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); mapUrl.addQueryItem( queryIt->first, "DescribeFeatureType" ); } else if ( queryIt->first.compare( "FORMAT", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "OUTPUTFORMAT", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "BBOX", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "FEATUREID", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "FILTER", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "MAXFEATURES", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "PROPERTYNAME", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } else if ( queryIt->first.compare( "_DC", Qt::CaseInsensitive ) == 0 ) { mapUrl.removeQueryItem( queryIt->first ); } } mapUrl.addQueryItem( "OUTPUTFORMAT", "XMLSCHEMA" ); hrefString = mapUrl.toString(); //wfs:FeatureCollection fcString = "<wfs:FeatureCollection"; fcString += " xmlns:wfs=\"http://www.opengis.net/wfs\""; fcString += " xmlns:ogc=\"http://www.opengis.net/ogc\""; fcString += " xmlns:gml=\"http://www.opengis.net/gml\""; fcString += " xmlns:ows=\"http://www.opengis.net/ows\""; fcString += " xmlns:xlink=\"http://www.w3.org/1999/xlink\""; fcString += " xmlns:qgs=\"http://www.qgis.org/gml\""; fcString += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""; fcString += " xsi:schemaLocation=\"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd http://www.qgis.org/gml " + hrefString.replace( "&", "&" ) + "\""; fcString += ">"; result = fcString.toUtf8(); request.startGetFeatureResponse( &result, format ); QDomDocument doc; QDomElement bbElem = doc.createElement( "gml:boundedBy" ); QDomElement boxElem = createBoxElem( rect, doc ); if ( !boxElem.isNull() ) { if ( crs.isValid() ) { boxElem.setAttribute( "srsName", crs.authid() ); } bbElem.appendChild( boxElem ); doc.appendChild( bbElem ); } result = doc.toByteArray(); request.sendGetFeatureResponse( &result ); } fcString = ""; }