Skip to Content

QGIS 2 - script et méthode pour faire du géoréférencement vectoriel

Type : script pour la boite à outils traitement
Licence : GPL

Suite à cette discussion sur le forumSIG http://www.forumsig.org/showthread.php/37661-Logiciel-Ajustement-spatial... , où je cherchais une méthode pour faire du géoréférencement vectoriel, voici le protocole mis en place pour y parvenir.

Attention, cette méthode nécessite que QGIS utilise gdal 1.10 ou supérieur.

Faire un fichier texte de points de correspondance (une ligne par point) formaté ainsi :

pointNonGeoref_x pointNonGeoref_y pointGeoref_x pointGeoref_y

Pour cela à l'aide de l'outil identification / dérivées / copier les valeurs d'attributs (on fait ça pour le fichier à géoréférencer et sur le référentiel à utiliser pour géoréférencer, le plus simple étant d'avoir 2 instances de qgis simultanées, l'une avec le fichier à géoréférencer sans reprojection à la volée et l'autre avec le référentiel permettant de récupérer les bonnes coordonnées)

Exemple

-869784.220806 273824.996155 475353.856328 267608.211198
-869786.957227 273804.951538 475351.619893 267590.139363
-869767.137134 273845.613669 475369.467973 267625.62811
-869758.781489 273830.170332 475377.513896 267610.888946

A noter qu'il est également possible d'utiliser le plugin copy_Coords de QGIS, plus simple d'utilisation, mais moins précis.

On lance ensuite le script joint (celui-ci ne fait que remplacer la commande d'ogr2ogr proposée par gene http://www.forumsig.org/showthread.php/37661-Logiciel-Ajustement-spatial...) mais permet d'éviter la ligne de commande.

Décompresser le zip dans le dossier script de l'outil traitements (voir Traitements / options / scripts / Scripts folder)

Dans la boite à outils de traitements / scripts, une entrée "[Géoréférencement] / ajustementSpatial" a du apparaitre, lancer le script et remplir comme précisé dans la documentation.

Si tout se passe bien, le fichier nouvellement géoréférencé doit s'ouvrir, placé correctement.

Le nombre de points de correspondance définit l'ordre du polynôme utilisé pour le géoréférencement.

Le script a été testé sous linux et sous windows avec l'installateur OSGEO.

Sous Mac, il est nécessaire de remplacer la ligne

ogr = 'ogr2ogr -a_srs EPSG:'+epsg+' '

par

ogr = '/Library/Frameworks/GDAL.framework/Versions/1.10/Programs/ogr2ogr -a_srs EPSG:'+epsg+' '

En pratique, dans le script téléchargé, commenter la première ligne en y insérant un # devant et décommenter la ligne pour Mac en supprimant le #.

En espérant que cela vous sera utile, n'hésitez pas à faire un retour si vous avez des soucis sur la discussion du forumSIG.




0

Commentaires

Script ajustement spatial et QGIS 2.14.0

Bonjour

J'ai un soucis lors de l'utilisation du script, après lancement j'obtiens la réponse suivante :

returned non-zero exit status 127 See log for more details

Je travaille sur des entités linéaires de cadastre (indien) entities LineString avec 7316 lignes

Merci de m'éclairer

EL

Bonjour est ce que si vous

Bonjour

est ce que si vous ouvrez la console python et que vous relancez le script normalement, est ce que cela règle le problème ?

Problème non résolu

Bonjour
Non, avec la console python ouverte cela ne modifie rien, même message d'erreur retourné

Si ce n'est pas confidentiel,

Si ce n'est pas confidentiel, je veux bien voir les données et le fichier utilisé pour le géorérencement

redaction at portailsig.org

2.12.2

fonctionne parfaitement avec QGIS 2.12.2

Grâce à ce script, j'ai géoréférencé un "dessin" DXF fait par une architecte, qui n'a aucune connaissance des SIG :-)

qgis 2.12.1

Fonctionne parfaitement
merci

Script ajustementSpatial et Qgis 2.8.3

Bonjour,

Je n'ai pas réussi à faire marcher ce script avec qgis 2.8.3 :

