Changes between Version 198 and Version 199 of GIS/InstallationGuidelines/Linux


Ignore:
Timestamp:
06/04/14 13:25:02 (11 years ago)
Author:
Fran Boon
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GIS/InstallationGuidelines/Linux

    v198 v199  
    381381
    382382== !OpenStreetMap ==
    383  * http://weait.com/content/build-your-own-openstreetmap-server
    384  * http://weait.com/content/make-your-first-map
    385  * http://dbsgeo.com/foss4g2010/pdf/osm-rendering-foss4g2010.pdf
    386 
    387 !OpenStreetMap data can be stored in a PostGIS database & rendered using Mapnik.
    388 
    389 To support !Key/Value pairs:
    390 {{{
    391 apt-get install postgresql-contrib-8.4
    392 su postgres
    393 psql -d gis -f /usr/share/postgresql/8.4/contrib/hstore.sql
    394 }}}
    395 
    396 To support Planet diff files:
    397 {{{
    398 su postgres
    399 psql gis < /usr/share/postgresql/8.4/contrib/_int.sql
    400 }}}
    401 
    402 === Osm2pgsql ===
    403  * http://wiki.openstreetmap.org/wiki/Osm2pgsql
    404 
    405 It is recommended to use the latest version from source rather than an out of date package:
    406 {{{
    407 apt-get install build-essential libxml2-dev libgeos-dev libpq-dev libbz2-dev proj autoconf subversion libtool
    408 svn export http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/
    409 Optional (patch updated from original here): http://www.mail-archive.com/dev@openstreetmap.org/msg12768.html
    410 #wget http://eden.sahanafoundation.org/raw-attachment/wiki/InstallationGuidelinesGISDataLinux/osm2pgsql_centroid.patch
    411 cd osm2pgsql
    412 #patch -p0 < ../osm2pgsql_centroid.patch
    413 ./autogen.sh
    414 ./configure
    415 sed -i 's/-g -O2/-O2 -march=native -fomit-frame-pointer/' Makefile
    416 make
    417 make install
    418 # Fix needed for SVN version 0.70.5
    419 cp default.style /usr/local/share
    420 }}}
    421 
    422 === Mapnik ===
    423  * http://wiki.openstreetmap.org/wiki/Mapnik
    424  * http://mike.teczno.com/notes/mapnik.html (Advanced Tips)
    425 
    426 0.7.1 is packaged for Squeeze:
    427 {{{
    428 apt-get install python-mapnik unzip
    429 }}}
    430 
    431 Download the !OpenStreetMap extensions for Mapnik:
    432 {{{
    433 cd
    434 svn export http://svn.openstreetmap.org/applications/rendering/mapnik
    435 }}}
    436 
    437 Download/decompress Coastlines:
    438 {{{
    439 cd
    440 wget http://tile.openstreetmap.org/world_boundaries-spherical.tgz
    441 wget http://tile.openstreetmap.org/processed_p.tar.bz2
    442 wget http://tile.openstreetmap.org/shoreline_300.tar.bz2
    443 wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/10m-populated-places.zip
    444 wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/110m-admin-0-boundary-lines.zip
    445 cd ~/mapnik
    446 tar zxvf ~/world_boundaries-spherical.tgz
    447 tar jxvf ~/processed_p.tar.bz2 -C world_boundaries
    448 tar jxvf ~/shoreline_300.tar.bz2 -C world_boundaries
    449 unzip ~/10m-populated-places.zip -d world_boundaries
    450 unzip ~/110m-admin-0-boundary-lines.zip -d world_boundaries
    451 }}}
    452 
    453 Disable autovacuum:
    454 {{{
    455 vim /etc/postgresql/8.4/main/postgresql.conf
    456 #autovacuum = on
    457 /etc/init.d/postgresql restart
    458 }}}
    459 
    460 Download/Import area of interest, e.g.:
    461 {{{
    462 #wget http://downloads.cloudmade.com/north_america/haiti/haiti.osm.bz2
    463 #su postgres
    464 #osm2pgsql -s -d gis haiti.osm.bz2
    465 wget http://labs.geofabrik.de/haiti/2010-11-24-14-43.osm.bz2
    466 su postgres
    467 osm2pgsql -s -d gis 2010-11-24-14-43.osm.bz2
    468 }}}
    469 
    470 Re-enable autovacuum:
    471 {{{
    472 vim /etc/postgresql/8.4/main/postgresql.conf
    473 autovacuum = on
    474 /etc/init.d/postgresql restart
    475 }}}
    476 
    477 Setup XML file:
    478 {{{
    479 cd ~/mapnik
    480 ./generate_xml.py --accept-none --dbname gis --symbols ./symbols/ --world_boundaries ./world_boundaries/
    481 }}}
    482 
    483 Render tiles:
    484 {{{
    485 cd ~/mapnik
    486 vim generate_tiles.py
    487 render_tiles(bbox, mapfile, tile_dir, 0, 8, "World")
    488 #minZoom = 10
    489 #maxZoom = 16
    490 #bbox = (-2, 50.0,1.0,52.0)
    491 #render_tiles(bbox, mapfile, tile_dir, minZoom, maxZoom)
    492 # Haiti
    493 bbox = (-74.668, 17.884, -71.659, 20.232)
    494 render_tiles(bbox, mapfile, tile_dir, 9, 17, "Haiti")
    495 # Muenchen
    496 # comment all under here
    497 
    498 mkdir /var/www/tiles
    499 chown postgres /var/www/tiles
    500 ln -s /var/www/tiles
    501 su postgres
    502 MAPNIK_MAP_FILE="osm.xml" MAPNIK_TILE_DIR="tiles/" ./generate_tiles.py
    503 }}}
    504 === Contours ===
    505  * http://wiki.openstreetmap.org/wiki/Contours#The_PostGIS_approach
    506 
    507 {{{
    508 apt-get install gdal-bin
    509 }}}
    510 
    511 [http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/ SRTM3] data:
    512 {{{
    513 mkdir ~/mapnik/srtm
    514 cd ~/mapnik/srtm
    515 wget http://mapnik-utils.googlecode.com/svn@170/sandbox/testing/hillshading/srtm_generate_hdr.sh
    516 chmod +x srtm_generate_hdr.sh
    517 cp srtm_generate_hdr.sh /usr/local/bin
    518 vim process_srtm3.sh
    519 #!/bin/bash
    520 PREP_TABLE="1"
    521 for X in *.hgt.zip; do
    522     yes | srtm_generate_hdr.sh $X
    523     rm -f "${X%%.zip}"
    524 
    525     # Import 10m contours
    526     rm -f "${X%%.hgt.zip}.shp" "${X%%.hgt.zip}.shx" "${X%%.hgt.zip}.dbf"
    527     gdal_contour -i 10 -snodata 32767 -a height "${X%%.hgt.zip}.tif" "${X%%.hgt.zip}.shp"
    528     [ "$PREP_TABLE" ] && shp2pgsql -p -I -g way "${X%%.hgt.zip}" contours | psql -q gis
    529     shp2pgsql -a -g way "${X%%.hgt.zip}" contours | psql -q gis
    530 
    531     rm -f "${X%%.hgt.zip}.shp" "${X%%.hgt.zip}.shx" "${X%%.hgt.zip}.dbf"
    532     rm -f "${X%%.hgt.zip}.bil"
    533     rm -f "${X%%.hgt.zip}.hdr"
    534     rm -f "${X%%.hgt.zip}.prj"
    535     rm -f "${X%%.hgt.zip}.tif"
    536     unset PREP_TABLE
    537 done
    538 
    539 # Haiti
    540 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N17W072.hgt.zip
    541 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N18W072.hgt.zip
    542 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N18W073.hgt.zip
    543 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N18W074.hgt.zip
    544 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N18W075.hgt.zip
    545 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N19W072.hgt.zip
    546 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N19W073.hgt.zip
    547 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N19W074.hgt.zip
    548 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N19W075.hgt.zip
    549 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N20W073.hgt.zip
    550 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N20W074.hgt.zip
    551 wget http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/North_America/N20W075.hgt.zip
    552 
    553 chown postgres .
    554 su postgres
    555 sh process_srtm3.sh
    556 }}}
    557 
    558 Since we are non-commercial, we should be able to use the SRTM4.1 data from [http://srtm.csi.cgiar.org CGIAR], however the Shapefile production crashed when it reached 2Gb.[[BR]]
    559 Example for Haiti:
    560 {{{
    561 cd ~/mapnik/srtm
    562 wget http://srtm.csi.cgiar.org/SRT-ZIP/SRTM_V41/SRTM_Data_GeoTiff/srtm_22_09.zip
    563 unzip srtm_22_09.zip
    564 gdal_contour -i 10 -snodata 32767 -a height "srtm_22_09.tif" "srtm_22_09.shp"
    565 su postgres
    566 shp2pgsql -p -I -g way "srtm_22_09" contours | psql -q gis
    567 shp2pgsql -a -g way "srtm_22_09" contours | psql -q gis
    568 }}}
    569 
    570 Configure Mapnik:
    571 {{{
    572 vim ~/mapnik/osm.xml
    573 # Under line &layer-shapefiles;
    574 &layer-contours;
    575 vim ~/mapnik/inc/layer-contours.xml.inc
    576 <Style name="contours10">
    577         <Rule>
    578                 &maxscale_zoom14;
    579                 &minscale_zoom17;
    580                 <LineSymbolizer>
    581                         <CssParameter name="stroke">#9cb197</CssParameter>
    582                         <CssParameter name="stroke-width">0.5</CssParameter>
    583                 </LineSymbolizer>
    584         </Rule>
    585 </Style>
    586 <Style name="contours50">
    587         <Rule>
    588                 &maxscale_zoom14;
    589                 &minscale_zoom17;
    590                 <LineSymbolizer>
    591                         <CssParameter name="stroke">#9cb197</CssParameter>
    592                         <CssParameter name="stroke-width">0.6</CssParameter>
    593                 </LineSymbolizer>
    594         </Rule>
    595         <Rule>
    596                 &maxscale_zoom12;
    597                 &minscale_zoom13;
    598                 <LineSymbolizer>
    599                         <CssParameter name="stroke">#747b90</CssParameter>
    600                         <CssParameter name="stroke-width">0.6</CssParameter>
    601                 </LineSymbolizer>
    602         </Rule>
    603 </Style>
    604 <Style name="contours100">
    605         <Rule>
    606                 &maxscale_zoom14;
    607                 &minscale_zoom17;
    608                 <LineSymbolizer>
    609                         <CssParameter name="stroke">#9cb197</CssParameter>
    610                         <CssParameter name="stroke-width">0.7</CssParameter>
    611                 </LineSymbolizer>
    612         </Rule>
    613         <Rule>
    614                 &maxscale_zoom12;
    615                 &minscale_zoom13;
    616                 <LineSymbolizer>
    617                         <CssParameter name="stroke">#747b90</CssParameter>
    618                         <CssParameter name="stroke-width">0.7</CssParameter>
    619                 </LineSymbolizer>
    620         </Rule>
    621         <Rule>
    622                 &maxscale_zoom10;
    623                 &minscale_zoom11;
    624                 <LineSymbolizer>
    625                         <CssParameter name="stroke">#855d62</CssParameter>
    626                         <CssParameter name="stroke-width">0.7</CssParameter>
    627                 </LineSymbolizer>
    628         </Rule>
    629 </Style>
    630 <Style name="contours-text50">
    631         <Rule>
    632                 &maxscale_zoom14;
    633                 &minscale_zoom17;
    634                 <TextSymbolizer name="height" face_name="DejaVu Sans Book" size="8" fill="#747b90" halo_radius="1" placement="line" />
    635         </Rule>
    636 </Style>
    637 <Style name="contours-text100">
    638         <Rule>
    639                 &maxscale_zoom14;
    640                 &minscale_zoom17;
    641                 <TextSymbolizer name="height" face_name="DejaVu Sans Book" size="8" fill="#747b90" halo_radius="1" placement="line" />
    642         </Rule>
    643         <Rule>
    644                 &maxscale_zoom12;
    645                 &minscale_zoom13;
    646                 <TextSymbolizer name="height" face_name="DejaVu Sans Book" size="8" fill="#855d62" halo_radius="1" placement="line" />
    647         </Rule>
    648 </Style>
    649 <Layer name="srtm_10" status="on" srs="+proj=latlong +datum=WGS84">
    650         <StyleName>contours10</StyleName>
    651         <StyleName>contours-text10</StyleName>
    652         <Datasource>
    653                 <Parameter name="table">(select way,height from contours WHERE height::integer % 10 = 0 AND height::integer % 50 != 0 AND height::integer % 100 != 0) as "contours-10"</Parameter>
    654                 &datasource-settings;
    655         </Datasource>
    656 </Layer>
    657 <Layer name="srtm_50" status="on" srs="+proj=latlong +datum=WGS84">
    658         <StyleName>contours50</StyleName>
    659         <StyleName>contours-text50</StyleName>
    660         <Datasource>
    661                 <Parameter name="table">(select way,height from contours WHERE height::integer % 50 = 0 AND height::integer % 100 != 0) as "contours-50"</Parameter>
    662                 &datasource-settings;
    663         </Datasource>
    664 </Layer>
    665 <Layer name="srtm_100" status="on" srs="+proj=latlong +datum=WGS84">
    666         <StyleName>contours100</StyleName>
    667         <StyleName>contours-text100</StyleName>
    668         <Datasource>
    669                 <Parameter name="table">(select way,height from contours WHERE height::integer % 100 = 0) as "contours-100"</Parameter>
    670                 &datasource-settings;
    671         </Datasource>
    672 </Layer>
    673 }}}
    674 
    675 ==== Hillshading ====
    676  * http://wiki.openstreetmap.org/wiki/HikingBikingMaps#Hill_Shading
    677 
    678 === Serve Tiles ===
    679 Tiles can simply be served by Apache:
    680 {{{
    681 vim /etc/apache2/sites-available/mysite
    682 <VirtualHost *:80>
    683   ServerName mysite.org
    684   Alias /tiles     /var/www/tiles
    685   <LocationMatch "/tiles/">
    686     Order Allow,Deny
    687     Allow from all
    688   </LocationMatch>
    689 </VirtualHost>
    690 apache2ctl restart
    691 }}}
    692 
    693 === WMS ===
    694 In order to serve the OSM data via WMS then can use mod_mapnik_wms:
    695  * http://wiki.openstreetmap.org/wiki/Mod_mapnik_wms
    696 {{{
    697 gpg --gen-key
    698 apt-get install pbuilder debsigs apache2-prefork-dev libmapnik-dev libgd2-xpm-dev
    699 svn export http://svn.openstreetmap.org/applications/utils/mod_mapnik_wms
    700 cd mod_mapnik_wms
    701 sh autogen.sh
    702 vim debian/mapnik_wms.load
    703 LoadFile /usr/lib/libmapnik.so.0.7
    704 
    705 debuild
    706 }}}
    707 
    708 This data can then be converted by !GeoServer into a KML !SuperOverlay to display in Google Earth:
    709  * http://geoserver.org/display/GEOS/GSIP+47+-+WMS+cascading
    710  * http://docs.geoserver.org/stable/en/user/googleearth/tutorials/superoverlaysgwc.html
    711 
    712 === Rails Port ===
    713 This is needed to allow editing of the data using Potlatch, JOSM, etc
    714  * http://wiki.openstreetmap.org/wiki/The_Rails_Port
    715 
    716 {{{
    717 apt-get install imagemagick libmagick9-dev
    718 apt-get install ruby ruby1.8-dev libxml2-dev libxml-ruby1.8 libxml-parser-ruby1.8 rubygems librmagick-ruby
    719 gem install -v=2.3.8 rails
    720 #gem install libxml-ruby
    721 #gem install composite_primary_keys
    722 #gem install rmagick
    723 gem install timecop
    724 gem install pg
    725 gem install oauth
    726 
    727 #svn co http://railsexpress.de/svn/plugins/sql_session_store/trunk sql_session_store
    728 
    729 apt-get install postgresql-contrib libpq-dev
    730 su postgres
    731 createuser openstreetmap -s -P
    732 createdb -E UTF8 -O openstreetmap openstreetmap
    733 createdb -E UTF8 -O openstreetmap osm_test
    734 createdb -E UTF8 -O openstreetmap osm
    735 psql -d openstreetmap < /usr/share/postgresql/8.4/contrib/btree_gist.sql
    736 
    737 apt-get install git
    738 cd /home
    739 git clone git://git.openstreetmap.org/rails.git
    740 cd rails
    741 cp config/postgres.example.database.yml config/database.yml
    742 vim config/database.yml
    743 
    744 rake gems:install
    745 rake db:migrate
    746 env RAILS_ENV=production rake db:migrate
    747 rake test
    748 
    749 osmosis --read-xml-0.6 file="planet.osm.bz2" --write-apidb-0.6 populateCurrentTables=yes host="localhost" database="openstreetmap" user="openstreetmap" password="openstreetmap" validateSchemaVersion=no
    750 
    751 select setval('acls_id_seq', (select max(id) from acls));
    752 select setval('changesets_id_seq', (select max(id) from changesets));
    753 select setval('countries_id_seq', (select max(id) from countries));
    754 select setval('current_nodes_id_seq', (select max(id) from current_nodes));
    755 select setval('current_relations_id_seq', (select max(id) from current_relations));
    756 select setval('current_ways_id_seq', (select max(id) from current_ways));
    757 select setval('diary_comments_id_seq', (select max(id) from diary_comments));
    758 select setval('diary_entries_id_seq', (select max(id) from diary_entries));
    759 select setval('friends_id_seq', (select max(id) from friends));
    760 select setval('gpx_file_tags_id_seq', (select max(id) from gpx_file_tags));
    761 select setval('gpx_files_id_seq', (select max(id) from gpx_files));
    762 select setval('messages_id_seq', (select max(id) from messages));
    763 select setval('sessions_id_seq', (select max(id) from sessions));
    764 select setval('user_tokens_id_seq', (select max(id) from user_tokens));
    765 select setval('users_id_seq', (select max(id) from users));
    766 
    767 cd /home/rails
    768 ruby script/server
    769 
    770 cd db/functions
    771 make libpgosm.so
    772 
    773     * Log into PgSQL and execute the CREATE FUNCTION statement from maptile.c's comment:
    774 
    775  CREATE FUNCTION maptile_for_point(int8, int8, int4) RETURNS int4
    776  AS '/path/to/rails-port/db/functions/libpgosm', 'maptile_for_point'
    777  LANGUAGE C STRICT;
    778 
    779  CREATE FUNCTION tile_for_point(int4, int4) RETURNS int8
    780  AS '/path/to/rails-port/db/functions/libpgosm', 'tile_for_point'
    781  LANGUAGE C STRICT;
    782 
    783 }}}
     383* See [wiki:GIS/OpenStreetMap GIS/OpenStreetMap]
    784384
    785385== Printing ==