[OSM-dev] Using NULL values in mapnik / postgres DB

Jon Burgess jburgess777 at googlemail.com
Wed Feb 21 23:19:38 GMT 2007


See below...

On Tue, 2007-02-20 at 22:12 +0000, Artem Pavlenko wrote:
> Jon,
> 
> Sounds good to me! Also, it might be a good idea to split osm data into 
> multiple tables in postgresql and only keep fields that are required :
> 
> 1. roads (LINESTRING) :  osm_id,highway,level,name ...
> 2. all points (POINT) : osm_id, amenity,...
> 3. all polygons (POLYGONS): osm_id, natural, leisure etc.
> 
> Thoughts?
> 
> Also, I'm not entirely convinced that using TEXT is more efficient than 
> VARCHAR(<length>) ???  Was it mentioned somewhere in docs? 
> 
> And last one:) . How about correcting geometries at the translation stage? I 
> think we can use GEOS (c++ lib) to 'node' and 'linemerge' _bad_ ways into 
> clean ones. 
> 
> Artem
> 
> On Tuesday 20 February 2007 21:40, Jon Burgess wrote:
> > I received an email from Martin Spott which suggested that we change the
> > Postgres database fields used by osm2pgsql + mapnik to utilise NULL in
> > place of empty text strings.
> >
> > Martin believes this will make the database lookups more efficient and
> > i'm inclined to believe him.
> >
> > To make this change we need to change both osm2pgsql.c and the osm.xml
> > mapnik rules to generate and parse the NULL SQL values.
> >
> > I've done a quick trial on my local machine and it is fairly trivial to
> > implement this. For reference the osm.xml changes look like:
> >
> >   char_length(foo)=0   changes to   foo IS NULL
> >   char_length(foo)>0   changes to   foo IS NOT NULL
> >
> > Any thoughts about whether I should go ahead and make this change?
> >
> > Jon

I've just commited the relevant changes to use NULLs in place of empty
strings into both mapnik/osm.xml and osm2pgsql/osm2pgsql.c

The two new versions need to go together else you will get lots of
unrendered stuff in your map. 

If you have a custom osm.xml file which you want to update to this new
style then running your file through the attached script should convert
the relevant pieces of SQL for you:

./nullify my-osm.xml > new-osm.xml

	Jon

-------------- next part --------------
#!/bin/sed -f
#
# Updates osm.xml to work with NULL DB fields in place of ""
#
#   char_length(foo)=0   changes to   foo IS NULL
#   char_length(foo)>0   changes to   foo IS NOT NULL

s/char_length(\([a-z_\"]*\)) *= *0/\1 IS NULL/gi
s/char_length(\([a-z_\"]*\)) *> *0/\1 IS NOT NULL/gi


More information about the dev mailing list