Hi Oleksandr, It's not better, just different. WKT is for sharing data between different programs, even over a network. I designed this protocol for passing geospatial data within a single Python program (or distributed Python programs if you want) where it's not necessary to serialize between modules or functions.
I'm glad you enjoy Shapely :) On Wed, Jun 27, 2012 at 10:37 AM, Oleksandr Huziy <[email protected]> wrote: > Hi Sean, > > how is your protocol better than wkt? > > It is easier to create a geometry in shapely and then save it to shape file > using osgeo.ogr, so sometimes I use wkt or wkb to convert geometries from > shapely to GDAL. > > #create a polygon using shapely > p = Polygon(shell=points) > #print p.wkt > pGdal = ogr.CreateGeometryFromWkb(p.wkb) > > > BTW: great job with shapely, thank you > > Cheers > > -- > Oleksandr Huziy > > > 2012/6/27 Sean Gillies <[email protected]> >> >> Hi Christian, >> >> Have you looked at my Python geospatial data protocol doc? >> >> https://gist.github.com/2217756 >> >> This would be a more general and less Shapely-dependent way to >> represent geometries, if you like. >> >> You might also announce on the python-gis-sig group: >> >> >> https://groups.google.com/forum/?hl=en_US&fromgroups#!forum/python-gis-sig >> >> On Wed, Jun 27, 2012 at 1:19 AM, Christian Ledermann >> <[email protected]> wrote: >> > Hello, >> > I have a first working draft of a library that reads and writes kml >> > files on github: >> > https://github.com/cleder/fastkml >> > >> > Introduction >> > fastkml is a library to read, write and manipulate kml files. >> > The aims are to keep it simple and fast (using lxml if available). >> > Fast refers to the time you spend to write and read KML files >> > as well as the time you spend to get aquainted to the library or to >> > create KML objects. It provides a subset of KML and is aimed at >> > documents that can be read from multiple clients such as openlayers >> > and google maps rather than to give you all functionality that KML >> > on google earth provides. >> > >> > Geometries are handled as shapely objects. This is a restriction >> > that I can live with and you will seldom find KML files that implement >> > more complex geometries. >> > >> > Limitations >> > Geometries are limited to the geometry and multigeometry types shapely >> > provides (Point, LineString, Polygon, MultiPoint, MultiLineString, >> > MultiPolygon >> > and LinearRing). While KML allows for more abstract MultiGeometries >> > consisting of a combination of Points, LineStrings and LinearRings, >> > this is not supported in fastkml >> > >> > Usage >> > You can find more examples in the included tests.py file, here is a >> > quick overview: >> > >> > Build a KML from scratch: >> > Example how to build a simple KML file: >> > >> >>>> from fastkml import kml >> >>>> from shapely.geometry import Point, LineString, Polygon >> >>>> k = kml.KML() >> >>>> ns = '{http://www.opengis.net/kml/2.2}' >> >>>> d = kml.Document(ns, 'docid', 'doc name', 'doc description') >> >>>> f = kml.Folder(ns, 'fid', 'f name', 'f description') >> >>>> k.append(d) >> >>>> d.append(f) >> >>>> nf = kml.Folder(ns, 'nested-fid', 'nested f name', 'nested f >> >>>> description') >> >>>> f.append(nf) >> >>>> f2 = kml.Folder(ns, 'id2', 'name2', 'description2') >> >>>> d.append(f2) >> >>>> p = kml.Placemark(ns, 'id', 'name', 'description') >> >>>> p.geometry = Polygon([(0, 0, 0), (1, 1, 0), (1, 0, 1)]) >> >>>> f2.append(p) >> >>>> print k.to_string(prettyprint=True) >> > '<ns0:kml xmlns:ns0="http://www.opengis.net/kml/2.2"> >> > <ns0:Document id="docid"> >> > <ns0:name>doc name</ns0:name> >> > <ns0:description>doc description</ns0:description> >> > <ns0:visibility>1</ns0:visibility> >> > <ns0:open>0</ns0:open> >> > <ns0:Folder id="fid"> >> > <ns0:name>f name</ns0:name> >> > <ns0:description>f description</ns0:description> >> > <ns0:visibility>1</ns0:visibility> >> > <ns0:open>0</ns0:open> >> > <ns0:Folder id="nested-fid"> >> > <ns0:name>nested f name</ns0:name> >> > <ns0:description>nested f description</ns0:description> >> > <ns0:visibility>1</ns0:visibility> >> > <ns0:open>0</ns0:open> >> > </ns0:Folder> >> > </ns0:Folder> >> > <ns0:Folder id="id2"> >> > <ns0:name>name2</ns0:name> >> > <ns0:description>description2</ns0:description> >> > <ns0:visibility>1</ns0:visibility> >> > <ns0:open>0</ns0:open> >> > <ns0:Placemark id="id"> >> > <ns0:name>name</ns0:name> >> > <ns0:description>description</ns0:description> >> > <ns0:visibility>1</ns0:visibility> >> > <ns0:open>0</ns0:open> >> > <ns0:Polygon> >> > <ns0:outerBoundaryIs> >> > <ns0:LinearRing> >> > <ns0:coordinates>0.000000,0.000000,0.000000 >> > 1.000000,1.000000,0.000000 >> > 1.000000,0.000000,1.000000 >> > 0.000000,0.000000,0.000000 >> > </ns0:coordinates> >> > </ns0:LinearRing> >> > </ns0:outerBoundaryIs> >> > </ns0:Polygon> >> > </ns0:Placemark> >> > </ns0:Folder> >> > </ns0:Document> >> > </ns0:kml>' >> > Read a KML file >> > You can create a KML object by reading a KML file: >> > >> >>>> from fastkml import kml >> >>>> doc = """<?xml version="1.0" encoding="UTF-8"?> >> > ... <kml xmlns="http://www.opengis.net/kml/2.2"> >> > ... <Document> >> > ... <name>Document.kml</name> >> > ... <open>1</open> >> > ... <Style id="exampleStyleDocument"> >> > ... <LabelStyle> >> > ... <color>ff0000cc</color> >> > ... </LabelStyle> >> > ... </Style> >> > ... <Placemark> >> > ... <name>Document Feature 1</name> >> > ... <styleUrl>#exampleStyleDocument</styleUrl> >> > ... <Point> >> > ... <coordinates>-122.371,37.816,0</coordinates> >> > ... </Point> >> > ... </Placemark> >> > ... <Placemark> >> > ... <name>Document Feature 2</name> >> > ... <styleUrl>#exampleStyleDocument</styleUrl> >> > ... <Point> >> > ... <coordinates>-122.370,37.817,0</coordinates> >> > ... </Point> >> > ... </Placemark> >> > ... </Document> >> > ... </kml>""" >> >>>> k = kml.KML() >> >>>> k.from_string(doc) >> >>>> len(k.features()) >> > 1 >> >>>> len(k.features()[0].features()) >> > 2 >> >>>> k.features()[0].features()[1] >> > <fastkml.kml.Placemark object at 0x876a16c> >> >>>> k.features()[0].features()[1].description >> >>>> k.features()[0].features()[1].name >> > 'Document Feature 2' >> >>>> k.features()[0].features()[1].name = "ANOTHER NAME" >> >>>> print k.to_string(prettyprint=True) >> > <ns0:kml xmlns:ns0="http://www.opengis.net/kml/2.2"> >> > <ns0:Document> >> > <ns0:name>Document.kml</ns0:name> >> > <ns0:visibility>1</ns0:visibility> >> > <ns0:open>1</ns0:open> >> > <ns0:Style id="exampleStyleDocument"> >> > <ns0:LabelStyle> >> > <ns0:color>ff0000cc</ns0:color> >> > <ns0:scale>1.0</ns0:scale> >> > </ns0:LabelStyle> >> > </ns0:Style> >> > <ns0:Placemark> >> > <ns0:name>Document Feature 1</ns0:name> >> > <ns0:visibility>1</ns0:visibility> >> > <ns0:open>0</ns0:open> >> > <ns0:Point> >> > <ns0:coordinates>-122.371000,37.816000,0.000000</ns0:coordinates> >> > </ns0:Point> >> > </ns0:Placemark> >> > <ns0:Placemark> >> > <ns0:name>ANOTHER NAME</ns0:name> >> > <ns0:visibility>1</ns0:visibility> >> > <ns0:open>0</ns0:open> >> > <ns0:Point> >> > <ns0:coordinates>-122.370000,37.817000,0.000000</ns0:coordinates> >> > </ns0:Point> >> > </ns0:Placemark> >> > </ns0:Document> >> > </ns0:kml> >> > >> > >> > >> > -- >> > Best Regards, >> > >> > Christian Ledermann >> > >> > Nairobi - Kenya >> > Mobile : +254 702978914 >> > >> > <*)))>{ >> > >> > If you save the living environment, the biodiversity that we have left, >> > you will also automatically save the physical environment, too. But If >> > you only save the physical environment, you will ultimately lose both. >> > >> > 1) Don’t drive species to extinction >> > >> > 2) Don’t destroy a habitat that species rely on. >> > >> > 3) Don’t change the climate in ways that will result in the above. >> > >> > }<(((*> >> > _______________________________________________ >> > Community mailing list >> > [email protected] >> > http://lists.gispython.org/mailman/listinfo/community >> >> >> >> -- >> Sean Gillies >> _______________________________________________ >> Community mailing list >> [email protected] >> http://lists.gispython.org/mailman/listinfo/community > > > > _______________________________________________ > Community mailing list > [email protected] > http://lists.gispython.org/mailman/listinfo/community > -- Sean Gillies _______________________________________________ Community mailing list [email protected] http://lists.gispython.org/mailman/listinfo/community
