Géoréférencement de dessins vectoriels PDF / SVG / DXF à l'aide de QGIS? [dupliquer]

12

Je veux créer une petite application Web pour visualiser les résultats des élections par site de vote pour ma ville. Le résultat sera très similaire à ce qui a été fait pour Berlin ici . J'espère que cela aide à comprendre ce que je veux.

Les données brutes électorales à l'échelle dont j'ai besoin sont publiées et je sais comment les visualiser sur la base d'un fichier de formes avec des polygones séparés délimitant les circonscriptions électorales. Mon problème est - comme vous pouvez probablement le deviner - que quelque chose comme ça n'existe pas déjà.

Ce qui est réellement publié cependant, c'est un fichier PDF qui délimite les frontières des quartiers qui m'intéressent: http://muenster.de/stadt/stadtplanung/pdf/a3_stimmbezirk.pdf

Je n'ai pas envie de redessiner le dessin moi-même, donc je cherche un moyen d'en faire un fichier de formes. Heureusement, le PDf inclut le dessin au trait en tant qu'objets vectoriels séparés, je les ai extraits dans un fichier SVG: https://www.dropbox.com/s/bn7698yrdh5tdqj/a3_stimmbezirk_ungrouped.svg

J'ai déjà essayé de convertir le SVG en DXF et de l'importer dans qgis 2.0.1. Cela fonctionne réellement, mais (comme prévu) place les vecteurs dans l'océan Atlantique et je ne peux pas trouver un moyen de le modifier et de résoudre ce problème.

Que puis-je faire maintenant pour géoréférencer ces vecteurs avec des outils open source et enfin produire un fichier de formes?

bfncs
la source
Ne pouvez-vous pas télécharger les fichiers de formes OpenStreeMap pour Munster? download.geofabrik.de/europe/germany/nordrhein-westfalen/… les limites administratives sont déjà géoréférencées.
Mapperz
Merci d'avoir commenté, Mapperz! On dirait que je pourrais, mais cela n'inclut pas les circonscriptions électorales actuelles ("Stimmbezirke") ... ou est-ce le cas?
bfncs

Réponses:

12

Je suis tombé sur votre question en essayant de faire la même chose, voici comment je l'ai fait:

Logiciels utilisés:

  • Inkscape
  • QGIS 2.2
  • Plugin Affine Transformation pour QGIS

Extraire des données vectorielles du PDF

C'est ce que vous avez déjà fait, il vous suffit d'ouvrir le PDF dans Inkscape, de trouver les formes souhaitées et de supprimer tous les arrière-plans et le texte environnant. Enregistrez en tant que fichier .dxf .

Géoréférencement du fichier vectoriel

Pour travailler avec le fichier vectoriel, nous devons le convertir en fichier Shape ESRI avec QGIS.

Ouvrez QGIS et ajoutez le fichier dxf en tant que couche raster, sélectionnez DHDN / Gauss-Kruger zone 3 (EPSG: 31467) comme système de coordonnées. Cliquez avec le bouton droit sur le calque, enregistrez-le sous forme de fichier ESRI. Ouvrez ce fichier de formes en tant que calque raster et supprimez l'autre.

Vous avez maintenant Münsters Wahlbezirke quelque part aux coordonnées 0, 0.

Pour traduire (déplacer) et redimensionner le vecteur au bon endroit, nous devons trouver les coordonnées et la taille cibles. Pour faire court, j'avais un autre GeoJSON de Wahlbezirke qui était géoréférencé mais pas aussi détaillé, donc je l'ai utilisé pour calculer les données suivantes:

  • Cible x, y
  • Rapport de taille entre notre vecteur récemment extrait et la taille cible (en utilisant xMin, xMax et yMin, yMax (extrait des métadonnées de couche dans QGIS) pour obtenir les dimensions dans la direction x et y pour les deux couches, puis calculer le rapport dans la direction x et y)

Dans mon cas, ceux-ci se révèlent être à peu près:

target x 3406388
target y 5745290
yratio 118,539696
xratio 118,637678

Activez le mode Édition (icône crayon) sur votre calque et mettez ces nombres dans le plugin Affine Transformation (Menu Vector, Outils de géotraitement, Affine), sélectionnez "Calque entier":

Transformation affine

Cliquez sur Transformer, désactivez le mode d'édition (et enregistrez) et vous vous retrouvez avec un calque tout jaune à peu près sur votre cible. Je n'ai jamais compris comment supprimer la couleur jaune, donc je supprime et rajoute le calque pour une meilleure visibilité.

Vous pourriez vous retrouver avec une vue qui ressemble à ceci, où votre couche raster est super petite (entourée de rouge), zoomez ici: Couche raster à petite échelle QGIS 2.2 (Peut-être que j'ai négligé un paramètre ici, je ne suis pas sûr de ce qui cause ce comportement. "Zoom à l'étendue de la couche "n'aide pas.)

Ajoutez une couche déjà géoréférencée, vous pouvez utiliser une couche OpenStreetMap (via l'extension OpenLayers), un NRW WMS ou similaire. Votre vecteur n'est pas encore à la bonne position, alors déplacez-le en activant le mode Édition, puis utilisez l'outil Déplacer entité (s).

Fonction de déplacement de QGIS 2.2

Maintenant que nous avons créé une couche de polylignes, la dernière étape consiste à créer des polygones à partir de ces lignes. Je ne vais pas expliquer cela ici, lisez ici pour plus d'informations:

Voir le résultat ici .

chrki
la source
Merci beaucoup pour la réponse détaillée, je ne m'attendais pas à obtenir de l'aide sur ce problème et en attendant, je mettais le projet en attente. Je n'ai toujours pas fini de reproduire vos étapes, mais cela ressemble à ce dont j'ai besoin. J'ai hâte de le faire enfin grâce à votre aide.
bfncs
L'édition avec QGIS peut être fastidieuse et n'est pas tout à fait intuitive (comme vous pouvez le voir avec le comportement / bug du zoom? Et d'autres choses ...), le résultat est en ligne sur Github pour que vous puissiez l'utiliser gratuitement (lien à la fin du post) ). Je n'ai pas encore fait le tour pour convertir les polylignes résultantes en polygones, je le ferai un peu plus tard. Edit: Je viens de voir que vous avez besoin de l'autre carte avec 172 districts, je n'ai converti que la carte de 33 districts .. désolé: D
chrki
6

Voici un autre workflow, utilisant ogr2ogr avec des points GCP:

  1. Extraire les lignes en svg (comme ci-dessus)
  2. charger dans inkscape et enregistrer au format dxf
  3. Charger dans QGIS, avec EPSG: 31467 en tant que CRS
  4. Lire quelques coordonnées à partir des bords significatifs de la frontière de la ville environnante
  5. Ouvrez l'éditeur OSM JOSM et téléchargez la relation 62591 de la frontière de la ville
  6. Enregistrez cela en tant que GPX
  7. Chargez la bordure dans une nouvelle session QGIS, définissez le projet CRS sur EPSG: 31467
  8. Lisez les coordonnées des mêmes points que ci-dessus
  9. créez le fichier de commandes suivant pour GDAL:
ogr2ogr -a_srs EPSG:31467 -gcp 66.2423 264.3829 3397709. 5756806. -gcp 227.530 17.636 3404474. 5746477. -gcp 443.61 153.42 3413517. 5752162. -gcp 456.24 421.97 3414043. 5763404. -gcp 294.56 552.56 3407296. 5768889. stimmbezirke.shp stimmbezirke.dxf

Exécutez le lot et chargez le fichier de formes résultant dans QGIS:

entrez la description de l'image ici

AndreJ
la source