banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Wed 06 April 2016 18:36

Roman123
Juste Inscrit !
Date d'inscription: 4 Apr 2016
Messages: 3

Automatisation de cartes sous ArcGis

Bonjour,

Je débute dans mon apprentissage de la géomatique.

Je souhaiterais développer un modèle builder ou un script python pour automatiser des cartes.

Mon jeu de données est le suivant :
=> un fichier shp des codes postaux des régions
=> un fichier shp des cresta (limite administrative propre à l’assurance)
=> un fichier excel renfermant l'info à cartographier.

La plupart des cartes à réaliser sont des cartes de vitesse de vent à l'échelle du code postal.

Du coup, j'aimerais développer un programme qui permette que les différents shp se mettent à jour en fonction du contenu de la feuille Excel puis automatiser la mise en page (titre, légende, échelle, etc.) et l'export de la carte en format image.

Pourriez-vous me donner quelques pistes pour m'aider à développer ce programme ?

Merci d'avance et bonne soirée.

Hors ligne

 

#2 Thu 07 April 2016 09:03

nitram
Participant assidu
Lieu: Brest
Date d'inscription: 19 May 2009
Messages: 989
Site web

Re: Automatisation de cartes sous ArcGis

Bonjour,

les différents shp se mettent à jour en fonction du contenu de la feuille Excel


-> Une jointure entre votre excel et votre shape : http://pro.arcgis.com/fr/pro-app/help/d … elates.htm

automatiser la mise en page (titre, légende, échelle, etc.) et l'export de la carte en format image


-> Création d'atlas avec éléments dynamiques : http://desktop.arcgis.com/fr/desktop/la … arcgis.htm

Martin

Hors ligne

 

#3 Thu 07 April 2016 18:20

Roman123
Juste Inscrit !
Date d'inscription: 4 Apr 2016
Messages: 3

Re: Automatisation de cartes sous ArcGis

Salut Martin,

Merci pour ta réponse.

En fait je ne souhaite pas faire un atlas. J'aimerais réaliser un petit programme python ou un modèle builder permettant de tout automatiser même la jointure un peu à la manière de philcarto et ainsi sortir automatiquement la carte correspondante au contenu du fichier excel. Un programme où il y aurait que le chemin d'accès du fichier excel à modifier, le fond de carte étant tjs le même.

J'imagine que le programme doit contenir :
=> La procédure d'import du fichier excel avec la définition des onglets et du chemin d'accès;
=> Le fichier mxd avec les shp faisant office de modèle (mise en page et légende formatées);
=> Le process permettant la jointure;
=> Et la procédure d'export de la carte en format image.

Je ne sais si c'est possible de le faire sous ArcGis en utilisant le langage python ?

Roman.

Hors ligne

 

#4 Thu 07 April 2016 20:16

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: Automatisation de cartes sous ArcGis

Bonjour,

Avec le module arcpy.mapping, il est sans doute possible de faire quelque chose : Getting started with arcpy.mapping tutorial

A+

Franck

Hors ligne

 

#5 Sun 08 May 2016 18:00

Roman123
Juste Inscrit !
Date d'inscription: 4 Apr 2016
Messages: 3

Re: Automatisation de cartes sous ArcGis

Bonjour,

Merci pour le tutoriel : j'ai finalement réussi à créer un petit programme python mais il y a encore quelques parties du code qui ne fonctionnent pas comme je le souhaiterais.

=> Le premier problème concerne la jointure entre le fichier shp et le dbf. La jointure fonctionne bien mais j'aimerais ne pas l’appliquer sur mon fichier shp d'origine. Pour cela j'ai généré une couche à partir du fichier shp d'origine et j'ai appliqué la jointure sur cette couche générée. La jointure s’applique bien sur la couche générée mais elle s'applique toujours également sur le fichier shp d'origine. Je ne comprends pas.

