A couple of days I was doing some work on BeWelcome, updating some code to fetch geo data from Geonames.org. Our old code had been using a mixture of a spaf maps class and php functions and trying to get it to work properly seemed to demand quite a bit of tinkering - plus, there was the chance I might break something. I then had a look at the Geonames site and there are quite a few different libraries for querying Geonames - but nothing in plain PHP. However, looking at the documentation of their API it didn't seem like it would be very hard to knock something up - so that's what I did.
After about 2 hours of coding, I had some very basic classes that provide the most useful functionality of Geonames (useful for BeWelcome anyway): doing a fulltext wildcard search, fetching details for one specific location, and fetching hierarchies of locations. The library provides some static functions for generating location objects, and these location objects can then in turn be worked with using some of the same methods that the library provides (such as getting child locations or parent locations).
The usage is currently extremely simple - some examples:
// searching for a location $results = GeoNamesService::search($searchterm, $rowcount /* optional, defaults to 100 */); // fetching parent hierarchy for a location $hierarchy = GeoNamesService::hierarchy($id); // getting the parent of an existing GeoNamesObject $parent = $geo_object->getParent();
As you can probably guess, the main reasoning was taking out the boilerplate code and removing the stuff we just didn't use. As a consequence, this library doesn't currently offer that much extra functionality. This will be built in later though, so you're able to use some of the options when searching, for instance. Also, a number of the other ways of interacting with Geonames are worth looking at, like finding a location by postcode.
After I had spent a bit of time on the project and got it to a working basic (including some unit-tests), I figured I'd breathe some life into it and so I put it on GitHub - so anyone can take it and use it if they have a need for it. It's available here: PHP Geonames Library and the license is a GPL v.3 so you can just grab and use in any OS project as you see fit.