The POI tools project is a collection of tools around Points of Interest. It is open source, the source code is available at http://gitorious.org/osm-poi-tools and Gentoo ebuilds were available. This is the main documentation page with further references.
Inactive project. Parts of this project are reused or replaced by OSMCouch.
The server side is based on MonetDB as DBMS, Sphinx as search engine and Django as web framework. See also #Used_software in the development section. The database schema is described at MonetDB/Schema, data import and diff updates are described at POI_tools/Importer. The API is documented at POI tools/API.
See POI_tools/Installation for installation instructions.
- How to make requests for things like ((amenity=pub) AND (microbrewery=yes)) or ((amenity=restaurant) AND (cuisine=italian))?
- The /API supports simple requests (one key-value pair), you may filter the result yourself. Or you use DBSlayer for advanced queries.
- What about a restaurant tagged "cuisine=italian;french"? (Semi-colon value separator)
- Values are split at semicolon, resulting in two tags. Whitespace will be considered part of the value, please do not add whitespace. The output will be all values joined by semicolon.
Different tags might be used for the same information. They could be converted to the tag that makes most sense. Done in the /Importer. Dropping tags like created_by, source, tiger:tlid.
Human readable tag formatting
- prefix, suffix, i.e. "hotel <name>"
- use Nominatim prefix translations
Problem: formatting is different in many countries
khtmllib's author is interested in displaying POIs. Finish Openlayers example and contact him afterwards.
This project was one of the accepted projects for GSoC 2010.
- MonetDB (database)
- Sphinx, MonetDB#Sphinx_search (fulltext search)
- Cherokee (web server)
- Cherokee/MonetDB_Handler_OSM (Cherokee handlers for OSM purposes by Stefan de Konink)
- Django (web framework)
- pyv8 (run V8 in Python)
Also done by the importer, using diff files, fetching diffs via Osmosis.
Will always be a Point.
Usually ways are LineStrings. Some ways might be Rings (closed way), some might be Polygons (closed way that makes an area).
Just try to build a polygon will exclude the Ring case. Find out by tag (see area elements in Map Features)? Or just try to build a polygon except for Ring tags and return LineString if it fails?
Relations can be Multipolygons, FeatureCollection (like the associatedStreet relation) or no geometry at all. (Missed some case? Tell me.)
Server side clustering
Have a look at OpenGastroMap source code.
- Return timezone, country, city for given longitude, latitude
- Return nearby streets and distance
Idea: use multiple SpatiaLite files:
The last two could also be done on the live DB.
opening hours parser
- static lists with pyv8