[geos-devel] how to construct geos geometry instances using python bindings

N.J. Hardebol nico.hardebol at falw.vu.nl
Wed Feb 28 16:51:46 EST 2007


Hello,

I'm a medium level ocassional developper with not too much experience with
python classes and especially not swig. I use python scripting a lot for
medium level scripting for processing of geographic oriented data. Thereto
I make use of gdal.ogr and geos libraries ported to python. Previously I
ran my code under linux, allowing to build from newest source codes.
Recently I moved code also to windows to interact also with ArcGIS, so
limitted by available bin + swig compilations.

I've two questions, both to do with the construction of new geos geometry
instances.

In first problem, I start with WKT or WKB geometry strings retrieved from
postgis database. Afterwards I want to parse them to geos Geometry
instances.
>>> geosgeom = geos.WKTReader(geos.GeometryFactory()).read(wktgeom)
This looks really awkward and as fact of the matter it doesn't build a
geos.Geometry but a geos.GeometryPtr.
So my Question1 is: How do i best build a geos Geometry from WKT-strings
using geos-python bindings?

Then I also would like to crop an existing geos Linestring1 with an
intersecting geos Polygon building a new geos Linestring2. So something
like  Linestring2 = Linestring1.crop(Polygon). My workaround is (1) check
whether intersect exists. (2) Find the intersection points between
Linestring1 and Polygon. (3) Build the new linestring2 from the
intersection-point vertices using WKTReader().
1) >>> if Linestring1.intersects(Geometry):
2) >>>      pnts = Linestring1.Intersection(Geometry)
3) >>>      Linestr2_wkt = 'LINESTRING ( %s %s , %s %s ) % ( pnts.GetX(0)

                         , pnts.GetY(0) , pnts.GetX(1) , pnts.GetY(1)  )
3) >>>      Linestring2 =
                  geos.WKTReader(geos.GeometryFactory()).read(Linestr2_wkt)

Question2: Is there a better way for building a new linestring by corpping
old one with polygon, instead of this work around. ANd if not, how do I
deal with GeometryPtr instead of Geometry, okay might be simple sub class
or pointer issue this guy is not familiar with.

thx in advance for any suggestions,

Nico Hardebol






More information about the geos-devel mailing list