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


