For a little project working on for Geograph (btw Second Birthday today!), that will end up producing quite complex (and repetitive) KML, I decided to take the plunge and create my own abstraction class.
There are already a few of these about, but I wanted something with just enough abstraction so don’t need xml in the php code, but without too much complexity, or a whole new syntax to learn. So the final output is basically a generic XML creation system, but tailored to KML generation, with a number of convenience methods for common bits of KML, (like outputting the right headers). This don’t do any schema enforcement, and assumes a good working knowledge of kml.
Anyway as the code is already GPL, thought would mention it here in case it useful to someone else.
Get the base class here (from the Geograph SVN repository)
There is also another file here, which extends basic the functionality, this is more specific to Geograph, but could still be useful.
And a few demo’s/tests used during development:
Demo1 – (view running demo – by default displays the KML, option to open in GE)
Demo2 – (view running demo)And for a real world use of the code (been in active use for a week now)
Eagle eyed viewers might notice it claims kml2.0 but then goes on to allow use of 2.1 features. Yes I know this is ‘bad’ but is with reason. I have found to my expense that using 2.1 as the version actually has a few undesirable effects, eg making the Document visible in My Places tree, can’t mix and match styleUrl and style (to have common style but with a unique icon), and a few other subtle things. Whereas GE seems to allow the new features in a 2.0 kml file, I guess this is the GE equivalent to quirks and strict mode. (disclaimer: it’s a while since I tested this, so might be old news, I really should run some real world tests to confirm this is still the case)
[...] nearby.org.uk blog GIS, maps, mapping, geo, UK, Geograph, PHP, Perl and more –: Visit nearby.org.uk Homepage :– « KML writing PHP Class [...]
[...] back to rewriting my kml class, I took the easy way out. I came across someone else’s kml writing class, it is nice, very nice, well thought out, easy to use, not too out of control, did what I needed – [...]
As I noted in the Crackfire Development Blog, if you want KMZ support, this class it has built in support for thi, by using the following class:
http://svn.geograph.org.uk/svn/trunk/libs/geograph/zip.class.php
which handles the ZIP compression