ETech 2009 Record

From The Top

apt-get update
  apt-get install postgresql-8.3-postgis libapache2-mod-python python-gdal
  apt-get install python-mapnik osm2pgsql python-setuptools tilecache gdal-bin
  apt-get install less zip unzip screen vim imagemagick
  easy_install nik2img
  
  mkdir /var/www/etech && ln -s /var/www/etech  ~/etech

Section One: Shapefiles

cd ~/etech && mkdir -p 01-shapefiles/start 01-shapefiles/end && cd 01-shapefiles/start
  curl -O http://www2.census.gov/geo/tiger/TIGER2007FE/fe_2007_us_state.zip
  unzip fe_2007_us_state.zip
  ogr2ogr -t_srs "+proj=latlong +datum=WGS84 +no_defs" states.shp fe_2007_us_state.shp
  

New end of /etc/postgresql/8.3/main/pg_hba.conf:

# Database administrative login by UNIX sockets
  local   all         postgres                          trust
  
  # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
  
  # "local" is for Unix domain socket connections only
  local   all         all                               trust
  # IPv4 local connections:
  host    all         all         127.0.0.1/32          trust
  # IPv6 local connections:
  host    all         all         ::1/128               trust
  
  # everyone everywhere
  host    all         all         0.0.0.0/0             trust
  

New listen addresses in /etc/postgresql/8.3/main/postgresql.conf:

listen_addresses = '*'                  # what IP address(es) to listen on;
                                          # comma-separated list of addresses;
                                          # defaults to 'localhost', '*' = all
  

Steps, for them:

  1. Open states.zip in QGIS, poke around and see
  2. nik2img.py -m style.xml -e "-130,26,-60,50" -o map-latlong.png
  3. edit style.xml, add spherical mercator projection
  4. nik2img.py -m style.xml -e "-130,26,-60,50" -o map-mercator.png
  5. Add line symbolizer to style.xml, futz with colors

Section Two: PostGIS

cd ~/etech && mkdir -p 02-postgis/start 02-postgis/end && cd 02-postgis/start
  cd /usr/share/postgresql-8.3-postgis && createdb -U postgres etech_02_start && createlang -U postgres plpgsql etech_02_start && psql -U postgres etech_02_start < lwpostgis.sql
  cd /usr/share/postgresql-8.3-postgis && createdb -U postgres etech_02_end && createlang -U postgres plpgsql etech_02_end && psql -U postgres etech_02_end < lwpostgis.sql
  cd ~/etech/02-postgis/start && cp -v ../../01-shapefiles/end/states.* ./
  

Steps, for them:

  1. shp2sql -D -d -I states.shp states > states.sql
  2. psql -U postgres etech_02_start < states.sql
  3. View postGIS data in QGIS
  4. Modify style.xml from previous example to use PostGIS instead
  5. Modify style.xml to highlight CA with a filter
  6. Render zoomed into CA: nik2img.py -m style.xml -e "-125.5,31.7,-113.3,42.6" -s 500,500 -o map.png

Section Three: OSM Data

cd ~/etech && mkdir -p 03-osm/start 03-osm/end && cd 03-osm/start
  cd /usr/share/postgresql-8.3-postgis && createdb -U postgres etech_03_start && createlang -U postgres plpgsql etech_03_start && psql -U postgres etech_03_start < lwpostgis.sql
  cd /usr/share/postgresql-8.3-postgis && createdb -U postgres etech_03_end && createlang -U postgres plpgsql etech_03_end && psql -U postgres etech_03_end < lwpostgis.sql
  cd ~/etech/03-osm/start # && cp -v ../../02-postgis/end/style.xml ./
  osm2pgsql --create --latlong -U postgres -d etech_03_end sanjose.osm.xml # for later
  

Steps, for them:

  1. osm2pgsql --create --latlong -U postgres -d etech_03_start sanjose.osm.xml
  2. Modify style.xml by adding data source with all planet_osm_line
  3. Render zoomed into CA: nik2img.py -m style.xml -e "-125.5,31.7,-113.3,42.6" -s 500,500 -o map.png
  4. Render zoomed into San Jose: nik2img.py -m style.xml -e "-121.945,37.312,-121.886,37.355" -s 500,500 -o map-sanjose.png
  5. Mess around with road casings, until it begins to look good.
  6. Add separate layers for motorways to show how draw order works

Section Four: GDAL

cd ~/etech && mkdir -p 04-gdal/start 04-gdal/end && cd 04-gdal/start
  

For them:

  1. Download start/sanjose1961a-small.jpg, if you have an image editor look at x, y coords and compare to http://getlatlon.com
  2. Make the virtual raster:
    gdal_translate -a_srs "+proj=latlong +datum=WGS84 +no_defs" \
      -gcp 1012 7172 -121.992359 37.262953 \
      -gcp 5122 7147 -121.808896 37.2636876 \
      -gcp 2779 1556 -121.91408 37.46358387 \
      -gcp 5328 1856 -121.799412 37.4526486 \
      -gcp 3532 4491 -121.879920959 37.35862842 \
      -of VRT sanjose1961a.jpg sanjose1961a.vrt
      
  3. Inspect the XML of the virtual raster
  4. Get extent from nik2img with -v flag: nik2img.py -v -m style.xml -e "-121.945,37.312,-121.886,37.355" -s 500,500 -o map-sanjose.png
  5. Project the VRT into a mercator GeoTIFF:
    gdalwarp -t_srs "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs" -of GTiff sanjose1961a.vrt sanjose1961a.tif
      
  6. Crank out a sample of the GDAL image for just downtown, using map extent from most recent nik2img:
    gdalwarp -te -13574855.3048 4482411.40257 -13568287.4548 4488979.25253 -ts 500 500 sanjose1961a.tif map-small.tif && convert map-small.tif map-small.jpg
      
  7. Add the new GeoTIFF to style.xml (between states and roads) after getting its bounds from gdalinfo:
    <Layer srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids´┐╝=@null +no_defs">
      <StyleName>Raster</StyleName>
      <Datasource>
      <Parameter name="type">raster</Parameter>
      <Parameter name="file">sanjose1961a.tif</Parameter>
      <Parameter name="lox">-13585226.492</Parameter>
      <Parameter name="loy">4469036.036</Parameter>
      <Parameter name="hix">-13549981.670</Parameter>
      <Parameter name="hiy">4511736.878</Parameter>
      </Datasource>
      </Layer>
      
  8. Re-render San Jose and CA with new raster layer included:
    nik2img.py -v -m style.xml -e "-121.945,37.312,-121.886,37.355" -s 500,500 -o map-sanjose.png
      nik2img.py -v -m style.xml -e "-125.5,31.7,-113.3,42.6" -s 500,500 -o map-raster-cali.png
      
  9. Modify tilecache.cfg with new layer
  10. Modify style.xml with green for freeways, roads like "%th St" to show other Mapnik features.
  11. map.html slippy map with Google API.