#1 Sat 04 January 2020 19:15
- GeGaX
- Participant occasionnel
- Date d'inscription: 20 May 2019
- Messages: 27
QGIS/GDAL: gdal_polygonise.py et ogr2ogr
Bonjour,
Dans mon projet la finalité est un fichier kml en partant d'un png noir et blanc. (je détaille)
tile.png => géoréférencement + projection => tile.tiff => polygonisation => tile_pol.shp => réparation des polygones => tile_pol_repair.shp => conversion des polygones en lignes => tile_lin.shp => Export en kml => tile.kml
quand j'ouvre les fichiers tile.kml (qui sont fonctionnels) je m'aperçois que dans certains j'ai des redondances de polygones ce qui fait que le "poids" du fichier est au minimum doublé.
y'a t'il un paramètre que j'ai oublié ?
voici la commande utilisée:
Code:
gdal_polygonize.py /Users/gegax/Tiles/gbl_tiff/0_352.tiff /Users/gegax/Tiles/gbl_kml/0_352.shp -b 1 -f "ESRI Shapefile" 0_352 DN
Concernant le champ DN est il possible dans la commande ogr2ogr de ne pas l'inclure ?
C'est possible sous l'interface QGIS mais je ne vois pas ce qu'il faut ajouter en paramètres en passant par le terminal (j'en ai 512 a faire)
Code:
ogr2ogr -f KML /Users/gegax/Tiles/gbl_kml/0_352.kml /Users/gegax/Tiles/gbl_lin/0_352.shp
Merci pour vos lumières
Dernière modification par GeGaX (Sat 04 January 2020 19:17)
Hors ligne
#2 Mon 13 January 2020 19:25
- FloSnow
- Participant occasionnel
- Date d'inscription: 1 Jan 2010
- Messages: 28
Re: QGIS/GDAL: gdal_polygonise.py et ogr2ogr
Bonjour.
Concernant la redondance des entités dans le .kml, j'ai essayé la commande ogr2ogr de mon côté en partant d'un shape constitués de quelques lignes issues de polygones pouvant se chevaucher. Le résultat est un poids de fichier doublé mais aucune redondance. Peut-il y avoir des problèmes de redondances dans votre fichier .shp à partir de l'étape de réparation des polygones ?
Pour le champ DN, on peut sélectionner les champs qu'on souhaite conserver dans la commande ogr2ogr en utilisant le paramètre -select. Il suffit alors de ne pas renseigner DN parmi les champs :
Code:
ogr2ogr -f KML -select champ1,champ2 /Users/gegax/Tiles/gbl_kml/0_352.kml /Users/gegax/Tiles/gbl_lin/0_352.shp
Sinon, pour ne pas inclure le champ DN dans le cas où il y aurait trop de champs à renseigner, on peut aussi procéder en deux temps avec un ogrinfo qui va supprimer la colonne DN via une requête SQL (créez un fichier .shp temporaire au préalable si vous souhaitez conserver le champ DN à une certaine étape) :
Code:
ogrinfo /Users/gegax/Tiles/gbl_lin/0_352.shp -sql "ALTER TABLE 0_352.shp DROP COLUMN DN" ogr2ogr -f KML /Users/gegax/Tiles/gbl_kml/0_352.kml /Users/gegax/Tiles/gbl_lin/0_352.shp
Cordialement.
Hors ligne
#3 Mon 13 January 2020 20:39
- GeGaX
- Participant occasionnel
- Date d'inscription: 20 May 2019
- Messages: 27
Re: QGIS/GDAL: gdal_polygonise.py et ogr2ogr
Bonsoir FloSnow,
Merci de votre réponse.
Entre temps j'ai trouvé ma réponse qui se résume a ceci :
# Après avoir effectué la polygonisation via
Code:
gdal_polygonize.py input.tiff output.shp -b 1 -f "ESRI Shapefile" tileName DN
# Je répare la polygonisation via "Réparer les géométries" sous QGIS
# Je sélectionne la couche qui m'intéresse (0 = terre) pour le futur Export kml via :
Code:
ogr2ogr output.shp input.shp -where "DN=0"
# Je converti les polygones issus de la commande ci dessus en ligne via QGIS
# J'exporte en KML via :
Code:
ogr2ogr -f KML output.kml input.shp
Avec gdal/ogr je peux effectuer la quasi totalité des conversions en partant d'un png non géoréférencé pour en obtenir un KML des terres (512 tuiles de 32 x 32 tuiles de 256px)
Seuls les points "Réparer les géométries" et "Polygones en Lignes" sont effectués avec QGIS ce qui me permet sous Mac de faire un script Bash qui m'effectue une majorité des commandes, pour la partie QGIS j'utilise le traitement par lot mais j'ai toujours des soucis sur le nom des fichiers que je dois retravailler après.
Si des solutions existent pour ces 2 points, je suis preneur (la première je suis presque sur que ce n'est pas possible, la seconde en revanche doit être possible mais pas trouvé) et pour la question, non je le fais pas en Python parce que je ne connais pas du tout ce langage (à part des choses hyper basiques)
Sur 512 tuiles en KML, 4 sont en "vrac" je ne sais pas trop pourquoi sachant que les shp sont ok, j'ai une hypothèse sur le nombre de lignes trop nombreuses ...
Pour ça je vais "découper" mes tuiles "en vrac" de 32 x 32 en 4 x (16 x 16)
Dernière modification par GeGaX (Mon 13 January 2020 21:09)
Hors ligne
#4 Tue 14 January 2020 08:12
- GeGaX
- Participant occasionnel
- Date d'inscription: 20 May 2019
- Messages: 27
Re: QGIS/GDAL: gdal_polygonise.py et ogr2ogr
Sur 512 tuiles en KML, 4 sont en "vrac" je ne sais pas trop pourquoi sachant que les shp sont ok, j'ai une hypothèse sur le nombre de lignes trop nombreuses ...
Pour ça je vais "découper" mes tuiles "en vrac" de 32 x 32 en 4 x (16 x 16)
Ça a résolu mon soucis des KML en "vrac", donc il y a bien une limitation quelconque
Je suis toujours preneur d'infos pour les points
- Réparer les polygones
- Polygones vers Lignes
en utilisant gdal/ogr si c'est possible
Le but étant d'avoir un script bash qui fonctionne sans QGIS
Hors ligne
#5 Wed 15 January 2020 17:51
- FloSnow
- Participant occasionnel
- Date d'inscription: 1 Jan 2010
- Messages: 28
Re: QGIS/GDAL: gdal_polygonise.py et ogr2ogr
Bonjour GeGaX.
Intéressant pour la limitation lors de la création des KML, comme quoi le volume des données compte en effet beaucoup.
- Pour l'étape "Réparer les polygones" :
Après quelques recherches, il ne semble pas y avoir encore de moyen d'utiliser cet outil de traitement directement sur console. J'ai trouvé une discussion pouvant apporter une solution dans l'avenir avec les nouvelles versions de QGIS mais sans ogr/gdal : https://github.com/qgis/QGIS-Enhancemen … issues/140
Au cas où, il est toujours possible de partir d'un script .py (script réalisé à partir du topic : https://gis.stackexchange.com/questions … processing) :
Code:
import sys from qgis.core import QgsApplication from qgis.analysis import QgsNativeAlgorithms # Chemin des modules python sys.path.append(r"C:\Program Files\QGIS 3.10\apps\qgis\python\plugins") # Initialisation de QGIS, sans l'interface qgs = QgsApplication([], False) qgs.initQgis() # Import et initialisation des outils de traitement import processing from processing.core.Processing import Processing Processing.initialize() # Cette ligne permet de prendre en compte les outils "natifs" de QGIS, dont fait partie "Réparer les géométries" QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms()) # Lancement du traitement "Réparer les géométries" processing.run("native:fixgeometries", {'INPUT':'input.shp','OUTPUT':'output.shp'})
Puis de le faire tourner en insérant son chemin dans la console (en partant du OSGeo4W Shell) :
Code:
python-qgis script.py
- Pour l'étape "Polygones vers Lignes" :
Il est possible d'extraire uniquement les contours des géométries, et donc de créer un shape de lignes, en utilisant une requête SQL via ogr2ogr :
Code:
ogr2ogr output.shp input.shp -dialect sqlite -f "ESRI Shapefile" -sql "select ST_ExteriorRing(geometry) as geometry, * from input"
"-dialect sqlite" semble être obligatoire pour permettre à la requête de fonctionner.
Il risque cependant d'y avoir des erreurs de géométries s'il y a des entités multi-parties avec des trous.
Cordialement.
Hors ligne