Pages: 1
- Sujet précédent - Zoom relatif à un objet sélectionné ds une boucle en MapBasic - Sujet suivant
#1 Mon 27 October 2008 10:15
- robinevrard
- Juste Inscrit !
- Date d'inscription: 14 Oct 2008
- Messages: 8
Zoom relatif à un objet sélectionné ds une boucle en MapBasic
Bonjour à toutes et à tous,
Voici le sujet qui me conduit à faire appel à vos compétences.
Je souhaiterai exporter des images JPEG relatives à chacun des objets contenus dans une table. Le principe est donc le suivant : je lance une boucle relative à la table en question, et au sein de cette boucle, je programme un Exporter fenêtre.
Ceci fonctionne tel que je le souhaite à une exception près : je ne parviens pas à déterminer un seuil de zoom qui s'adapte précisément à chacun des objets, avant leur export au format JPEG.
Voici mon script :
Code:
--- Introduction d'un répertoire de fonctions MapBasic prédéfinies include "mapbasic.def" '--- Déclaration des différentes procédures declare sub main declare sub Exporter '--- Déclaration impérative de la procédure principale propre à MapBasic '--- Appel de la procédure Exporter sub main call Exporter end sub sub Exporter '--- Déclaration des variables utilisées au cours de la procédure Exporter dim carte_win_id, i as integer dim X, Y, P, v_perimetre_brick as float dim v_chem_exe, v_nom_brik as string '--- Enregistrement du chemin d'accès de l'application v_chem_exe=ApplicationDirectory$() '--- Ouverture de NomTable Open Table v_chem_exe & "03_Brick\NomTable.TAB" Interactive '--- Ouverture de la fenêtre carte Map From NomTable '--- Attribution du numéro identifiant la fenêtre lors de chaque nouvelle session carte_win_id = FrontWindow() '--- Lancement de la boucle select * from NomTable fetch Rec 1 from NomTable do until eot(NomTable)=true '--- Renseignement de la longitude de l'enregistrement sélectionné X = CentroidX(NomTable.obj) '--- Renseignement de la latitude de l'enregistrement sélectionné Y = CentroidY(NomTable.obj) '--- Renseignement du périmètre de l'enregistrement sélectionné P = CartesianPerimeter(NomTable.obj, "km") '--- Passage du périmètre de l'objet sélectionné dans une variable v_perimetre_brick = P '--- Recentre la carte sur le barycentre de l'enregistrement sélectionné Set Map Center (X,Y) XY Units "m" '--- Détermine un seuil de zoom égal au périmètre de l'enregistrement sélectionné divisé par 2 (seuil déterminé empiriquement au préalable) Set Map Zoom v_perimetre_brick/2 Units "km" '--- Passage du libellé de l'objet sélectionné dans une variable v_nom_brik = NomTable.Libelle '--- Export de la fenêtre carte, actuellement centrée sur l'enregistrement sélectionné Save Window carte_win_id As v_chem_exe & "05_Resultats\" & v_nom_brik & ".JPG" Type "JPEG" fetch next from NomTable loop end sub
'
Alors si vous avez des pistes...
Merci de votre attention,
Hors ligne
#2 Mon 27 October 2008 10:50
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Zoom relatif à un objet sélectionné ds une boucle en MapBasic
Bonjour
Si vous ne rajoutez pas l'objet aux couches représentées (auquel cas un Set Map Zoom Entire Layer 1 ferait l'affaire), je vous conseille le passage par rect_obj = MBR(obj) qui produit le rectangle englobant et ObjectGeography(rect_obj,3) - ObjectGeography(rect_obj,1) qui donne sa largeur (maxX - minX)
Hors ligne
#3 Mon 27 October 2008 14:26
- robinevrard
- Juste Inscrit !
- Date d'inscription: 14 Oct 2008
- Messages: 8
Re: Zoom relatif à un objet sélectionné ds une boucle en MapBasic
Merci beaucoup pour vos conseils Maurice.
Après avoir testé vos deux propositions, j'ai opté pour la première car elle adpate parfaitement le zoom à la géométrie de chaque objet, tandis que la seconde ne donne pas toujours un résultat optimum.
Au revoir et bon après-midi,
Hors ligne
Pages: 1
- Sujet précédent - Zoom relatif à un objet sélectionné ds une boucle en MapBasic - Sujet suivant