Or is it a WorldMill bug? Problem looks like it's in the default object
hook. Can you remove the Zope dependencies and provide me with code and
data that exposes the bug?

Sean

Jan van der Ven wrote:
> Dear list,
>  
>  
> I have created an External method in plone that reads a shapefile containing
> linestring geometries. I want to convert those to polygons. I use WorldMill
> 0.1 and Shapely-1.0.5.
>  
> When I use the object_hook like this:
>   c = w['shapefile']
>   c.object_hook = shapely_feature
>   for f in c:
>     try:
>       if f.properties['ID']!='':
>         # look up the object through the catalog
>         for brain in catalog(portal_type='Thing',
> Title='"'+f.properties['ID']+'"'):
>           d=brain.getObject()
>           LOG('Bisk2008', INFO, brain.Title)
>         if d !=None:
>           geo=IGeoreferenced(d)
>           coords=[]
>           l=f.geometry.coordsf):
>           for i in range(len(l)):)
>             coords.append(l[i])
>           # reverse back to point 0 to create a polygon
>           for i in range(len(l)-2, -1, -1):
>             coords.append(l[i])
>           poly_coords=[]
>           poly_coords.append(tuple(coords))
>           geo.setGeoInterface('Polygon', poly_coords)
>     except:
>       LOG('project', INFO, "Error with %s" % brain.Title)
> 
> The following error is raised:
> 2008-08-28T10:04:02 ERROR Zope.SiteErrorLog 
> Traceback (innermost last):
>   Module ZPublisher.Publish, line 119, in publish
>   Module ZPublisher.mapply, line 88, in mapply
>   Module ZPublisher.Publish, line 42, in call_object
>   Module Products.ExternalMethod.ExternalMethod, line 231, in __call__
>    - __traceback_info__: ((<PloneSite at /project>,), {}, None)
>   Module /home/plone/project/parts/zope2/Extensions/egeo.py, line 38, in
> importDempingGeometry
>   Module mill.collection, line 105, in mill.collection.Iterator.__next__
> (src/mill/collection.c:%u)
>   Module mill.collection, line 149, in
> mill.collection.Iterator._marshal_feature (src/mill/collectio
> n.c:%u)
>   Module /home/plone/project/parts/zope2/Extensions/egeo.py, line 13, in
> shapely_feature
>   Module shapely.wkb, line 17, in loads
> ReadingError: Could not create geometry because of errors while reading
> input.
> 
> But the loop had handled 4299 features successfully before this happened.
>  
> If I redo the code using some of shapely's more basic functions, without
> hooking it into the shapely_feature:
>  
>   c = w['shapefile']
> #  c.object_hook = shapely_feature
>   for f in c:
>     if f.properties['ID']!='':
>       # look up the object through the catalog
>       for brain in catalog(portal_type='Thing',
> Title='"'+f.properties['ID']+'"'):
>         d=brain.getObject()
>         LOG('project', INFO, brain.Title)
>       if d !=None:
>         geo=IGeoreferenced(d)
>         geom = lgeos.GEOSGeomFromWKB_buf(c_char_p(f.geometry),
> c_size_t(len(f.geometry)))
>         if geom:
>           shapely_geom = geom_factory(geom)
>           coords=[]
>           l=shapely_geom.coords
>           for i in range(len(l)):
>             coords.append(l[i])
>           # reverse back to point 0 to create a polygon
>           for i in range(len(l)-2, -1, -1):
>             coords.append(l[i])
>           poly_coords=[]
>           poly_coords.append(tuple(coords))
>           geo.setGeoInterface('Polygon', poly_coords)
> 
> Then the whole shape file (4368 features) is processed without errors.
>  
>  
> 
> --
> 
> Jan H. van der Ven
> 
>  
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Community mailing list
> [email protected]
> http://lists.gispython.org/mailman/listinfo/community

_______________________________________________
Community mailing list
[email protected]
http://lists.gispython.org/mailman/listinfo/community

Reply via email to