[Qgis-developer] Why is it not possible to extract the z value of a wkb geometry with PyQGIS while it is possible with ogr or Shapely ?

G. Allegri giohappy at gmail.com
Sat Oct 6 01:47:06 PDT 2012


Because Qgis geometries do not manage z data.

giovanni

Sent from Nexus
Il giorno 06/ott/2012 10:44, "Martin Laloux" <martin.laloux at gmail.com> ha
scritto:

> Hello,
> Why PyQGIS (which use the GEOS library) can not extract the z coordinate
> of a 3D object while it recognizes that the WKB geometry is 3D  ?
>
> For example, with a 3D point shapefile:
> mylayer = qgis.utils.iface.activeLayer()
> *mylayer.geometryType() == QGis.Point
> True*
> select the first object
> sel = mylayer.selectedFeatures()[0]
> geom = sel.geometry()
> *geom.wkbType() == QGis.WKBPoint
> False*
> *geom.wkbType() == QGis.WKBPoint25D*
> *True*
> but no z in
> *geom.asPoint()
> (202586,89818.4)*
> dir(geom.asPoint())
> ['__class__', ..., *'x', 'y*']
> str(geom.asPoint().wellKnownText())
> 'POINT(202585.879480043950024992 89818.376070138576324098)'
>
> *But if I use ogr or Shapely (also using the GEOS library) to treat the
> resulting geometry,** no problem with the z value** :*
>
> *With ogr:*
> from osgeo import ogr
> *wkb = geom.asWkb()*
> geom_ogr = ogr.CreateGeometryFromWkb(wkb)
> *geom_ogr.GetGeometryType() == ogr.wkbPoint25D
> True*
> and:
> dir(geom_ogr)
> ['AddGeometry',..., *'GetX', 'GetY', 'GetZ'*, 'Intersect',...]
> *geom_ogr.GetX(),geom_ogr.GetY(),geom_ogr.GetZ()
> (202585.87948004395, 89818.376070138576, 168.35000610351562)*
> geom_ogr.ExportToWkt()
> 'POINT (202585.879480043950025 89818.376070138576324 168.350006103515625)'
>
> *With Shapely*:
> from shapely.wkb import loads
> wkb_shap = loads(wkb)
> *wkb_shap.has_z
> True*
> and
> dir(wkb_shap)
> ['__array_interface__',...,'*coords*',...,  'wkt', '*x'*, 'xy', '*y*', '*z
> *']
> *list(wkb_shap.coords)
> [(202585.87948004395, 89818.376070138576, 168.35000610351562)]
> wkb_shap.x,wkb_shap.y,wkb_shap.z
> (202585.87948004395, 89818.376070138576, 168.35000610351562)*
> # but no z in WKT.
> wkb_shap.wkt
> 'POINT (202585.8794800439500250 89818.3760701385763241)'
>
> Therefore, the z value is  present in the geometry obtained with PyQGIS
> and it should be possible to to extract the z value. But it is beyond my
> skills because the qgis module is compiled (qgis.so)
>
> Thanks in advance
>
> _______________________________________________
> Qgis-developer mailing list
> Qgis-developer at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20121006/822d2ab0/attachment.html>


More information about the Qgis-developer mailing list