There has actually been a python script to generate a simple sqlite database 
form osm xml for years, but transforming the data into lines and polygons 
really is the hard part.

I did find a version of spatialite that supported build area after I had 
written the multipolygon code, but I've decided to keep the code in 
osm2spatialite because it does a much better job of generating valid 
multipolygons that BuildArea can (because BuildArea doesn't have a concept of 
the inner and outer roles). In the future there's room for osm2spatialite to 
also fix self intersecting polygons but since they don't upset mapnik I haven't 
gotten around to it.

The memory usage is because generating the osm2pgsql style database requires 
keeping all the geometry data in ram to generate the lines and polygons. I do 
have code that caches it and keeps memory useage < 100M but it's significantly 
slower for data that fits in ram. If osm2pgsql is any indication it's probably 
faster to just fill up swap space but I haven't had the time to let it run 
against any multi GB files.

The other reason I expect to stick with python for this is that it makes it 
much easier to prototype preprocessing code, and at some point I'd like to 
support things like the label & admin_center roles on boundary multipolygons.

- Daniel

On Feb 16, 2011, at 5:37 AM, Axel Kollmorgen wrote:

> On 2011-01-14 13:33, Daniel Sabo wrote:
>> I have a beta version of an osm2spatialite script written in python.
>> [...]
>> Neither the GOES C api and SpatialLite have a version of BuildArea
>> so most of the code is devoted to assembling multipolygons, so
>> that's the area it's most likely to produce different results than
>> osm2pgsql.
> 
> SpatiaLite has BuildArea() support since 2010-04-01 (svn) / 2010-08-15
> (2.4.0 RC3) [1,2]. also, spatialite-tools include the spatialite_osm_*
> tools, among them spatialite_osm_raw, which "simply acquir[es] OSM XML into 
> DB tables (fully preserving the XML layout)" [3]. the schema generated by 
> spatialite_osm_raw is different from the osm2pgsql schema, but all the 
> important ingredients (raw data for nodes, ways, relations; tags; join tables 
> for ways and relations; geometry for nodes) are there. it wouldn't require 
> too much effort to transform this into the osm2pgsql schema, either by 
> postprocessing it with sql, or (probably the better idea) by adapting 
> spatialite_osm_raw.c. we might even suggest a spatialite_osm_pgsql tool to 
> Alessandro "Sandro" Furieri, the developer of SpatiaLite - he is known for 
> magically producing code for many feature requests.
> 
>> Ram is an issue so I'm not sure python is the best choice in the long
>> term. Right now a 450MB xml file takes ~900MB to process. It is
>> fairly speedily though as long as you don't run out of memory.
> 
> running spatialite_osm_raw on a 368MB osm file takes 76 secs and less than 
> 30MB RAM (on a virtual debian server with 1GB RAM). this will take more if we 
> want to have osm2pgsql's geometry tables for lines, roads, and polygons also. 
> i still find this quite impressing, and i'm sure it is way more efficient 
> than doing the processing in python.
> 
> ax
> 
> [1] 
> http://groups.google.com/group/spatialite-users/browse_thread/thread/78b880074f1d84a0
> [2] http://www.gaia-gis.it/spatialite-2.4.0-4/spatialite-sql-2.4-4.html#p0
> [3] http://www.gaia-gis.it/spatialite-2.4.0-4/road_map.html
> 
> 
> _______________________________________________
> dev mailing list
> [email protected]
> http://lists.openstreetmap.org/listinfo/dev


_______________________________________________
dev mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/dev

Reply via email to