Création et ouverture de maps dans OrbisGIS Monomap

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Création et ouverture de maps dans OrbisGIS Monomap

Camila
Bonjour !

Après de nombreuses recherches et tests, j'ai toujours des difficultés avec les maps.
Je travaille sur la version OrbisGis Monomap. Voilà ce que j'aimerai pouvoir faire  :

1) Créer des nouvelles cartes dans le gestionnaire de cartes et leur attribuer un nom en passant par le BeanShell, au lieu de faire clic-droit -> "nouvelle carte vide".

2) Ouvrir ces cartes du gestionnaire de cartes dans le Map Editor en passant par le BeanShell plutôt que de faire clic-droit -> "ouvrir la carte".

Cela me permettrait d'ouvrir une carte avant d'utiliser la fonction Map_AddLayer() de manière à ordonner les couches que je crée dans différentes cartes en fonction de la thématique... et d'avoir ainsi une arborescence plus "propre" sans que cela se fasse manuellement (clic-droit, etc...)

Autre chose, je voulais savoir si vous aviez eu le temps de jeter un œil au script beanshell que je vous avais envoyé pour l'optimiser... Erwan me disait qu'il y avait possibilité de diviser par 2 le temps de traitement de mes scripts... Alors ça m'intéresse beaucoup ! :)

J'aimerais pouvoir avancer sur ces deux aspects avant mon départ...(surtout sur les maps)

Merci de me tenir informée .
Bonne fin de journée !
Cordialement,

Camila


Reply | Threaded
Open this post in threaded view
|

Re: Création et ouverture de maps dans OrbisGIS Monomap

Camila
Bonjour,

En fait, dans la version monomap, mes scripts Beanshell s'exécute beaucoup plus rapidement... Donc tant mieux !
Je peux même en lancer plusieurs d'un coup sans que ça prenne trop de temps...
C'était juste pour info... Car ce n'est finalement peut-être pas la peine de revoir la structure de mes scripts .

Merci.
Camila
Reply | Threaded
Open this post in threaded view
|

Re: Création et ouverture de maps dans OrbisGIS Monomap

Nicolas F.
Administrator
Bonjour Camila,

Je suis désolé de te répondre aussi tardivement, je n'avais pas mis d'alerte sur ce forum.

En attendant les fonctions SQL Execute pour les remplacer, voici les scripts BeanShell :

Pour ouvrir une carte sur le disque dur :
// Load and open a map stored in hard drive
//
import org.orbisgis.core.Services;
import org.orbisgis.core.layerModel.OwsMapContext;
import org.orbisgis.view.map.MapElement;
import org.orbisgis.view.background.BackgroundManager;
import org.orbisgis.view.map.jobs.ReadMapContextJob;

// Create an empty Map
OwsMapContext mapContext = new OwsMapContext();
filePath = "/home/user/OrbisGIS/maps/MaCarte.ows";
// Load the map content from a file
mapContext.read(new FileInputStream(filePath));
// Define an editable map
MapElement mapElement = new MapElement(mapContext, new File(filePath));
// Open the map in all availabe editors
BackgroundManager backgroundManager = Services.getService(BackgroundManager.class);
backgroundManager.backgroundOperation(new ReadMapContextJob(mapElement));


Pour sauver la carte courante (mc correspond à une instance de MapContext) :

// Save the current map context in the specified folder
mc.write(new FileOutputStream("/home/user/OrbisGIS/maps/test.ows"));

Sauvegarder une carte vide, avec un titre.
// Save empty map
import org.orbisgis.core.layerModel.OwsMapContext;
import java.util.Locale;

OwsMapContext mapContext = new OwsMapContext();
mapContext.open(null);
//set a title with the system language
mapContext.getDescription().addTitle(Locale.getDefault(),"My Map");
mapContext.close(null);
mapContext.write(new FileOutputStream("/home/user/OrbisGIS/maps/test2.ows"));

Il est possible de créer des fonctions dans BeanShell :
http://www.beanshell.org/manual/bshmanual.html#Scripted_Methods

-Nicolas
Reply | Threaded
Open this post in threaded view
|

Re: Création et ouverture de maps dans OrbisGIS Monomap

Camila
Bonjour,

Merci beaucoup pour l'aide ! ça m'a été vraiment très utile!

J'arrive à créer des cartes, les ouvrir en début de script et aller stocker les couches qui se créent dans ma boucle dans celles-ci...

Néanmoins j'ai d'autres petites interrogations qui persistent...

1*** Après avoir créer ma carte, l'avoir ouverte et y avoir stocker des couches dedans, je souhaiterais ensuite pouvoir l'enregistrer... je m'explique...
Si par exemple, je crée une carte "Age des bâtiments" avec toutes mes couches qui se stockent dedans, et qu'ensuite, je souhaite lancer le script "type d'ilots" qui crée une carte spécifique pour y stocker les cartes... j'ai la fenêtre "Sauver les documents -- Contexte cartographique - age des batiments - Sauver - Sauver tout - Ne rien sauvegarder - Annuler"... qui apparaît avant l'exécution du script...  Je souhaiterais en fin de script pouvoir sauver la carte récemment créée et remplie par des couches, et cela via un script beanshell plutôt que d'avoir la fenêtre qui s'affiche... Ainsi ma carte est "sauvée" et si je lance un autre script, celle-ci se ferme, une autre carte se crée, etc... etc... sans qu'une fenêtre "sauver" s'ouvre..


