-
Notifications
You must be signed in to change notification settings - Fork 2
akidee/osmo
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
osmo: Populate a MongoDB collection with OpenStreetMap data
Features
- osmo populates a MongoDB database collection with all nodes, ways and relations
- Currently, only OSM XML (.osm) is supported
- It's just slightly slower than Osmosis (with Postgres)
- Prerequisites: see DEPENDENCY
- Building:
make
(A priority is it to make this work in both Mac OS and Linux!)
- Synopsis:
bin/osmo DATAFILE DATABASE.COLLECTION
- To add an index on the primary key:
mongo DATABASE --eval \
"printjson(db.COLLECTION.ensureIndex({ p: 1, id: 1 }, { unique: true, dropDups: true, background: true }))"
Data model
The data model supported by osmo is focussed on minimal data size and unification. Some principles:
- nodes, ways and relations are transformed to GeoObject instances to unify the concept and to simplify queries on only 1 collection
- Every geoObject has a key named "p" (prefix). It can have the values, "n" (node), "w" (way) or "r" (relation).
- keys for regular fields (user, timestamp, ...) are abbreviated to save space
- The geoObject primary key is [ 'p', 'id' ]
- Example for a GeoObject instance:
{
"_id" : ObjectId("4e3213dbe9b522a655e3f5ff"),
"c" : 4977984,
"id" : 318214,
"p" : "r",
"parts" : {
"list" : [
{
"p" : "n",
"id" : 319621296
},
{
"p" : "n",
"id" : 560090559
},
{
"p" : "n",
"id" : 292635574
},
{
"p" : "n",
"id" : 292635576
},
{
"p" : "n",
"id" : 245431191
},
{
"p" : "w",
"id" : 48289915
},
{
"p" : "w",
"id" : 49366289
},
...
],
"info" : [
{
"role" : "forward"
},
{
"role" : "forward"
},
{
"role" : ""
},
{
"role" : "forward"
},
{
"role" : ""
},
{
"role" : "forward"
},
{
"role" : "forward"
},
...
]
},
"t" : 1276427410,
"tags" : {
"network" : "VRT",
"operator" : "SWT",
"ref" : "4",
"route" : "bus",
"type" : "route"
},
"u" : {
"id" : 109925,
"name" : "WanMil"
},
"v" : 6
}
- "parts" is an ObjectView object that has always two properties: "list" (a list of GeoObject references) and "info" (that optionally holds information about the referenced objects in the same order). GeoObjects with p=n do not have parts, with p=w, parts are always references to nodes, with p=r parts can reference any type (node, way, relation).
Contribute
Take a look at TODO to see a list of priorized features that are still lacking.About
Populate a MongoDB collection with OpenStreetMap data
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published