Importer les routes de GeoBase 2010

Prérequis

1. Se créer un compte sur http://www.geobase.ca/

2. Installer geobase2osm.py, python-shapely et python-gdal

svn checkout http://svn.openstreetmap.org/applications/utils/import/geobase2osm
sudo apt-get install python-gdal python-shapely

Importer

1. Importer le fichier nrn_rrn_qc_gml_en.zip de geobase (en se connectant avec son compte)
Québec National Road (GML)

2. Extraire le fichier GML
unzip nrn_rrn_qc_gml_en.zip NRN_QC_2_0_GEOM.gml

3. Sélectionner la portion des routes (c'est mieux d'exporter un rectangle)
# voici une zone déjà importée
# -74W 45.96N, -77W 48N
# echo "POLYGON((-74 45.96, -77 45.96, -77 48, -74 48, -74 45.96))" > 74W45.96N-77W48N.txt

# 4. Exporter en fichier osm
python geobase2osm/geobase2osm.py -o out.osm -b 74W45.96N-77W48N.txt -e Result.jml -i NRN_QC_2_0_GEOM.gml

# 4.1 si vous avez l'erreur suivante: 
# ERROR 6: Unable to load PROJ.4 library (libproj.so), creation of OGRCoordinateTransformation failed.
# ajouter un lien symbolique dans /usr/lib (en root) et refaire la commande
ln -s /usr/lib/libproj.so.0 /usr/lib/libproj.so 

# attendre longtemps...

Importer des données de GeoBase 2009

1. Installer Postgres avec postgresql-8.3-postgis.

apt-get install postgresql-8.3-postgis

2. Créer une base de données et ajouter les références géomatiques

su -
su - postgres
createdb gis
psql gis < /usr/share/postgresql-8.3-postgis/lwpostgis.sql
psql gis < /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql

3. Obtenir le script de conversion d'OSM : Osm2pgsql.
# apt-get install libgeos-dev # pour make: geos-config : commande introuvable
# svn co http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/ 
# cd osm2pgsql
# make
apt-get install osm2pgsql

4. Se créer un compte sur http://www.geobase.ca/ et importer les données
Québec National Road - shapefile
et Québec National Road (GML)

5. Aller sur openstreetmap.org et télécharger les données.
5.1 Aller sur le site
5.2 Rechercher une ville
5.3 Afficher la ville
5.4 Choisir un niveau de zoom élevé (exemple: zoom 12)
5.5 Cliquer sur Exporter
5.6 Choisir le format OpenStreetMap XML Data
5.7 Cliquer sur le bouton Export et enregistrer le fichier. On peut renommer le fichier map.osm ensuite.

6. Importer le fichier osm
su - 
su - postgres
mkdir osm
cd osm
cp /usr/share/osm2pgsql/default.style .
osm2pgsql -l -d gis ../map.osm

## sortie ##
osm2pgsql SVN version 0.66-

Using projection SRS 4326 (Latlong)
Setting up table: planet_osm_point
Setting up table: planet_osm_line
Setting up table: planet_osm_polygon
Setting up table: planet_osm_roads
Mid: Ram, scale=10000000

Reading in file: ../geo.osm
Processing: Node(1k) Way(0k) Relation(0k)
Node stats: total(1180), max(281129234)
Way stats: total(13), max(25774026)
Relation stats: total(0), max(0)

Writing way(0k)

Writing rel(0k)
Committing transaction for planet_osm_line
Sorting data and creating indexes for planet_osm_line
Committing transaction for planet_osm_point
Committing transaction for planet_osm_polygon
Committing transaction for planet_osm_roads
Sorting data and creating indexes for planet_osm_point
Sorting data and creating indexes for planet_osm_polygon
Sorting data and creating indexes for planet_osm_roads
Completed planet_osm_point
Completed planet_osm_polygon
Completed planet_osm_line
Completed planet_osm_roads
## fin de la sortie ##

7. Extraire et importer les fichiers shapefile NRN de Geobase.
cd ..
mkdir geobase
cd geobase
unzip ../nrn_rrn_qc_shp_en.zip
# for quebec, you need to convert iso-8859-1 to utf-8 before inserting the row inside a UTF-8 databases
shp2pgsql -s 4326 NRN_QC_2_0_ROADSEG nrn_roadseg > nrn_roadseg.sql
iconv -f iso88591 -t utf8 nrn_roadseg.sql > nrn_roadseg.utf8.sql
psql -d gis -f nrn_roadseg.utf8.sql
# attendre longtemps

8. Créer un fichier avec les fonctions d'importation.
su - postgres
cat > import.function.sql <<'EOF'
 DROP TYPE nrn_data;
CREATE TYPE nrn_data AS (
	gid integer,	the_geom geometry,
	nid text,
	rtename1en text,
	l_stname_c text,
	l_placenam text

);
CREATE OR REPLACE FUNCTION select_nrn_roadtile(coordinates text) 
RETURNS SETOF nrn_data
AS $$
	SELECT gid,ST_Transform(the_geom,3348),nid, rtename1en, 
                l_stname_c,l_placenam FROM nrn_roadseg 
		WHERE
 	         ST_Intersects(ST_Transform(the_geom,4326),
                              ST_GeomFromEWKT($1))

		
$$
LANGUAGE SQL;

CREATE TYPE osm_data AS (	
	way geometry,
	osm_id integer,
	name text
);

