[OSM-talk] Street/POI Index from OSM data

Jukka Rahkonen jukka.rahkonen at latuviitta.fi
Fri Sep 28 18:37:21 BST 2012


Alex Rollin <alex.rollin <at> gmail.com> writes:

> 
> 
> Hello,
> 
> 
> I am rather new to OSM data.  I've enjoyed doing edits on the map and 
now I'd
like to start learning how to arrange it on a printed page.
> 
> I know there are lots and lots of tools out there.
> 
> 
> Could I receive a few recommendations for getting some text data out?
> 
> I was thinking I might need to use Osmosis.  Some pointers would be
 very helpful.
> 
> 
> 
> I would like to:
 
 Select a bounding box (I can produce lat/lon)
 Get a list of street names'
 Output a CSV file (or other text file)
 
 Select a bounding box (I can produce lat/lon)
 Get a list of POIs
 
 Output a CSV file (or other text file)
 
 For these I would also like to be able to get any other attributes/
keys like
description text or other things.

> Thank you to each of you for all the work you do!

Hi,

Sorry for a bit delayed answer but GDAL/OGR OSM driver developer had 
to do a couple of fixes for making this task to perform well.

So you can do all that with GDAL OSM driver and SQL query language. Output
can be despite CSV any other format that is supported by GDAL/OGR for 
writing.
http://www.gdal.org/ogr/drv_osm.html
http://www.gdal.org/ogr/ogr_formats.html

Install a very fresh GDAL development version, about rev. 24970 or higher.
For Windows you can get it from gisinternals
http://www.gisinternals.com/sdk/

You want to query streetname from osm lines and name and probably some other
attributes from osm points and from a limited area. It is possible but quite
slow to create such CSV file directly from OSM data file that can be in
osm-xml or pbf format with following command

ogr2ogr -f CSV streets.csv finland.osm.pbf -sql "select distinct 
name from lines where highway is not null order by name" 
-spat 24.821 60.123 25.259 60.317

However, it is faster, especially if you want to do more queries, 
to convert OSM data first into Spatialite database. Here is a quite 
optimised command to use as a template

ogr2ogr -f SQLite -dsco spatialite=yes finland.sqlite finland.osm.pbf
 --config SQLITE_SYNCHRONOUS OFF --config OSM_COMPRESS_NODES YES
 -progress

This conversion takes a few minutes with 130 MB finland.osm.pbf file. 
Then you can repeat the first streetname search and it will be pretty fast

ogr2ogr -f CSV streets.csv finland.sqlite -sql "select distinct name 
from lines where highway is not null order by name" 
-spat 24.821 60.123 25.259 60.317

The poi file can be created in a similar way. Let's say you want to 
get all the amenities and names for those. The command is

ogr2ogr -f CSV poi.csv finland.sqlite -sql "select name, amenity 
from points where amenity is not null order by amenity"
-spat 24.821 60.123 25.259 60.317

Note 1. Read the OSM driver manual page. The second command does not 
work before editing the defauld osmconf.ini file so that "amenity" 
is included in the points layer attributes.

Note 2. There is a little bug in ogr2ogr CSV driver that may prevent 
creating a new csv file if there is already another CSV file with an 
uncommon structure in the same directory. The one-column CSV file that 
was created in the first example has such a structure. Delete the file 
or rename it with another extension before running the second example.

Regards,

-Jukka Rahkonen-






More information about the talk mailing list