géomatique....HELP !
Modérateur : WIN32-[GG]
géomatique....HELP !
Bonjour à vous !
je m'inscrit aujourd'hui sur votre site car j'y navigue depuis quelques jour où je viens chercher des infos, seulement je suis un NOOB++ du batch alors j'ai besoin de vous; je m'explique:
J'ai récupéré un petit script qui me permet de transformer des données cadastrales en "couches"(=~calques en DAO) de type "ESRI Shapefiles". Il dézippe à deux reprises mes fichiers d'origine (1zip dans un autre) puis fusionne les résultats (commande "-append" de l'outil "ogr2ogr"; outil de géomaticien)
Seulement j'ai deux ou trois petits soucis:
- j'aimerai renommer tous les fichiers de sortie afin de leur rajouter l'année à la fin (variable)
- j'aimerai aussi que mon script aille faire son job dans tous les dossiers voisins de l'endroit où je le place
- on verra le 3eme soucis plus tard...
Il se nomme "EDIGEO2SHP", il est en pièce jointe, en .txt pour éviter le blocage du forum.
Merci d'avance
je m'inscrit aujourd'hui sur votre site car j'y navigue depuis quelques jour où je viens chercher des infos, seulement je suis un NOOB++ du batch alors j'ai besoin de vous; je m'explique:
J'ai récupéré un petit script qui me permet de transformer des données cadastrales en "couches"(=~calques en DAO) de type "ESRI Shapefiles". Il dézippe à deux reprises mes fichiers d'origine (1zip dans un autre) puis fusionne les résultats (commande "-append" de l'outil "ogr2ogr"; outil de géomaticien)
Seulement j'ai deux ou trois petits soucis:
- j'aimerai renommer tous les fichiers de sortie afin de leur rajouter l'année à la fin (variable)
- j'aimerai aussi que mon script aille faire son job dans tous les dossiers voisins de l'endroit où je le place
- on verra le 3eme soucis plus tard...
Il se nomme "EDIGEO2SHP", il est en pièce jointe, en .txt pour éviter le blocage du forum.
Merci d'avance
- Fichiers joints
-
- EDIGEO2SHP.7z
- (510 Octets) Téléchargé 798 fois
Modifié en dernier par remidici le 23 juin 2018 16:24, modifié 1 fois.
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: géomatique....HELP !
Bonjour,
Pour pouvoir t'aider il faudrait plus de détails, par exemple que contiennent les différents dossiers après chaque traitement ?
En attendant je me suis amusé à optimiser ton code :
Pour pouvoir t'aider il faudrait plus de détails, par exemple que contiennent les différents dossiers après chaque traitement ?
En attendant je me suis amusé à optimiser ton code :
Code : Tout sélectionner
@echo on
setlocal enableextensions enabledelayedexpansion
set 7zip="C:\Program Files\7-Zip\7z.exe"
set ogr="C:\Program Files\QGIS\bin\ogr2ogr" -f "ESRI Shapefile"
set WORKSPACE=U:\cadastre_com1\com-001
cd /d %WORKSPACE% || exit /B 1
for /f "tokens=*" %%A in ('dir /b /ad "%WORKSPACE%"') do (
set DOSSIER=%WORKSPACE%\%%~A
for /f "tokens=*" %%G in ('dir "%%~dpnA\*.zip" /b') do (
MKDIR !DOSSIER!\TAR
call %7zip% e "%%~dpnA\%%~nxG" -o!DOSSIER!\TAR\ -r
MKDIR !DOSSIER!\FEUILLES\%%~nG
call %7zip% e "!DOSSIER!\TAR\%%~nxG" -o!DOSSIER!\FEUILLES\%%~nG\ -r
MKDIR !DOSSIER!\FEUILLES_SHP\%%~nG
call %ogr% !DOSSIER!\FEUILLES_SHP\%%~nG !DOSSIER!\FEUILLES\%%~nG\*.THF
MKDIR !DOSSIER!\COMMUNE
call %ogr% -append !DOSSIER!\COMMUNE !DOSSIER!\FEUILLES_SHP\%%~nG
)
MKDIR %WORKSPACE%\FUSION
call %ogr% -append %WORKSPACE%\FUSION !DOSSIER!\COMMUNE
)
pause
Endlocal
exit
Re: géomatique....HELP !
Bonjour, et merci de cette réponse.
Je viens de tester le script que vous m'avez modifié. Malheureusement, pour l'instant il ne fait rien......
J'ai déplacé la commande "-f "shapefile" qui est un argument à écrire après chaque appel de l'exécutable "ogr2ogr" (ogr2ogr est un outil de transformation de fichier, il faut lui dire le type du fichier de sortie que l'on désire à chaque fois)
Le .bat existant crée les dossiers suivants:
Dans chaque dossier existant:
- il dézippe le .tar.bz2 en un .tar et le range dans un premier dossier nommé "TAR"
- il dézippe ce .tar et le range dans un nouveau dossier nommé "feuilles"
- il transforme ce fichier en de multiples "shapefiles" et les range dans un dossier "feuilles.shp"
Enfin; dans le dossier parent; il crée un dossier fusion dans le quel il fusionne entre elles toutes les couches shapefiles des sous-dossiers qui portent le même nom.
En attendant, je continue à chercher et modifier.
Je viens de tester le script que vous m'avez modifié. Malheureusement, pour l'instant il ne fait rien......
J'ai déplacé la commande "-f "shapefile" qui est un argument à écrire après chaque appel de l'exécutable "ogr2ogr" (ogr2ogr est un outil de transformation de fichier, il faut lui dire le type du fichier de sortie que l'on désire à chaque fois)
Le .bat existant crée les dossiers suivants:
Dans chaque dossier existant:
- il dézippe le .tar.bz2 en un .tar et le range dans un premier dossier nommé "TAR"
- il dézippe ce .tar et le range dans un nouveau dossier nommé "feuilles"
- il transforme ce fichier en de multiples "shapefiles" et les range dans un dossier "feuilles.shp"
Enfin; dans le dossier parent; il crée un dossier fusion dans le quel il fusionne entre elles toutes les couches shapefiles des sous-dossiers qui portent le même nom.
En attendant, je continue à chercher et modifier.
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: géomatique....HELP !
Est-ce que tu peux me passer un de tes fichiers tar.bz2 pour que je puisse tester en situation réelle ?
Tu peux le déposer ici : https://jirafeau.murky-lane.top/
Effectivement quelques erreurs au niveau du script, je ne l'avais pas testé, voilà la correction :
Tu peux le déposer ici : https://jirafeau.murky-lane.top/
Effectivement quelques erreurs au niveau du script, je ne l'avais pas testé, voilà la correction :
Code : Tout sélectionner
@echo off
setlocal enableextensions enabledelayedexpansion
set WORKSPACE=U:\cadastre_com1\com-001
cd /d %WORKSPACE% || exit /B 1
for /f "tokens=*" %%A in ('dir /b /ad "%WORKSPACE%"') do (call :fonction "%%~dpnA")
pause
Endlocal
exit
:fonction
for /f "tokens=*" %%G in ('dir /b "%~1\*.bz2"') do (
"%ProgramFiles(x86)%\7-Zip\7z.exe" e "%~1\%%~nxG" -o"%~1\TAR\" -r
"%ProgramFiles(x86)%\7-Zip\7z.exe" e "%~1\TAR\%%~nG" -o"%~1\FEUILLES\%%~nG\" -r
cls
echo. & echo 1 - Decompression de l'archive %%~nxG ==^>^> OK
echo. & echo 2 - Extraction de l'archive %%~nG ==^>^> OK
echo.
"C:\Program Files\QGIS\bin\ogr2ogr.exe" -f "ESRI Shapefile" %~1\FEUILLES_SHP\%%~nG %~1\FEUILLES\%%~nG\*.THF
"C:\Program Files\QGIS\bin\ogr2ogr.exe" -f "ESRI Shapefile" -append %~1\COMMUNE %~1\FEUILLES_SHP\%%~nG
)
MKDIR %WORKSPACE%\FUSION
"C:\Program Files\QGIS\bin\ogr2ogr.exe" -f "ESRI Shapefile" -append %WORKSPACE%\FUSION %~1\COMMUNE
goto :eof
rem
Re: géomatique....HELP !
Bonjour Barnabe,
sauf erreur de ma part, j'ai envoyé ou dépose les fichiers sur le site que tu disais mais je reprend aujourd'hui le fil de discution car:
- j'ai réussi à faire en sorte d'ajouter l'année au nom de fichier (_2017)
mais j'aimerai ajouter une boucle supplémentaire afin d'éxécuter ce .bat depuis le dossier parent (com) à contrario du script précédent qui travaillait sur un seul dossier (com\com-054)
Cependant je n'arrive pas a ajouter une boucle: mon script ne fait plus rien et m'annonce à la fin: "fichier inexistant" !!
je le dépose ici:
Et ci-dessous un zip contenant deux communes si quelqu'un veut s'y tester.
https://jirafeau.murky-lane.top/f.php?h=3KXilHUC&d=1
Merci d'avance à ceux qui m'aideront
sauf erreur de ma part, j'ai envoyé ou dépose les fichiers sur le site que tu disais mais je reprend aujourd'hui le fil de discution car:
- j'ai réussi à faire en sorte d'ajouter l'année au nom de fichier (_2017)
mais j'aimerai ajouter une boucle supplémentaire afin d'éxécuter ce .bat depuis le dossier parent (com) à contrario du script précédent qui travaillait sur un seul dossier (com\com-054)
Cependant je n'arrive pas a ajouter une boucle: mon script ne fait plus rien et m'annonce à la fin: "fichier inexistant" !!
je le dépose ici:
Code : Tout sélectionner
@echo on
setlocal enableextensions
set WORKSPACE=C:\test_stage\com
set /p ANNEE=Saisir l'annee:
cd /d %WORKSPACE%
for /f "tokens=*" %%A in ('dir /b /ad "%WORKSPACE%"') do (
for /f "tokens=*" %%B in ('dir /b /ad "%%A"') do (
for /f "tokens=*" %%G in ('dir "%%~dpnB" /b /a-d') do (
MKDIR %WORKSPACE%\%%A\%%B\TAR
call "C:\Program Files\7-Zip\7z.exe" e %%~dpnB\%%G -o%WORKSPACE%\%%A\%%B\TAR\ -r
MKDIR %WORKSPACE%\%%A\%%B\FEUILLES\%%~nG
call "C:\Program Files\7-Zip\7z.exe" e %WORKSPACE%\%%A\%%B\TAR\%%~nG -o%WORKSPACE%\%%A\%%B\FEUILLES\%%~nG\ -r
MKDIR %WORKSPACE%\%%A\%%B\FEUILLES_SHP\%%~nG
call ogr2ogr -f "ESRI Shapefile" %WORKSPACE%\%%A\%%B\FEUILLES_SHP\%%~nG %WORKSPACE%\%%A\%%B\FEUILLES\%%~nG\*.THF
MKDIR %WORKSPACE%\%%A\%%B\COMMUNE
MKDIR %WORKSPACE%\%%A\FUSION
for %%f in (%WORKSPACE%\%%A\%%B\FEUILLES_SHP\%%~nG\*.shp) do (
call ogr2ogr -f "ESRI shapefile" -s_srs EPSG:3944 -t_srs EPSG:3944 -append "%WORKSPACE%\%%A\%%B\COMMUNE\%%~nf_%ANNEE%.shp" "%%f"
call ogr2ogr -f "ESRI shapefile" -s_srs EPSG:3944 -t_srs EPSG:3944 -append "%WORKSPACE%\%%A\FUSION\%%~nf_%ANNEE%.shp" "%%f"
)
)
)
)
pause
Endlocal
exit
https://jirafeau.murky-lane.top/f.php?h=3KXilHUC&d=1
Merci d'avance à ceux qui m'aideront
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: géomatique....HELP !
Bonjour remidici,
Tu as peut-être déposé le fichier sur mon site mais tu ne m'avais pas fourni le lien pour le télécharger, maintenant c'est chose faite
Ton script pique les yeux, trop de boucles for, trop de répétitions de code.
Désolé pour les critiques, je sais que tu es débutant mais je te le dis quand même pour que tu essaies de progresser.
Voilà une version optimisée (pas ou peu de répétition de code) :
Une seule boucle FOR est nécessaire, par contre je n'ai pas bien compris sur quels fichiers exactement tu veux rajouter l'année, ça je te laisse faire à ta guise.
Dis-moi si tu vois des choses à améliorer, ou bien des bugs.
Tu as peut-être déposé le fichier sur mon site mais tu ne m'avais pas fourni le lien pour le télécharger, maintenant c'est chose faite
Ton script pique les yeux, trop de boucles for, trop de répétitions de code.
Désolé pour les critiques, je sais que tu es débutant mais je te le dis quand même pour que tu essaies de progresser.
Voilà une version optimisée (pas ou peu de répétition de code) :
Code : Tout sélectionner
@echo off
setlocal enableextensions
set WORKSPACE=C:\test_stage\com
set archiveur=%ProgramFiles(x86)%\7-Zip\7z.exe
cd /d %WORKSPACE% || exit /B 1
for /f "tokens=*" %%A in ('dir /b /s "*.bz2"') do (call :fonction "%%~A" "%archiveur%")
pause
endlocal
exit
:fonction
%2 e "%~1" -o"%~dp1\TAR\" -r >nul
%2 e "%~dp1\TAR\%~n1" -o"%~dp1\FEUILLES\" -r >nul
echo. & echo Decompression de [%~nx1]
echo Extraction de [%~n1]
echo.
if not exist "%~dp1\FEUILLES_SHP" (MKDIR "%~dp1\FEUILLES_SHP")
call ogr2ogr -f "ESRI Shapefile" %~dp1\FEUILLES_SHP %~dp1\FEUILLES\*.THF
if not exist "%~dp1\COMMUNE" (MKDIR "%~dp1\COMMUNE")
call ogr2ogr -f "ESRI Shapefile" -s_srs EPSG:3944 -t_srs EPSG:3944 -append %~dp1\COMMUNE %~dp1\FEUILLES_SHP
pushd %~dp1
cd ..
if not exist "FUSION" (MKDIR "FUSION")
call ogr2ogr -f "ESRI Shapefile" -s_srs EPSG:3944 -t_srs EPSG:3944 -append FUSION %~dp1\COMMUNE
popd
goto :eof
rem
Dis-moi si tu vois des choses à améliorer, ou bien des bugs.
Re: géomatique....HELP !
Bonjour Barnabe et merci beaucoup pour ton aide
Tu as sacrément modifié mon script et en effet il a l'air plus performant (a l'air car je n'ai pas encore testé sur 285 communes!)
Je l'ai donc modifié un peu en ajoutant au nom de chaque fichier:
-le code insee de la commune contenu dans le nom de dossier parent
-l'année de traitement saisi par l'utilisateur au lancement du script.
Il me reste un petit soucis; soucis double: dans chaque dossier de commune, je voudrais supprimer les dossiers nommés "feuille-....." et celui nommé "TEMP".
(lignes 17 à 20). J'ai essayé avec plusieurs syntaxes mais jusqu'ici en vain.
Mon erreur te sautes t-elle aux yeux?
Mon script modifié ne "pique" pas trop
Quelqu'un d'autre aurait une solution?
Merci d'avance
Rémi
Tu as sacrément modifié mon script et en effet il a l'air plus performant (a l'air car je n'ai pas encore testé sur 285 communes!)
Je l'ai donc modifié un peu en ajoutant au nom de chaque fichier:
-le code insee de la commune contenu dans le nom de dossier parent
-l'année de traitement saisi par l'utilisateur au lancement du script.
Code : Tout sélectionner
@echo off
setlocal enableextensions
set WORKSPACE=C:\test_stage\comm
set archiveur=C:\Program Files\7-Zip\7z.exe
set /p ANNEE=Saisir l'annee:
cd /d %WORKSPACE% || exit /B 1
for /f "tokens=*" %%A in ('dir /b /s "*.bz2"') do (call :fonction "%%~A" "%archiveur%")
cd /d %WORKSPACE%
for /f %%B in ('dir /b /s "%WORKSPACE%"') do (
if not exist "%%~B\SHAPE" (MKDIR "%%~B\SHAPE")
for %%x in (%%~B\TEMP\*) do copy "%%~B\TEMP\%%~nxx" "%%~B\SHAPE\%%~nxB_%ANNEE%_%%~nxx"
DEL "%%~dpB\feuille-*" /f /s /q
RD "%%~dpB\feuille-*" /s /q
DEL "%%~dpB\TEMP" /f /s /q
RD "%%~dpB\TEMP" /s /q
)
pause
endlocal
exit
:fonction
%2 e "%~1" -o"%~dp1\TAR\" -r >nul
%2 e "%~dp1\TAR\%~n1" -o"%~dp1\FEUILLES\" -r >nul
echo. & echo Decompression de [%~nx1]
echo Extraction de [%~n1]
echo.
if not exist "%~dp1\FEUILLES_SHP" (MKDIR "%~dp1\FEUILLES_SHP")
call ogr2ogr -f "ESRI Shapefile" %~dp1\FEUILLES_SHP %~dp1\FEUILLES\*.THF
if not exist "%~dp1\COMMUNE" (MKDIR "%~dp1\COMMUNE")
call ogr2ogr -f "ESRI Shapefile" -s_srs EPSG:3944 -t_srs EPSG:3944 -append %~dp1\COMMUNE %~dp1\FEUILLES_SHP
pushd %~dp1
cd ..
if not exist "TEMP" (MKDIR "TEMP")
call ogr2ogr -f "ESRI Shapefile" -s_srs EPSG:3944 -t_srs EPSG:3944 -append TEMP %~dp1\COMMUNE
popd
goto :eof
(lignes 17 à 20). J'ai essayé avec plusieurs syntaxes mais jusqu'ici en vain.
Mon erreur te sautes t-elle aux yeux?
Mon script modifié ne "pique" pas trop
Quelqu'un d'autre aurait une solution?
Merci d'avance
Rémi
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: géomatique....HELP !
Ok je regarde ça quand je rentre du boulot, vers 20h00.
J'ai bien peur qu'il ne reste plus grand monde sur ce forum pour t'aider, à part moi.
Bonne journée.
J'ai bien peur qu'il ne reste plus grand monde sur ce forum pour t'aider, à part moi.
Bonne journée.
Re: géomatique....HELP !
Salut,
ne te presses pas car je pense avoir réussi.!
J'ai mis un ordinateur a travailler toute cette nuit. D'après mes calculs il lui faudra un peu moins de 12 heures.
Dans tous les cas, ton aide m'aura été précieuse: la façon dont tu as réécrit mon script m'a éclairé dans le déroulement des commandes.
Si il a fonctionné je le poste ici demain et si tu en as l'envie alors je serai preneur de tes critiques.
Bonne soirée.
Rémi
ne te presses pas car je pense avoir réussi.!
J'ai mis un ordinateur a travailler toute cette nuit. D'après mes calculs il lui faudra un peu moins de 12 heures.
Dans tous les cas, ton aide m'aura été précieuse: la façon dont tu as réécrit mon script m'a éclairé dans le déroulement des commandes.
Si il a fonctionné je le poste ici demain et si tu en as l'envie alors je serai preneur de tes critiques.
Bonne soirée.
Rémi
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: géomatique....HELP !
Est-ce que ça te convient ???
Code : Tout sélectionner
@echo off
setlocal enableextensions
set WORKSPACE=C:\test_stage\comm
set archiveur=C:\Program Files\7-Zip\7z.exe
set /p ANNEE="Saisir l'annee: "
cd /d %WORKSPACE% || exit /B 1
for /f "tokens=*" %%A in ('dir /b /s "*.bz2"') do (call :fonction "%%~A" "%archiveur%")
cd /d %WORKSPACE%
for /f "tokens=*" %%B in ('dir /b') do (
if not exist "%%~B\SHAPE" (MKDIR "%%~B\SHAPE")
for %%X in (%%~B\TEMP\*) do (copy "%%~B\TEMP\%%~nxX" "%%~B\SHAPE\%%~nB_%ANNEE%_%%~nX%%~xX")
for /f "tokens=*" %%X in ('dir /b /ad "%%~dpnB" ^| find "feuille"') do (RMDIR /s /q "%%~dpnB\%%~X")
RMDIR "%%~dpnB\TEMP" /s /q
)
pause
endlocal
exit
:fonction
%2 e "%~1" -o"%~dp1\TAR\" -r >nul
%2 e "%~dp1\TAR\%~n1" -o"%~dp1\FEUILLES\" -r >nul
echo. & echo Decompression de [%~nx1]
echo Extraction de [%~n1]
echo.
if not exist "%~dp1\FEUILLES_SHP" (MKDIR "%~dp1\FEUILLES_SHP")
call ogr2ogr -f "ESRI Shapefile" %~dp1\FEUILLES_SHP %~dp1\FEUILLES\*.THF
if not exist "%~dp1\COMMUNE" (MKDIR "%~dp1\COMMUNE")
call ogr2ogr -f "ESRI Shapefile" -s_srs EPSG:3944 -t_srs EPSG:3944 -append %~dp1\COMMUNE %~dp1\FEUILLES_SHP
pushd %~dp1
cd ..
if not exist "TEMP" (MKDIR "TEMP")
call ogr2ogr -f "ESRI Shapefile" -s_srs EPSG:3944 -t_srs EPSG:3944 -append TEMP %~dp1\COMMUNE
popd
goto :eof
rem