CREATE OR REPLACE FUNCTION select_osm_roadtile(coordinates text) 
RETURNS SETOF osm_data
AS $$
	SELECT ST_Transform(way,3348),osm_id,substr(name,0,80) 
                FROM planet_osm_line WHERE
		ST_Intersects(way,ST_GeomFromEWKT($1)) 		
 	        AND highway is not null
$$
LANGUAGE SQL;
EOF

# TODO: ces fonctions ne peuvent pas être créées si les données ne sont pas importées!
psql -d gis -f import.function.sql

9. sélectionner la zone voulue pour les deux tables (OSM et NRN)
# voici une commande pour avoir le polygone du fichier geo.osm exporté sur openstreetmap.org.
head -n3 geo.osm | tail -1 | sed 's/<bounds minlat="\([^"]*\)" minlon="\([^"]*\)" maxlat="\([^"]*\)" maxlon="\([^"]*\)"\/>/POLYGON((\4 \1, \2 \1, \2 \3, \4 \3, \4 \1))/'
pgsql2shp -f OSM.shp gis "select * FROM select_osm_roadtile('SRID=4326;POLYGON((-75.3244 46.4583, -75.6704 46.4583, -75.6704 46.6462, -75.3244 46.6462, -75.3244 46.4583))')"
pgsql2shp -f NRN.shp gis "select * FROM select_nrn_roadtile('SRID=4326;POLYGON((-75.3244 46.4583, -75.6704 46.4583, -75.6704 46.6462, -75.3244 46.6462, -75.3244 46.4583))')"

10. RoadRunner
10.1 Télécharger openjump
# le dépôt contrib est nécessaire ( /etc/apt/sources.list: deb http://ftp.ca.debian.org/debian/ sid main contrib )
apt-get install openjump 

10.2 Télécharger le plugin RoadRunner
https://sourceforge.net/projects/jump-pilot/files/ (roadmatcher1.4forOJ.zip)
su - 
mkdir /usr/share/openjump/ext
cd /usr/share/openjump/ext
unzip roadmatcher1.4forOJ.zip 

10.3 Ouvrir les données sous OpenJUMP
Menu Fichier > Charger les données géographiques depuis un fichier... > Filtre ESRI Shapefile (*.shp) > NRN.shp, OSM.shp
(on peut choisir les deux en même temps)

10.4 Création d'une session
Menu RoadMatcher > New Session > Suivant > 
Select Input Layers: Reference DataSet = NRN Layer > Suivant >
Select Node Contraint Layers: Suivant >
Perform Automatic Conflation: AutoMatch désactivé, AutoAdjust désactivé > Finir

!Input Errors
!The following errors were found in the input data. Please review before continuing.
!Coincident segments were found in the source networks.

10.4 Alternative
Sélectionner la couche Travail > NRN. 
Cliquer-droit et choisir "Enregistrer les données géographiques dans un fichier..."
Nommer le fichier Result.jml

10.5 Exporter en OSM
# Utiliser le polygone utilisé à l'étape 9 et écrivez le dans un fichier
echo "POLYGON((-75.3244 46.4583, -75.6704 46.4583, -75.6704 46.6462, -75.3244 46.6462, -75.3244 46.4583))" > polygon.txt

# -74W 45.96N, -77W 48N
# echo "POLYGON((-74 45.96, -77 45.96, -77 48, -74 48, -74 45.96))" > polygon.txt

# Extraire le fichier GML
unzip nrn_rrn_qc_gml_en.zip

# Installer geobase2osm.py, python-shapely et python-gdal
svn checkout http://svn.openstreetmap.org/applications/utils/import/geobase2osm
sudo apt-get install python-gdal python-shapely

# Exporter en fichier osm
python geobase2osm/geobase2osm.py -o out.osm -b polygon.txt -e Result.jml -i NRN_QC_2_0_GEOM.gml

# attendre...
## sortie ##7
false
Starting to process Exclusion information...
0
Standalone List Size 0
Preparing to read 'NRN_QC_2_0_GEOM.gml'
Starting to process GML...
0
5000
10000
15000
20000
25000
30000
35000
40000
45000
50000
55000
60000
65000
70000
75000
80000
85000
90000
95000
100000
105000
110000
115000
120000
125000
130000
135000
140000
145000
150000
155000
160000
165000
170000
175000
180000
185000
190000
195000
200000
205000
210000
215000
220000
225000
230000
235000
240000
245000
250000
255000
260000
265000
270000
275000
280000
285000
290000
295000
300000
305000
310000
315000
320000
325000
330000
335000
340000
345000
350000
355000
360000
365000
370000
375000
380000
385000
390000
395000
400000
405000
410000
415000
420000
425000
430000
435000
440000
445000
450000
455000
460000
465000
470000
475000
480000
485000
490000
495000
500000
505000
510000
515000
520000
525000
530000
535000
...
605000
Replacing node -7306 with -3707
Replacing node -7225 with -7225
Replacing node -7461 with -7225
Saving to 'out.osm'
Scanning ways for standalones
Scanning excluded nodes
Writing standalone
Writing excluded
## fin de la sortie ##

11. Ouvrir JOSM
11.1 se créer un compte sur Openstreetmap et confirmer l'inscription
11.2 ouvrir josm, inscrire son nom d'usager/mot de passe dans Édition > Configuration... > Réglages de connexion et le fermer
11.3 Ouvrir josm encore avec la carte out.osm: josm out.osm
11.4 importer les données d'openstreetmap pour la région visualisé
11.5 ...


Source: http://wiki.openstreetmap.org/wiki/Geobase_NRN_-_OSM_Map_Feature