=============== osm@spline Xapi =============== Aim ============ We like to rewrite some parts of the XApi needed for our own application. Our aim is not get a full implementation of the Xapi, but to answer only specific requests, at low latency. For this subset of Xapi we want completly cover the original api. Requests ============= This is a list of example requests, we want to optimize. * xapi.spline.de/api/0.6/node[amenity=*] * xapi.spline.de/api/0.6/node[highway=busstop] * xapi.spline.de/api/0.6/node[bbox=-6,50,2,61] * xapi.spline.de/api/0.6/node[amenity=hospital][bbox=-6,50,2,61] a more formal description ------------------------- We serve the node endpoint, but no others. We implment the tag based filtering, for only one tag and a bounding box. Dabase setup ============= We use postgres 9.* with postgis 1.5. Postgres 9.0 is used becaus we need some functions on hstores and postgis 1.5 is used for fancy geometry things. To setup a database you first need a runing postgres 9.0 instance. I hope you know how to do this. Use createdb osm to create a database with name osm. Use createlang plpgsql osm to add plpgsql to your database. If you want to create a database user do so: createuser Add hstore support for your database: psql -d osm < /share/contrib/hstore.sql Add postgis support for your database: psql -d osm < /share/contrib/postgis-1.5/postgis.sql Just do: psql -d osm < /share/contrib/postgis-1.5/spatial_ref_sys.sql Create the actual schema for osm data. For this step you need osmosis. If your osmosis build is correct there should be a directory named pacakge/scripts where you run: psql -d osm < pgsql_simple_schema_0.6.sql psql -d osm < pgsql_simple_schema_0.6_linestring.sql Optional/stil to test: psql -d osm < pgsql_simple_schema_0.6_action.sql psql -d osm < pgsql_simple_schema_0.6_bbox.sql For documentation on the schema read pgsql_simple.txt. Import data from xml with: osmosis --read-xml file="planet.osm.bz2" --wp host="localhost" password="TopSecretPassword" user="insertUserNameHere" database="osm" Before or after import you may want to create a index or two. Examples below: CREATE INDEX idx_nodes_tags ON nodes USING GIN(tags); CREATE INDEX idx_nodes_tags ON nodes USING GIST(tags); CREATE INDEX idx_ways_tags ON ways USING GIN(tags); CREATE INDEX idx_ways_tags ON ways USING GIST(tags); database shema (out dated) ================ We keep data in a highly specioaliced shema, that allows us to prevent tables growing to big. And supports our requests at maximum speed. | CREATE TABLE : ( | {bigint id} | {longitude float4}, | {latitude float4}, | {object varchar} | ) PRIMARY KEY id; Implmentation ============= Teilprobleme: .............. 1. Database import mögliche Technologien: * Osmosis- plugin * selbst in python (Protobuf consumer, async pgsql schreiber) 2. Web API .............. mögliche Technologien: * node.js