=> Le deuxième problème concerne l'application d'une symbologie d'une couche sur la couche qui contient la jointure. Je ne parviens pas à l'appliquer. J'ai pourtant bien respecté l'aide en ligne d'ArcGis : l'un des champs de la couche qui contient la jointure a bien le même nom que le champ de la couche de symbologie (dans le code le nom du champ sur lequel doit s'appliquer la symbologie est "Vv_REF"). Je ne comprends pas non plus. 


Je vous remercie d'avance pour votre aide,
Roman.

Hors ligne

 

#6 Tue 10 May 2016 09:00

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Automatisation de cartes sous ArcGis

Salut,

Pour ton premier problème, ta couche DBF est une table avec des données attributaires et tu veux joindre une partie de ces données avec une partie de tes données de ta couche SHP pour créer une nouvelle couche en sortie. Donc :

Code:

#Je créer une GDB où sera stocké l'ensemble de mes données (ton .dbf et ton .shp) à la main ou en Python si tu veux automatiser le tout. 

#Pour le Python :

gdb = r"S:\Cartographie" + "\\" + dossier + "\dossier" + "\\" + etc.... + "\\" + dossier_projet + "\\" + id_projet + ".gdb" (ton arborescence) 

tonshp = gdb + "\\tonshp"
tondbf = gdb + "\\tondbf"
data1 = r"S:\Cartographie" + "\\" + dossier + "\dossier" + "\\" + etc.... + "\\" + dossier_projet (ton arborescence) 


arcpy.CopyFeatures_management (tonshp, tonshp_2)
print "Copie de la couche 'tonshp' en 'tonshp2' Ok !"

arcpy.MakeFeatureLayer_management (tonshp2, "tonshp_lyr")
arcpy.AddJoin_management ("tonshp_lyr", "champs de jointure", "tondbf", "champs de jointure") #Jointure (pour ajouter les éléments dans la table)
print ("Jointure Ok!")

Ici, ta jointure sera faite sur la couche SHP copiée. On ne touchera pas à ta couche originelle.

Ensuite pour ton deuxième problème, il faut que tu créer un .lyr de symbologie depuis ta couche dans un .MXD.
Ensuite pour automatiser, il faut appliquer le .lyr à ton shp via une fonction python :

Code:

arcpy.ApplySymbologyFromLayer_management("tonshp2", "tasymbo.lyr")

Ensuite tu peux importer l'ensemble de ces couches dans un .mxd propre que tu peux créer à la main dans un premier temps (.mxd vierge) et basculer l'ensemble de tes traitements par la suite :

Code:

MxdOut = data1 + "\\" + "Projet.mxd"
MxdIn = r"S:\Cartographie\Projet\Projet.mxd" (par exemple hein ;) )
DataFrameName = "Couches"

def projet (MxdIn, MxdOut, DataFrameName, inFC):
    mxd = arcpy.mapping.MapDocument (MxdIn)
    df = arcpy.mapping.ListDataFrames (mxd, DataFrameName)[0]

    for Fc in inFC:
        arcpy.MakeFeatureLayer_management (Fc, os.path.basename (Fc))
        addLayer = arcpy.mapping.Layer (os.path.basename (Fc))
        addLayer.name = os.path.basename (Fc)
        arcpy.mapping.AddLayer (df, addLayer)
        del addLayer

    if MxdIn == r"S:\Cartographie\Projet\Projet.mxd" :
        mxd.saveACopy (MxdOut)
    else:
        mxd.save() #Sauvegarde du document (template) actuel sans modification

Voilà dans les grandes lignes, c'est du bricolage hein, je ne suis pas du tout un pro, mais en mettant un peu le nez dedans, tu peux faire quelques trucs sympa wink

Avec les fonctions "mapping" tu peux configurer ton .mxd (échelle, mise en page etc...) de manière à tout automatiser !

Dernière modification par Loutre (Tue 10 May 2016 09:01)

Hors ligne

 

Pied de page des forums

Powered by FluxBB