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