2*** Je ne sais pas si vous aurais le temps d'ici-là pour les fichiers XML .se mais cette fois-ci pour les classes d'intervalle ??

3*** Je n'ai toujours pas de trouver de solution pour exécuter des scripts les uns après les autres.
        - exécuter le script 1;
        - puis exécuter le script 2 uniquement une fois le script 1 terminé, exécuté...

Je souhaiterais à la fin de mes scripts (pour les indicateurs que l'on représente aussi sous forme de graphiques), appeler un script avec la fonction :

String pg ="/sxturb1/data1/legroux/PLATEFORME_ACCLIMAT/GRAPHIQUES/evo_densite_population.bsh";
File g = new File(pg);
if (g.exists()){
    this.interpreter.source(pg);
    }

Cela me permettrait en un seul script de traiter mes données, etc... Puis une fois mes tables créées, etc... Ouvrir le script qui génère mes graphiques directement (sans avoir à l'ouvrir manuellement donc...) Or, lorsque j'ajoute ce bout de script à la fin de mes scripts, c'est-à-dire après ma boucle for... Celui-ci ne s'exécute pas après la fin de la boucle...et ne trouve donc pas les tables nécessaires à la génération de graphiques (puisqu'elles n'ont pas été encore créées dans mon geocatalog)... Je ne trouve pas le moyen pour faire en sorte que ce bout de script s'exécute uniquement à la fin de ma boucle FOR, c'est-à-dire à la fin de tous mes traitements.


4*** Autre chose que j'aimerais pouvoir faire... Lorsque j'utilise la fonction SQL Map_AddLayer pour stocker mes couches dans la carte qui est ouverte, celles-ci sont toutes automatiquement visibles c'est-à-dire "cochées".. j'aimerais que mes couches soient décochées dans mon TOC afin que l'utilisateur puisse choisir quelle couche il souhaite visualiser et les coche lui même. Je ne me rends pas compte de si cela est compliqué à faire ou non ??

Voilà les ultimes points que j'aimerai éclaircir et développer... Je suis consciente qu'en si peu de temps, tout ne sera peut-être pas possible surtout si vous êtes sur-booké... Et surtout que j'ai du mal à me rendre compte du temps que cela peut prendre (?)

Merci de me tenir informée !
Cordialement,
Bonne après-midi.
Camila
Reply | Threaded
Open this post in threaded view
|

Re: Création et ouverture de maps dans OrbisGIS Monomap

Nicolas F.
Administrator
Bonjour Camila,

L'interface pour sauvegarder le document s'ouvre si MapElement.isModified() est à vrai.

Soit il faut appeler MapElement.setModified(false); pour annuler les modifications, soit il faut appeler MapElement.save() afin de sauvegarder les changements.

Je répondrai aux autres questions demain.
Reply | Threaded
Open this post in threaded view
|

Re: Création et ouverture de maps dans OrbisGIS Monomap

Camila
Bonjour,

Je viens de voir votre réponse... Je n'ai pas reçu le mail m'indiquant que vous aviez répondu.
Je me penche là-dessus maintenant ! Merci !
Camila
Reply | Threaded
Open this post in threaded view
|

Re: Création et ouverture de maps dans OrbisGIS Monomap

Camila
In reply to this post by Nicolas F.
Bonjour,

J'ai essayé d'utiliser mapElement.save();
Mais ça ne fonctionne pas...
Je fais à la fin de mes scripts :

if (mapElement.isModified()) }
        mapElement.save();
}

Je n'ai aucune erreur qui apparaît, mais les modifications ne sont pas sauvegardées...
Savez-vous d'où pourrait venir l'erreur ?

Merci.
Cordialement,
Camila
Reply | Threaded
Open this post in threaded view
|

Re: Création et ouverture de maps dans OrbisGIS Monomap

Nicolas F.
Administrator
Bonjour Camila,

Voici un script qui permet d'aller chercher la carte chargée dans le logiciel puis d'ignorer les changements ou la sauvegarder :


import org.orbisgis.core.Services;
import org.orbisgis.view.edition.EditorManager;
import org.orbisgis.view.edition.EditableElement;

MapElement fetchMapElement() {
      EditorManager editorManager = Services.getService(EditorManager.class);
      for (EditableElement editable : editorManager.getEditableElements()) {
              if (editable instanceof MapElement) {
                      return (MapElement)editable;
              }
      }
      return null;
}
MapElement loadedMap = fetchMapElement();
print("Is map edited ? "+loadedMap.isModified());
// Discard Change
loadedMap.setModified(false);
print("Now ? "+loadedMap.isModified());
// Or save it on disk
loadedMap.save();

L'utilisation de BeanShell pour l'instant c'est une roue de secours. Après il y aura les fonction SQL MAP_ qui permettront ces opérations.
Reply | Threaded
Open this post in threaded view
|

Re: Création et ouverture de maps dans OrbisGIS Monomap

Camila
Bonjour,

Oui je pense qu'il est mieux que j'attende le développement de ces fonctions SQL pour cela...
Est-ce que vous pourrez me tenir au courant au fur et à mesure lorsque ces fonctions seront disponibles?
Merci encore!

Camila