Discussion:
[Community] Inconsistent behavior across versions?
Juan Pablo Caram
2014-12-13 22:18:19 UTC
Permalink
Hi,

Could someone give me some light into this: I'm getting very different
behavior between versions/platforms for cascaded_union and unary_union. I
would like to know what it the expected/latest/correct behavior. These are
the two cases:

CASE 1
======

Os: Ubuntu 12.04
libgeos-c1: 3.2.2-3ubuntu1
shapely: 1.5.1
python: 2.7.3
cascaded_union([])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-4-0c768f786c71> in <module>()
----> 1 cascaded_union([])

/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
cascaded_union(self, geoms)
128 subs[i] = g._geom
129 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 130 return
geom_factory(lgeos.methods['cascaded_union'](collection))
131
132 def unary_union(self, geoms):

/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.pyc in
geom_factory(g, parent)
53 # Abstract geometry factory for use with topological methods
below

54 if not g:
---> 55 raise ValueError("No Shapely geometry can be created from
null value")
56 ob = BaseGeometry()
57 geom_type = geometry_type_name(g)

ValueError: No Shapely geometry can be created from null value
unary_union([])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-6-9089513baa4e> in <module>()
----> 1 unary_union([])

/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in unary_union(self,
geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()

KeyError: 'unary_union'
cascaded_union([Point(0,0)])
<shapely.geometry.point.Point at 0x201d510>
unary_union([Point(0,0)])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-9-858a4018548e> in <module>()
----> 1 unary_union([Point(0,0)])

/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in unary_union(self,
geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()

KeyError: 'unary_union'


CASE 2:
=======

Os: Windows 7
python: 2.7.6
shapely: 1.3.0 (Installer came with geos)
cascaded_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708830>
unary_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708ab0>



In CASE 1, everything is newer except for the python version. Has the
behavior of shapely/geos changed?

Thank You,

JP
Sean Gillies
2014-12-15 17:15:51 UTC
Permalink
Hi JP,

As far as I can tell, the main difference between your cases is that in
case 2, the included GEOS lib has a version >= 3.3. GEOS 3.2.2 (which is
4.5 years old, by the way) does not support unary union.

See https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L721
<https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L72>

I admit that the KeyError is not the most helpful of errors. NotSupported
might be bettter. I'll create a new issue in the tracker.
Post by Juan Pablo Caram
Hi,
Could someone give me some light into this: I'm getting very different
behavior between versions/platforms for cascaded_union and unary_union. I
would like to know what it the expected/latest/correct behavior. These are
CASE 1
======
Os: Ubuntu 12.04
libgeos-c1: 3.2.2-3ubuntu1
shapely: 1.5.1
python: 2.7.3
cascaded_union([])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-4-0c768f786c71> in <module>()
----> 1 cascaded_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
cascaded_union(self, geoms)
128 subs[i] = g._geom
129 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 130 return
geom_factory(lgeos.methods['cascaded_union'](collection))
131
/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.pyc in
geom_factory(g, parent)
53 # Abstract geometry factory for use with topological methods
below
---> 55 raise ValueError("No Shapely geometry can be created from
null value")
56 ob = BaseGeometry()
57 geom_type = geometry_type_name(g)
ValueError: No Shapely geometry can be created from null value
unary_union([])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-6-9089513baa4e> in <module>()
----> 1 unary_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
cascaded_union([Point(0,0)])
<shapely.geometry.point.Point at 0x201d510>
unary_union([Point(0,0)])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-9-858a4018548e> in <module>()
----> 1 unary_union([Point(0,0)])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
=======
Os: Windows 7
python: 2.7.6
shapely: 1.3.0 (Installer came with geos)
cascaded_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708830>
unary_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708ab0>
In CASE 1, everything is newer except for the python version. Has the
behavior of shapely/geos changed?
Thank You,
JP
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
Juan Pablo Caram
2014-12-15 18:33:02 UTC
Permalink
Hi Sean,

Thanks for your response. What really concerns me here is that in case 1
(Newer GEOS and shapely) I cannot call cascaded_union (or unary_union) with
an empty list. I could on earlier versions.

Thanks,

JP
Post by Sean Gillies
Hi JP,
As far as I can tell, the main difference between your cases is that in
case 2, the included GEOS lib has a version >= 3.3. GEOS 3.2.2 (which is
4.5 years old, by the way) does not support unary union.
See https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L721
<https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L72>
I admit that the KeyError is not the most helpful of errors. NotSupported
might be bettter. I'll create a new issue in the tracker.
Post by Juan Pablo Caram
Hi,
Could someone give me some light into this: I'm getting very different
behavior between versions/platforms for cascaded_union and unary_union. I
would like to know what it the expected/latest/correct behavior. These are
CASE 1
======
Os: Ubuntu 12.04
libgeos-c1: 3.2.2-3ubuntu1
shapely: 1.5.1
python: 2.7.3
cascaded_union([])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-4-0c768f786c71> in <module>()
----> 1 cascaded_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
cascaded_union(self, geoms)
128 subs[i] = g._geom
129 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 130 return
geom_factory(lgeos.methods['cascaded_union'](collection))
131
/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.pyc in
geom_factory(g, parent)
53 # Abstract geometry factory for use with topological methods
below
---> 55 raise ValueError("No Shapely geometry can be created from
null value")
56 ob = BaseGeometry()
57 geom_type = geometry_type_name(g)
ValueError: No Shapely geometry can be created from null value
unary_union([])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-6-9089513baa4e> in <module>()
----> 1 unary_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
cascaded_union([Point(0,0)])
<shapely.geometry.point.Point at 0x201d510>
unary_union([Point(0,0)])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-9-858a4018548e> in <module>()
----> 1 unary_union([Point(0,0)])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
=======
Os: Windows 7
python: 2.7.6
shapely: 1.3.0 (Installer came with geos)
cascaded_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708830>
unary_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708ab0>
In CASE 1, everything is newer except for the python version. Has the
behavior of shapely/geos changed?
Thank You,
JP
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
Sean Gillies
2014-12-15 18:51:08 UTC
Permalink
JP,

Actually, you can call unary_union with an empty list in the latest Shapely.
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely
shapely.__version__
'1.5.1'
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely.geos
shapely.geos.geos_version
(3, 4, 2)
Post by Juan Pablo Caram
Post by Sean Gillies
from shapely.ops import unary_union
unary_union([])
<shapely.geometry.collection.GeometryCollection object at 0x10c3b6050>

In your case, the KeyError gets raised first (I believe because your GEOS
library is too old). Because cascaded_union has been aliased to unary_union
(in Shapely 1.4+), it's the same story there.
Post by Juan Pablo Caram
Hi Sean,
Thanks for your response. What really concerns me here is that in case 1
(Newer GEOS and shapely) I cannot call cascaded_union (or unary_union) with
an empty list. I could on earlier versions.
Thanks,
JP
Post by Sean Gillies
Hi JP,
As far as I can tell, the main difference between your cases is that in
case 2, the included GEOS lib has a version >= 3.3. GEOS 3.2.2 (which is
4.5 years old, by the way) does not support unary union.
See https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L721
<https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L72>
I admit that the KeyError is not the most helpful of errors. NotSupported
might be bettter. I'll create a new issue in the tracker.
Hi,
Could someone give me some light into this: I'm getting very different
behavior between versions/platforms for cascaded_union and unary_union. I
would like to know what it the expected/latest/correct behavior. These are
CASE 1
======
Os: Ubuntu 12.04
libgeos-c1: 3.2.2-3ubuntu1
shapely: 1.5.1
python: 2.7.3
cascaded_union([])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-4-0c768f786c71> in <module>()
----> 1 cascaded_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
cascaded_union(self, geoms)
128 subs[i] = g._geom
129 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 130 return
geom_factory(lgeos.methods['cascaded_union'](collection))
131
/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.pyc in
geom_factory(g, parent)
53 # Abstract geometry factory for use with topological methods
below
---> 55 raise ValueError("No Shapely geometry can be created
from null value")
56 ob = BaseGeometry()
57 geom_type = geometry_type_name(g)
ValueError: No Shapely geometry can be created from null value
unary_union([])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-6-9089513baa4e> in <module>()
----> 1 unary_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
cascaded_union([Point(0,0)])
<shapely.geometry.point.Point at 0x201d510>
unary_union([Point(0,0)])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-9-858a4018548e> in <module>()
----> 1 unary_union([Point(0,0)])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
=======
Os: Windows 7
python: 2.7.6
shapely: 1.3.0 (Installer came with geos)
cascaded_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708830>
unary_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708ab0>
In CASE 1, everything is newer except for the python version. Has the
behavior of shapely/geos changed?
Thank You,
JP
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
Juan Pablo Caram
2014-12-15 20:10:26 UTC
Permalink
Sean,
I seems that it's all about a version of GEOS that it's too old. I will try
upgrading to the latest and try again.
Thanks a lot!
JP
Post by Sean Gillies
JP,
Actually, you can call unary_union with an empty list in the latest Shapely.
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely
shapely.__version__
'1.5.1'
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely.geos
shapely.geos.geos_version
(3, 4, 2)
Post by Juan Pablo Caram
Post by Sean Gillies
from shapely.ops import unary_union
unary_union([])
<shapely.geometry.collection.GeometryCollection object at 0x10c3b6050>
In your case, the KeyError gets raised first (I believe because your GEOS
library is too old). Because cascaded_union has been aliased to unary_union
(in Shapely 1.4+), it's the same story there.
Post by Juan Pablo Caram
Hi Sean,
Thanks for your response. What really concerns me here is that in case 1
(Newer GEOS and shapely) I cannot call cascaded_union (or unary_union) with
an empty list. I could on earlier versions.
Thanks,
JP
Post by Sean Gillies
Hi JP,
As far as I can tell, the main difference between your cases is that in
case 2, the included GEOS lib has a version >= 3.3. GEOS 3.2.2 (which is
4.5 years old, by the way) does not support unary union.
See
https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L721
<https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L72>
I admit that the KeyError is not the most helpful of errors.
NotSupported might be bettter. I'll create a new issue in the tracker.
Hi,
Could someone give me some light into this: I'm getting very different
behavior between versions/platforms for cascaded_union and unary_union. I
would like to know what it the expected/latest/correct behavior. These are
CASE 1
======
Os: Ubuntu 12.04
libgeos-c1: 3.2.2-3ubuntu1
shapely: 1.5.1
python: 2.7.3
cascaded_union([])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-4-0c768f786c71> in <module>()
----> 1 cascaded_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
cascaded_union(self, geoms)
128 subs[i] = g._geom
129 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 130 return
geom_factory(lgeos.methods['cascaded_union'](collection))
131
/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.pyc in
geom_factory(g, parent)
53 # Abstract geometry factory for use with topological
methods below
---> 55 raise ValueError("No Shapely geometry can be created
from null value")
56 ob = BaseGeometry()
57 geom_type = geometry_type_name(g)
ValueError: No Shapely geometry can be created from null value
unary_union([])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-6-9089513baa4e> in <module>()
----> 1 unary_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
cascaded_union([Point(0,0)])
<shapely.geometry.point.Point at 0x201d510>
unary_union([Point(0,0)])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-9-858a4018548e> in <module>()
----> 1 unary_union([Point(0,0)])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
=======
Os: Windows 7
python: 2.7.6
shapely: 1.3.0 (Installer came with geos)
cascaded_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708830>
unary_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708ab0>
In CASE 1, everything is newer except for the python version. Has the
behavior of shapely/geos changed?
Thank You,
JP
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
Juan Pablo Caram
2014-12-27 03:33:53 UTC
Permalink
Hi Sean,

I've been finding more problems having to do with newer versions of Shapely
with older versions of GEOS. Please look at the following:

In[23]: from shapely.wkt import dumps
In[24]: from shapely.geometry import Point
In[25]: dumps(Point(0,0))
Traceback (most recent call last):
File
"/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py",
line 2883, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-25-6b5b1cef3aeb>", line 1, in <module>
dumps(Point(0,0))
File "/usr/local/lib/python2.7/dist-packages/shapely/wkt.py", line 22, in
dumps
return geos.WKTWriter(geos.lgeos, trim=trim, **kw).write(ob)
File "/usr/local/lib/python2.7/dist-packages/shapely/geos.py", line 309,
in __init__
setattr(self, name, applied_settings[name])
File "/usr/local/lib/python2.7/dist-packages/shapely/geos.py", line 317,
in __setattr__
(self.__class__.__name__, name))
AttributeError: 'WKTWriter' object has no attribute 'trim'

My environment is:

Shapely 1.5.1
GEOS (3, 2, 2)

I understand that my version of GEOS is quite old, but the problem is that
upgrading Shapely and keeping GEOS is breaking things. Can you confirm?
This is quite problematic when trying to install software which requires
Shapely. For example on Ubuntu, if I install the latest available Shapely
and the latest available GEOS I run into this situation, which didn't
happen with older versions of Shapely.

Perhaps the way to go about this is to establish which is the minimum
version of GEOS required in a given version of Shapely and have Shapely
completely fail as early as possible (ideally on installation or on import
maybe?).

Thanks,

JP
Post by Juan Pablo Caram
Sean,
I seems that it's all about a version of GEOS that it's too old. I will
try upgrading to the latest and try again.
Thanks a lot!
JP
Post by Sean Gillies
JP,
Actually, you can call unary_union with an empty list in the latest Shapely.
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely
shapely.__version__
'1.5.1'
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely.geos
shapely.geos.geos_version
(3, 4, 2)
Post by Juan Pablo Caram
Post by Sean Gillies
from shapely.ops import unary_union
unary_union([])
<shapely.geometry.collection.GeometryCollection object at 0x10c3b6050>
In your case, the KeyError gets raised first (I believe because your GEOS
library is too old). Because cascaded_union has been aliased to unary_union
(in Shapely 1.4+), it's the same story there.
Post by Juan Pablo Caram
Hi Sean,
Thanks for your response. What really concerns me here is that in case 1
(Newer GEOS and shapely) I cannot call cascaded_union (or unary_union) with
an empty list. I could on earlier versions.
Thanks,
JP
Post by Sean Gillies
Hi JP,
As far as I can tell, the main difference between your cases is that in
case 2, the included GEOS lib has a version >= 3.3. GEOS 3.2.2 (which is
4.5 years old, by the way) does not support unary union.
See
https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L721
<https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L72>
I admit that the KeyError is not the most helpful of errors.
NotSupported might be bettter. I'll create a new issue in the tracker.
Hi,
Could someone give me some light into this: I'm getting very different
behavior between versions/platforms for cascaded_union and unary_union. I
would like to know what it the expected/latest/correct behavior. These are
CASE 1
======
Os: Ubuntu 12.04
libgeos-c1: 3.2.2-3ubuntu1
shapely: 1.5.1
python: 2.7.3
cascaded_union([])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-4-0c768f786c71> in <module>()
----> 1 cascaded_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
cascaded_union(self, geoms)
128 subs[i] = g._geom
129 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 130 return
geom_factory(lgeos.methods['cascaded_union'](collection))
131
/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.pyc in
geom_factory(g, parent)
53 # Abstract geometry factory for use with topological
methods below
---> 55 raise ValueError("No Shapely geometry can be created
from null value")
56 ob = BaseGeometry()
57 geom_type = geometry_type_name(g)
ValueError: No Shapely geometry can be created from null value
unary_union([])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-6-9089513baa4e> in <module>()
----> 1 unary_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
cascaded_union([Point(0,0)])
<shapely.geometry.point.Point at 0x201d510>
unary_union([Point(0,0)])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-9-858a4018548e> in <module>()
----> 1 unary_union([Point(0,0)])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
=======
Os: Windows 7
python: 2.7.6
shapely: 1.3.0 (Installer came with geos)
cascaded_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708830>
unary_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708ab0>
In CASE 1, everything is newer except for the python version. Has the
behavior of shapely/geos changed?
Thank You,
JP
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
Sean Gillies
2014-12-28 05:53:05 UTC
Permalink
Hi JP,

I'd love to be able to prevent this kind of breakage at installation. I've
created https://github.com/Toblerity/Shapely/issues/218 to track the issue
and welcome your comments there.
Post by Juan Pablo Caram
Hi Sean,
I've been finding more problems having to do with newer versions of
In[23]: from shapely.wkt import dumps
In[24]: from shapely.geometry import Point
In[25]: dumps(Point(0,0))
File
"/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py",
line 2883, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-25-6b5b1cef3aeb>", line 1, in <module>
dumps(Point(0,0))
File "/usr/local/lib/python2.7/dist-packages/shapely/wkt.py", line 22,
in dumps
return geos.WKTWriter(geos.lgeos, trim=trim, **kw).write(ob)
File "/usr/local/lib/python2.7/dist-packages/shapely/geos.py", line 309,
in __init__
setattr(self, name, applied_settings[name])
File "/usr/local/lib/python2.7/dist-packages/shapely/geos.py", line 317,
in __setattr__
(self.__class__.__name__, name))
AttributeError: 'WKTWriter' object has no attribute 'trim'
Shapely 1.5.1
GEOS (3, 2, 2)
I understand that my version of GEOS is quite old, but the problem is that
upgrading Shapely and keeping GEOS is breaking things. Can you confirm?
This is quite problematic when trying to install software which requires
Shapely. For example on Ubuntu, if I install the latest available Shapely
and the latest available GEOS I run into this situation, which didn't
happen with older versions of Shapely.
Perhaps the way to go about this is to establish which is the minimum
version of GEOS required in a given version of Shapely and have Shapely
completely fail as early as possible (ideally on installation or on import
maybe?).
Thanks,
JP
Post by Juan Pablo Caram
Sean,
I seems that it's all about a version of GEOS that it's too old. I will
try upgrading to the latest and try again.
Thanks a lot!
JP
Post by Sean Gillies
JP,
Actually, you can call unary_union with an empty list in the latest Shapely.
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely
shapely.__version__
'1.5.1'
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely.geos
shapely.geos.geos_version
(3, 4, 2)
Post by Juan Pablo Caram
Post by Sean Gillies
from shapely.ops import unary_union
unary_union([])
<shapely.geometry.collection.GeometryCollection object at 0x10c3b6050>
In your case, the KeyError gets raised first (I believe because your
GEOS library is too old). Because cascaded_union has been aliased to
unary_union (in Shapely 1.4+), it's the same story there.
Post by Juan Pablo Caram
Hi Sean,
Thanks for your response. What really concerns me here is that in case
1 (Newer GEOS and shapely) I cannot call cascaded_union (or unary_union)
with an empty list. I could on earlier versions.
Thanks,
JP
Post by Sean Gillies
Hi JP,
As far as I can tell, the main difference between your cases is that
in case 2, the included GEOS lib has a version >= 3.3. GEOS 3.2.2 (which is
4.5 years old, by the way) does not support unary union.
See
https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L721
<https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L72>
I admit that the KeyError is not the most helpful of errors.
NotSupported might be bettter. I'll create a new issue in the tracker.
Hi,
Could someone give me some light into this: I'm getting very
different behavior between versions/platforms for cascaded_union and
unary_union. I would like to know what it the expected/latest/correct
CASE 1
======
Os: Ubuntu 12.04
libgeos-c1: 3.2.2-3ubuntu1
shapely: 1.5.1
python: 2.7.3
cascaded_union([])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-4-0c768f786c71> in <module>()
----> 1 cascaded_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
cascaded_union(self, geoms)
128 subs[i] = g._geom
129 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 130 return
geom_factory(lgeos.methods['cascaded_union'](collection))
131
/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.pyc in
geom_factory(g, parent)
53 # Abstract geometry factory for use with topological
methods below
---> 55 raise ValueError("No Shapely geometry can be created
from null value")
56 ob = BaseGeometry()
57 geom_type = geometry_type_name(g)
ValueError: No Shapely geometry can be created from null value
unary_union([])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-6-9089513baa4e> in <module>()
----> 1 unary_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
cascaded_union([Point(0,0)])
<shapely.geometry.point.Point at 0x201d510>
unary_union([Point(0,0)])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-9-858a4018548e> in <module>()
----> 1 unary_union([Point(0,0)])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
=======
Os: Windows 7
python: 2.7.6
shapely: 1.3.0 (Installer came with geos)
cascaded_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708830>
unary_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708ab0>
In CASE 1, everything is newer except for the python version. Has the
behavior of shapely/geos changed?
Thank You,
JP
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
Juan Pablo Caram
2014-12-28 17:15:28 UTC
Permalink
Thanks Sean. I already posted on the issue.
JP
Post by Sean Gillies
Hi JP,
I'd love to be able to prevent this kind of breakage at installation. I've
created https://github.com/Toblerity/Shapely/issues/218 to track the
issue and welcome your comments there.
Post by Juan Pablo Caram
Hi Sean,
I've been finding more problems having to do with newer versions of
In[23]: from shapely.wkt import dumps
In[24]: from shapely.geometry import Point
In[25]: dumps(Point(0,0))
File
"/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py",
line 2883, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-25-6b5b1cef3aeb>", line 1, in <module>
dumps(Point(0,0))
File "/usr/local/lib/python2.7/dist-packages/shapely/wkt.py", line 22,
in dumps
return geos.WKTWriter(geos.lgeos, trim=trim, **kw).write(ob)
File "/usr/local/lib/python2.7/dist-packages/shapely/geos.py", line
309, in __init__
setattr(self, name, applied_settings[name])
File "/usr/local/lib/python2.7/dist-packages/shapely/geos.py", line
317, in __setattr__
(self.__class__.__name__, name))
AttributeError: 'WKTWriter' object has no attribute 'trim'
Shapely 1.5.1
GEOS (3, 2, 2)
I understand that my version of GEOS is quite old, but the problem is
that upgrading Shapely and keeping GEOS is breaking things. Can you
confirm? This is quite problematic when trying to install software which
requires Shapely. For example on Ubuntu, if I install the latest available
Shapely and the latest available GEOS I run into this situation, which
didn't happen with older versions of Shapely.
Perhaps the way to go about this is to establish which is the minimum
version of GEOS required in a given version of Shapely and have Shapely
completely fail as early as possible (ideally on installation or on import
maybe?).
Thanks,
JP
Post by Juan Pablo Caram
Sean,
I seems that it's all about a version of GEOS that it's too old. I will
try upgrading to the latest and try again.
Thanks a lot!
JP
Post by Sean Gillies
JP,
Actually, you can call unary_union with an empty list in the latest Shapely.
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely
shapely.__version__
'1.5.1'
Post by Juan Pablo Caram
Post by Sean Gillies
import shapely.geos
shapely.geos.geos_version
(3, 4, 2)
Post by Juan Pablo Caram
Post by Sean Gillies
from shapely.ops import unary_union
unary_union([])
<shapely.geometry.collection.GeometryCollection object at 0x10c3b6050>
In your case, the KeyError gets raised first (I believe because your
GEOS library is too old). Because cascaded_union has been aliased to
unary_union (in Shapely 1.4+), it's the same story there.
Post by Juan Pablo Caram
Hi Sean,
Thanks for your response. What really concerns me here is that in case
1 (Newer GEOS and shapely) I cannot call cascaded_union (or unary_union)
with an empty list. I could on earlier versions.
Thanks,
JP
Post by Sean Gillies
Hi JP,
As far as I can tell, the main difference between your cases is that
in case 2, the included GEOS lib has a version >= 3.3. GEOS 3.2.2 (which is
4.5 years old, by the way) does not support unary union.
See
https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L721
<https://github.com/Toblerity/Shapely/blob/master/shapely/geos.py#L72>
I admit that the KeyError is not the most helpful of errors.
NotSupported might be bettter. I'll create a new issue in the tracker.
Hi,
Could someone give me some light into this: I'm getting very
different behavior between versions/platforms for cascaded_union and
unary_union. I would like to know what it the expected/latest/correct
CASE 1
======
Os: Ubuntu 12.04
libgeos-c1: 3.2.2-3ubuntu1
shapely: 1.5.1
python: 2.7.3
cascaded_union([])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-4-0c768f786c71> in <module>()
----> 1 cascaded_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
cascaded_union(self, geoms)
128 subs[i] = g._geom
129 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 130 return
geom_factory(lgeos.methods['cascaded_union'](collection))
131
/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.pyc in
geom_factory(g, parent)
53 # Abstract geometry factory for use with topological
methods below
---> 55 raise ValueError("No Shapely geometry can be created
from null value")
56 ob = BaseGeometry()
57 geom_type = geometry_type_name(g)
ValueError: No Shapely geometry can be created from null value
unary_union([])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-6-9089513baa4e> in <module>()
----> 1 unary_union([])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
cascaded_union([Point(0,0)])
<shapely.geometry.point.Point at 0x201d510>
unary_union([Point(0,0)])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/jpcaram/flatcam/<ipython-input-9-858a4018548e> in <module>()
----> 1 unary_union([Point(0,0)])
/usr/local/lib/python2.7/dist-packages/shapely/ops.pyc in
unary_union(self, geoms)
146 subs[i] = g._geom
147 collection = lgeos.GEOSGeom_createCollection(6, subs, L)
--> 148 return
geom_factory(lgeos.methods['unary_union'](collection))
149
150 operator = CollectionOperator()
KeyError: 'unary_union'
=======
Os: Windows 7
python: 2.7.6
shapely: 1.3.0 (Installer came with geos)
cascaded_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708830>
unary_union([])
<shapely.geometry.collection.GeometryCollection at 0x7708ab0>
In CASE 1, everything is newer except for the python version. Has
the behavior of shapely/geos changed?
Thank You,
JP
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
--
Sean Gillies
_______________________________________________
Community mailing list
http://lists.gispython.org/mailman/listinfo/community
Loading...