- soit j'ai l'erreur "'ascii' codec can't encode character u'\xe9' in position 334: ordinal not in range(128) See log for more details"
- soit lorsque je clique sur "Itérer sur cette couche" (petite flèche verte à coté du chemin du fichier d'entrée), j'ai le Démarrage de l'algorithme ajustementSpatial qui se lance effectivement, ma machine se met à tourner fort, puis ça plante....

Par contre, du coup j'ai utilisé ogr2ogr directement et là miracle ça marche.

Pour ceux qui ne savent pas faire :
1 - Démarrer OSGeo4W qui s'installe avec qgis
2 - utiliser la commande suivante (pour 4 points) :
ogr2ogr -gcp X1nonréfé Y1nonréfé X1réfé Y1réfé -gcp X2nonréfé Y2nonréfé X2réfé Y2réfé -gcp X3nonréfé Y3nonréfé X3réfé Y3réfé -gcp X4nonréfé Y4nonréfé X4réfé Y4réfé -f "ESRI shapefile" ...\chemin\nom_fichier_out.shp ...\chemin\nom_fichier_in.shp

remplacer X1nonréfé Y1nonréfé X1réfé Y1réfé par les coordonnées correspondantes de chacun de vos points

remplacer ...\chemin\nom_fichier_out.shp par le chemin et le nom du fichier de sortie

remplacer ...\chemin\nom_fichier_in.shp par le chemin et le nom du fichier en entrée

Bonjour Est il possible de me

Bonjour

Est il possible de me faire passer vos données que je puisse regarder d'où vient le problème et éventuellement améliorer le script ? si oui envoyer un mail sur redaction[at]portailsig.org

Merci

Problème codage du fichier texte de points

Bonjour à tous,

Lorsque je lance le script,j’obtiens ce message :
Démarrage de l'algorithme ajustementSpatial ...
'ascii' codec can't encode character u'\xe9' in position 330: ordinal not in range(128) See log for more details

D'après mes recherches, ce problème est lié à l'encodage utilisé. Pour autant, j'ai utilisé l'encodage UTF-8 et AINSI.

N'ayant aucune notion en python, je suis démuni.

Est ce que quelqu'un pourrait m'en dire plus ?

Merci de me répondre,

Pierre L

Limite du nombre de points de correspondance

Merci pour ce script bien pratique.
Attention dans les faits il y a une limite au nombre de points de correspondance (due aux limites de calcul en fonction de l'ordre du polynome ?)

Format des coordonnées

Merci pour ce script bien pratique !

georeferencer couches vectorielles

Hi Ludovic,

mes amis italiens et moi, nous avons développé un plugin de QGIS pour georéférencer des couches vectorielles;

nos objectifs sont:
- definir en mode graphique les paires de points correspondants (source et destination)
- on peut definir
- 2 paires (rotation + translation)
- 3+ paires (rotation + translation + scalatura (scaling: en francais?)
- appliquer la transformation (seulement lineaire)
- activer/desactiver le paires en fonction des besoins de l'utilisateur
- enregistrer/lire le points pour la transformation des autres couches;

la logique et l'implementation sont totalement naif; en effet il s'agit d'un outil experimentel, pas encore deposé dans le depot de QGIS;

nous serion heureux d'avoir votre point de vue et de travailler ensemble pour fournir aux utilisateurs de QGIS un outil je pense bien interessant;

si vous voulez, vous pouvez voir une petite presentation ici http://www.slideshare.net/giulianc/vect-georef; si vous etes interessé je pourrais envoyer une copie pour essayer le plugin;

s'il vous plaît excusez mon français très faible et je vous remercie de votre attention;

cordialement,
giuliano curti

Bonjour, j'ai essayé

Bonjour,

j'ai essayé d'utiliser votre outil mais je ne comprends pas comment ajouter les points de controle?
Pouvez vous m'aider ?

Merci,

EmelineD

georeferencer et ... excuses

pardon,

je n'ai pas laissé mon address: giulianc51@gmail.com, excusez moi :-)

saluts,
giuliano curti

invalide

Bonjour,
j'utilise Qgis 2,
voici le message que j'obtiens :
Cette extension est incompatible avec cette version de QGIS
Extension conçue pour la version 1.x de QGIS
une solution?
Merci d'avance

Il ne s'agit pas d'un plugin,

Il ne s'agit pas d'un plugin, il faut le mettre dans le répertoire de scripts de l'outil traitement et l'utiliser avec celui ci.

Est ce bien ainsi que vous faites ?

c'est réglé

effectivement j'avais mal suivi la procédure.
c'est réglé,
merci

Parfait, n'hésitez pas à nous

Parfait, n'hésitez pas à nous dire si cela fonctionne bien pour vous.

erreur ajustement spatial

Bonjour,
J'essaie de faire un ajustement en suivant la procedure mais j'ai ce message d'errueur "ascii codec can't decode byte 0xef in position 5 :ordinal not in range (128)".
Ai-je omis un détail ?
Merci.

Bonjour Cela ressemble à un

Bonjour
Cela ressemble à un problème d'accent dans le chemin du fichier ?