Page 1 sur 2

géomatique....HELP !

Posté : 12 janv. 2018 16:04
par remidici
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

Re: géomatique....HELP !

Posté : 14 janv. 2018 19:59
par barnabe0057
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 :

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 !

Posté : 15 janv. 2018 11:40
par remidici
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.

Re: géomatique....HELP !

Posté : 16 janv. 2018 00:33
par barnabe0057
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 :

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 !

Posté : 19 janv. 2018 12:28
par remidici
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:

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
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

Re: géomatique....HELP !

Posté : 20 janv. 2018 17:07
par barnabe0057
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) :

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
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.

Re: géomatique....HELP !

Posté : 23 janv. 2018 01:09
par remidici
Bonjour Barnabe et merci beaucoup pour ton aide :D
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
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 :?: :lol:
Quelqu'un d'autre aurait une solution?

Merci d'avance
Rémi

Re: géomatique....HELP !

Posté : 23 janv. 2018 07:41
par barnabe0057
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.

Re: géomatique....HELP !

Posté : 23 janv. 2018 22:26
par remidici
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

Re: géomatique....HELP !

Posté : 23 janv. 2018 23:49
par barnabe0057
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