Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 29 August 2005 18:51

Nelly Martin-sig
Invité

rectagle d'emprise

De: NM
bonjour,

sous ArcView 9, je cherche à générer automatiquement un rectangle, qui engloge le (ou les) objet(s) de mon fichier de forme.

si il existe un script pour ça, est-ce possible avec des fichiers d'origine de polygones mais aussi à partir de points (et donc créer un rectangle englobant tous les points).

merci,

Nelly Martin

PS : j'ai vu que la question avait déjà été posée mais je n'ai pas trouvé la réponse.

 

#2 Wed 31 August 2005 09:24

Frederic Prally SETEGUE
Invité

Re: rectagle d'emprise

Bonjour,

Si tu n’as toujours pas trouvé de solution, je te propose d’utiliser la
routine suivante.

Procédure de mise en marche :
Code à coller dans Visual Basic Editeur d’ArcMap
Outils > Macros > Macro > Choisir le nom de la macro a exécuté dans la
liste
Attention cette routine ne fonctionne que sur la première couche de la
TOC

En espérant que cela puisse t’aider.

Public Sub CréationEmpriseLayer()
' Nom: CréationEmpriseLayer
' Création: frederic.prally@texte-a-enlever.setegue.fr
' Date: 31/08/2005
' Description: Affiche l'emprise des entités sélectionnées d'une couche
de type Ifeaturelayer

    Dim pMxDoc As IMxDocument
    Dim pMap As IMap
    Dim pLayer As ILayer
    Dim pFeatureLayer As IFeatureLayer
    Dim pFSelection As IFeatureSelection
    Dim pFCursor As IFeatureCursor
    Dim pEnvelope As IEnvelope
    Dim pTotalEnvelope As IEnvelope
   
    Set pMxDoc = ThisDocument
    Set pMap = pMxDoc.FocusMap
    Set pLayer = pMap.Layer(0)
   
    'Vérifie que la couche est bien de t ype IfeatureLayer
    If Not TypeOf pLayer Is IFeatureLayer Then
        MsgBox "Veuillez sélectionner une couche de type FeatureLayer."
_
        , vbExclamation, "Recherche emprise"
        Exit Sub
    End If
   
    Set pFeatureLayer = pLayer 'QI
   
    'Part 1 : Définition des entités sélectionnés
    Set pFSelection = pFeatureLayer
    If pFSelection.SelectionSet.count = 0 Then
        MsgBox "Veuillez sélectionner des entités sur la couche " &
pLayer.Name & "." _
        , vbExclamation, "Recherche emprise"
        Exit Sub
    End If
   
    pFSelection.SelectionSet.Search Nothing, False, pFCursor
   
    Dim pFeature As IFeature
    Set pFeature = pFCursor.NextFeature
    Set pTotalEnvelope = New Envelope
   
    'Récupérer l'étendue globale de la couche par union des emprises des
entités
    Do Until pFeature Is Nothing
            Set pEnvelope = pFeature.Shape.Envelope
            pTotalEnvelope.Union pEnvelope
    Set pFeature = pFCursor.NextFeature
    Loop
    'Part 2 : Appel de la procédure servant à créer un polygone
    Call AddGraphicPolygon(pTotalEnvelope)
End Sub

Public Sub AddGraphicPolygon(pMonEnvelope As IEnvelope)
    Dim pMxDoc As IMxDocument
    Set pMxDoc = ThisDocument
   
    'Création d'un polygon via les coordonnées de l'enveloppe
    Dim pPointCollection As IPointCollection
    Set pPointCollection = New Polygon
    Dim pEnvelope As IEnvelope
    Set pEnvelope = pMonEnvelope
    With pPointCollection
        .AddPoint pEnvelope.LowerLeft
        .AddPoint pEnvelope.UpperLeft
        .AddPoint pEnvelope.UpperRight
        .AddPoint pEnvelope.LowerRight
    End With

     'Création de l'élément graphique de forme rectangulaire
    Dim pGraphCont As IGraphicsContainer
    Set pGraphCont = pMxDoc.ActiveView
    Dim pElement As IElement
    Set pElement = New PolygonElement
    pElement.Geometry = pPointCollection
    Dim pFillElement As IFillShapeElement
    Set pFillElement = pElement
    pFillElement.Symbol.Color.NullColor = True
    pGraphCont.AddElement pElement, 0
   
    'Rafraichit la page active
    pMxDoc.ActiveView.Refresh

End Sub

__________________________________
PRALLY Frédéric



Cartographie et SIG

53, rue Charles Frérot - B.P.91
94253 Gentilly Cedex
Tél : 01.41.98.68.00

  frederic.prally@texte-a-enlever.setegue.fr

 

Pied de page des forums

Powered by FluxBB