Re: [Qgis-developer] SLD export not compliant due to unit attribute in the root element
On Mon, Jul 25, 2016 at 10:41 AM, Andrea Aime wrote: > On Mon, Jul 25, 2016 at 10:04 AM, René-Luc Dhont > wrote: > >> Hi Andrea, >> >> I'm the author of the commits that add a 'units' attribute to >> StyleLayerDescriptor element. >> >> https://github.com/qgis/QGIS/commit/b54b1598a6ba145a51aa266cde9282ae4d0378ad >> >> https://github.com/qgis/QGIS/commit/f7ce8b94344e7a7dd12fac2a90bd84df30b7e82f >> >> If you look at the code of these 2 commits, I didn't change anything >> about QGIS SLD interpretation. In the QGIS core, a 'units' attribute is >> used to defined the SLD default units for distance. >> But I didn't add this 'units' attribute for QGIS and QGIS Server SLD >> interpretation, I add these 'units' for GeoServer. >> > > GeoServer cannot make any use of that attribute, it's not part of the > spec, nor part of the GeoServer own extensions to SLD. It just makes people > wonder why the validation fails, and then > we get tickets on either qgis or geoserver side :-) > Also, unit management is already available, but at the symbolizer level, > if anything, it would make more sense to add a custom uom value in screen > mm that GeoServer would > understand (more on this later, read below). > > >> >> I didn't used uomScale because of SLD has to be used for any DPI screen. >> So if a QGIS user made style in pixels, he has made the choice to have >> different rendering in different DPI screen. But if the user made style in >> mm on the screen, the stroke or line has to have the same size in different >> DPI screen. >> > > This has often no meaning in a server side application, where the imagery > is built without knowing about the user > screen DPI, sometimes in advance of actual usage on a screen (tile > caching). > GeoServer has a vendor option in GetMap to specify the DPI, but only > custom built clients use it (strictly standard clients won't), I see > QGis server has the same, but as a vendor option, it cannot be relied upon > in general. > The option to transform to pixels using OGC own standard DPI > recommendation (a value close to 91, in particular, 25.4 / 0.28, see the > SLD/SE spec) > allows more software to understand the style file, and then if DPI is part > of the request, qgis/geoserver can adjust the pixel > values on the fly accounting for the difference between standard and > actual DPI. > I'd add that in a web context pixels are now treated as Device Independent Pixels, i.e. if you set a px value in a CSS you won't get it mapped to the real pixel size but to a device dependent physical value, that makes perfectly sense in the HiDPI screens age. I agree that the best option would be to convert the mm to px by using the OGC recommended DPI conversion factor. > >> >> Can QGIS extend SLD by added it's own schema for defining units attribute >> ? >> > > Errr... in theory yes, but in practice it will likely not work. The > compliant way to do it would be to create your own schema, roll your own > custom element, e.g. QGisStyledLayerDescriptor, put > it in a substitution group with StyledLayerDescriptor, link to it from the > exported styles, and then in such element you can add your own attributes. > However, I don't know if clients would be able to figure this out, I > believe many would just break because they do not recognize it. > GeoServer own parser might even parse it anyways (it's schema driven, so > it might inspect your extended schema before starting the parse if you > linked > to it), but it would still not know what to do with the units attribute > anyways. > > >> >> Can we used a VendorOption, to specify mm on the screen like in GeoServer >> ? >> >> http://docs.geoserver.org/latest/en/user/styling/sld-extensions/label-obstacles.html >> > > VendorOption is one of GeoServer extra tags that are not part of the > SLD/SE schemas (so they are not compliant either). > Check the schemas: > http://schemas.opengis.net/se/1.1.0/Symbolizer.xsd > We normally warn people that the moment they start using vendor > extensions, the SLD cannot be exported out to other software anymore > (some clients will fail to parse, others will just ignore the extra > elements/attributes). > > This brings me to a different topic... when you say in the UI "export to > SLD" the export should, imho, strictly be compliant, thus don't use the > VendorOption tag, or other extensions, or non > compliant mark names, and the like... it should be a best effort export > that ensures compatibility with whatever other software. > > I would instead favor adding another export option, "export to GeoServer > SLD", in which the code would add VendorOption and know what specific > options GeoServer supports. > I see that QGis is already using VendorOption in some places, but with > values GeoServer does not understand... wondering, what would be the > software > that understands those extras? I am thinking maybe they have been added to > allow a "export and re-import in QGis" round trip, making them > a "export to QGis SLD" opt
Re: [Qgis-developer] SLD export not compliant due to unit attribute in the root element
On Mon, Jul 25, 2016 at 10:04 AM, René-Luc Dhont wrote: > Hi Andrea, > > I'm the author of the commits that add a 'units' attribute to > StyleLayerDescriptor element. > > https://github.com/qgis/QGIS/commit/b54b1598a6ba145a51aa266cde9282ae4d0378ad > > https://github.com/qgis/QGIS/commit/f7ce8b94344e7a7dd12fac2a90bd84df30b7e82f > > If you look at the code of these 2 commits, I didn't change anything about > QGIS SLD interpretation. In the QGIS core, a 'units' attribute is used to > defined the SLD default units for distance. > But I didn't add this 'units' attribute for QGIS and QGIS Server SLD > interpretation, I add these 'units' for GeoServer. > GeoServer cannot make any use of that attribute, it's not part of the spec, nor part of the GeoServer own extensions to SLD. It just makes people wonder why the validation fails, and then we get tickets on either qgis or geoserver side :-) Also, unit management is already available, but at the symbolizer level, if anything, it would make more sense to add a custom uom value in screen mm that GeoServer would understand (more on this later, read below). > > I didn't used uomScale because of SLD has to be used for any DPI screen. > So if a QGIS user made style in pixels, he has made the choice to have > different rendering in different DPI screen. But if the user made style in > mm on the screen, the stroke or line has to have the same size in different > DPI screen. > This has often no meaning in a server side application, where the imagery is built without knowing about the user screen DPI, sometimes in advance of actual usage on a screen (tile caching). GeoServer has a vendor option in GetMap to specify the DPI, but only custom built clients use it (strictly standard clients won't), I see QGis server has the same, but as a vendor option, it cannot be relied upon in general. The option to transform to pixels using OGC own standard DPI recommendation (a value close to 91, in particular, 25.4 / 0.28, see the SLD/SE spec) allows more software to understand the style file, and then if DPI is part of the request, qgis/geoserver can adjust the pixel values on the fly accounting for the difference between standard and actual DPI. > > Can QGIS extend SLD by added it's own schema for defining units attribute ? > Errr... in theory yes, but in practice it will likely not work. The compliant way to do it would be to create your own schema, roll your own custom element, e.g. QGisStyledLayerDescriptor, put it in a substitution group with StyledLayerDescriptor, link to it from the exported styles, and then in such element you can add your own attributes. However, I don't know if clients would be able to figure this out, I believe many would just break because they do not recognize it. GeoServer own parser might even parse it anyways (it's schema driven, so it might inspect your extended schema before starting the parse if you linked to it), but it would still not know what to do with the units attribute anyways. > > Can we used a VendorOption, to specify mm on the screen like in GeoServer ? > > http://docs.geoserver.org/latest/en/user/styling/sld-extensions/label-obstacles.html > VendorOption is one of GeoServer extra tags that are not part of the SLD/SE schemas (so they are not compliant either). Check the schemas: http://schemas.opengis.net/se/1.1.0/Symbolizer.xsd We normally warn people that the moment they start using vendor extensions, the SLD cannot be exported out to other software anymore (some clients will fail to parse, others will just ignore the extra elements/attributes). This brings me to a different topic... when you say in the UI "export to SLD" the export should, imho, strictly be compliant, thus don't use the VendorOption tag, or other extensions, or non compliant mark names, and the like... it should be a best effort export that ensures compatibility with whatever other software. I would instead favor adding another export option, "export to GeoServer SLD", in which the code would add VendorOption and know what specific options GeoServer supports. I see that QGis is already using VendorOption in some places, but with values GeoServer does not understand... wondering, what would be the software that understands those extras? I am thinking maybe they have been added to allow a "export and re-import in QGis" round trip, making them a "export to QGis SLD" option? > > > About uom in Symbolizer, I think QGIS has to add it like GeoServer > http://docs.geoserver.org/latest/en/user/styling/sld-extensions/uom.html#example > uom is a standard attribute in SE 1.1, but GeoServer also allows its usage in SLD 1.0, making it a vendor extension in that context. When used in SE 1.1 GeoServer should understand it normally (within the limits of the standard units, pixel, meter, feet, I'm open to extend that list to include on screen mm within the context of a GeoServer targeted SLD export). Cheers Andrea -- == GeoServer Professional Services from the experts!
Re: [Qgis-developer] SLD export not compliant due to unit attribute in the root element
Hi Andrea, I'm the author of the commits that add a 'units' attribute to StyleLayerDescriptor element. https://github.com/qgis/QGIS/commit/b54b1598a6ba145a51aa266cde9282ae4d0378ad https://github.com/qgis/QGIS/commit/f7ce8b94344e7a7dd12fac2a90bd84df30b7e82f If you look at the code of these 2 commits, I didn't change anything about QGIS SLD interpretation. In the QGIS core, a 'units' attribute is used to defined the SLD default units for distance. But I didn't add this 'units' attribute for QGIS and QGIS Server SLD interpretation, I add these 'units' for GeoServer. I didn't used uomScale because of SLD has to be used for any DPI screen. So if a QGIS user made style in pixels, he has made the choice to have different rendering in different DPI screen. But if the user made style in mm on the screen, the stroke or line has to have the same size in different DPI screen. Can QGIS extend SLD by added it's own schema for defining units attribute ? Can we used a VendorOption, to specify mm on the screen like in GeoServer ? http://docs.geoserver.org/latest/en/user/styling/sld-extensions/label-obstacles.html About uom in Symbolizer, I think QGIS has to add it like GeoServer http://docs.geoserver.org/latest/en/user/styling/sld-extensions/uom.html#example Regards, René-Luc Le 23/07/2016 à 14:53, Andrea Aime a écrit : Hi, I'm looking into improving the SLD export, and stumbled into a schema violation that, if fixed, may cause other regression. In particular, the root element StyledLayerDescriptor contains a "units" attribute that is not part of the SLD/SE specification, and thus makes validation fail: http://www.opengis.net/sld"; xmlns:ogc="http://www.opengis.net/ogc"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; version="1.1.0" xmlns:xlink="http://www.w3.org/1999/xlink"; *units="mm" *xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd"; xmlns:se="http://www.opengis.net/se";> ... It's in particular the units="mm" element. Checking the git history I found it has been introduced by this commit: - b54b159 - rldhont mailto:rldh...@gmail.com>> 23-ott-2015 [BUGFIX] Set default units to mm in exportSld The default units in QgsMapRenderer is Millimeters. The default units in SLD is Pixel but exportSld does not convert all millimeters in pixels. We notes this bug by comparing default QGS Server rendering and rendering with the SLD generated by QGIS. To resolve it, we just have to add units to the document element. - The above comments seems to suggest something is actually using that attribute, but I'm not sure what. Mind, GeoServer can parse the file the same, but if users try to validate it (there is a validation button in the style editor), they will get the following error: "ine 2: cvc-complex-type.3.2.2: Attribute 'units' is not allowed to appear in element 'StyledLayerDescriptor'." Also, the attribute per se does nothing in a compliant client, since SLD 1.1 lacks the very concept of "on screen unit", the uom allowed are pixel (on screen), meter (on ground), feet (on ground). A SLD export trying to be compliant should convert mm to pixels assuming some DPI conversion factor (which means, making many changes around... bummer). I see there is already a uomScale in the conversion properties, but I see it's not used for point symbol sizes (as the commit message says.. I actually don't see it being used anywhere). Would it be ok to remove that attribute and use uomScale to properly adapt sizes from mm to px instead? Cheers Andrea -- == GeoServer Professional Services from the experts! Visit http://goo.gl/it488V for more information. == Ing. Andrea Aime @geowolf Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 Massarosa (LU) phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549 http://www.geo-solutions.it http://twitter.com/geosolutions_it *AVVERTENZE AI SENSI DEL D.Lgs. 196/2003* Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003. The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003
Re: [Qgis-developer] SLD export not compliant due to unit attribute in the root element
On Mon, Jul 25, 2016 at 9:12 AM, Alessandro Pasotti wrote: > Hi, > > I noticed the same 'uom' mm problem when I tested the SLD converting > routines used by GeoServer Explorer plugin a couple of months ago, thank > for bringing up this issue. > > Your proposed solution makes perfectly sense to me. > Good > > Did you check if is there already an issue on hub.qgis.org? > I did not, searched now, found one, but not in particular the one about units attribute not being schema compliant, more about the fact that units means nothing to a compliant client: https://hub.qgis.org/issues/7760 Cheers Andrea -- == GeoServer Professional Services from the experts! Visit http://goo.gl/it488V for more information. == Ing. Andrea Aime @geowolf Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 Massarosa (LU) phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549 http://www.geo-solutions.it http://twitter.com/geosolutions_it *AVVERTENZE AI SENSI DEL D.Lgs. 196/2003* Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003. The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc. --- ___ Qgis-developer mailing list Qgis-developer@lists.osgeo.org List info: http://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-developer
Re: [Qgis-developer] SLD export not compliant due to unit attribute in the root element
On Sat, Jul 23, 2016 at 2:53 PM, Andrea Aime wrote: > Hi, > I'm looking into improving the SLD export, and stumbled into a schema > violation > that, if fixed, may cause other regression. > In particular, the root element StyledLayerDescriptor contains a "units" > attribute that > is not part of the SLD/SE specification, and thus makes validation fail: > > > http://www.opengis.net/sld"; xmlns:ogc=" > http://www.opengis.net/ogc"; xmlns:xsi=" > http://www.w3.org/2001/XMLSchema-instance"; version="1.1.0" xmlns:xlink=" > http://www.w3.org/1999/xlink"; *units="mm" *xsi:schemaLocation=" > http://www.opengis.net/sld > http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd"; xmlns:se=" > http://www.opengis.net/se";> >... > > > It's in particular the units="mm" element. Checking the git history I > found it has been introduced by this commit: > > - > > b54b159 - rldhont 23-ott-2015 > [BUGFIX] Set default units to mm in exportSld > > The default units in QgsMapRenderer is Millimeters. The default units in > SLD > is Pixel but exportSld does not convert all millimeters in pixels. > > We notes this bug by comparing default QGS Server rendering and rendering > with > the SLD generated by QGIS. > > To resolve it, we just have to add units to the document element. > > - > > The above comments seems to suggest something is actually using that > attribute, but I'm not sure what. > > Mind, GeoServer can parse the file the same, but if users try to validate > it (there is a validation button in the style editor), they will get the > following error: > > "ine 2: cvc-complex-type.3.2.2: Attribute 'units' is not allowed to appear > in element 'StyledLayerDescriptor'." > > Also, the attribute per se does nothing in a compliant client, since SLD > 1.1 lacks the very concept of "on screen unit", the uom allowed > are pixel (on screen), meter (on ground), feet (on ground). > A SLD export trying to be compliant should convert mm to pixels assuming > some DPI conversion factor (which means, > making many changes around... bummer). I see there is already a uomScale > in the conversion properties, but I see it's not > used for point symbol sizes (as the commit message says.. I actually don't > see it being used anywhere). > > Would it be ok to remove that attribute and use uomScale to properly adapt > sizes from mm to px instead? > > Cheers > Andrea > > -- > == > GeoServer Professional Services from the experts! Visit > http://goo.gl/it488V for more information. > == > > Ing. Andrea Aime > @geowolf > Technical Lead > > GeoSolutions S.A.S. > Via di Montramito 3/A > 55054 Massarosa (LU) > phone: +39 0584 962313 > fax: +39 0584 1660272 > mob: +39 339 8844549 > > http://www.geo-solutions.it > http://twitter.com/geosolutions_it > > Hi, I noticed the same 'uom' mm problem when I tested the SLD converting routines used by GeoServer Explorer plugin a couple of months ago, thank for bringing up this issue. Your proposed solution makes perfectly sense to me. Did you check if is there already an issue on hub.qgis.org? -- Alessandro Pasotti w3: www.itopen.it ___ Qgis-developer mailing list Qgis-developer@lists.osgeo.org List info: http://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-developer
[Qgis-developer] SLD export not compliant due to unit attribute in the root element
Hi, I'm looking into improving the SLD export, and stumbled into a schema violation that, if fixed, may cause other regression. In particular, the root element StyledLayerDescriptor contains a "units" attribute that is not part of the SLD/SE specification, and thus makes validation fail: http://www.opengis.net/sld"; xmlns:ogc=" http://www.opengis.net/ogc"; xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"; version="1.1.0" xmlns:xlink=" http://www.w3.org/1999/xlink"; *units="mm" *xsi:schemaLocation=" http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd"; xmlns:se=" http://www.opengis.net/se";> ... It's in particular the units="mm" element. Checking the git history I found it has been introduced by this commit: - b54b159 - rldhont 23-ott-2015 [BUGFIX] Set default units to mm in exportSld The default units in QgsMapRenderer is Millimeters. The default units in SLD is Pixel but exportSld does not convert all millimeters in pixels. We notes this bug by comparing default QGS Server rendering and rendering with the SLD generated by QGIS. To resolve it, we just have to add units to the document element. - The above comments seems to suggest something is actually using that attribute, but I'm not sure what. Mind, GeoServer can parse the file the same, but if users try to validate it (there is a validation button in the style editor), they will get the following error: "ine 2: cvc-complex-type.3.2.2: Attribute 'units' is not allowed to appear in element 'StyledLayerDescriptor'." Also, the attribute per se does nothing in a compliant client, since SLD 1.1 lacks the very concept of "on screen unit", the uom allowed are pixel (on screen), meter (on ground), feet (on ground). A SLD export trying to be compliant should convert mm to pixels assuming some DPI conversion factor (which means, making many changes around... bummer). I see there is already a uomScale in the conversion properties, but I see it's not used for point symbol sizes (as the commit message says.. I actually don't see it being used anywhere). Would it be ok to remove that attribute and use uomScale to properly adapt sizes from mm to px instead? Cheers Andrea -- == GeoServer Professional Services from the experts! Visit http://goo.gl/it488V for more information. == Ing. Andrea Aime @geowolf Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 Massarosa (LU) phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549 http://www.geo-solutions.it http://twitter.com/geosolutions_it *AVVERTENZE AI SENSI DEL D.Lgs. 196/2003* Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003. The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc. --- ___ Qgis-developer mailing list Qgis-developer@lists.osgeo.org List info: http://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-developer