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

GEODATA DAYS 2024

#1 Tue 12 February 2008 15:21

leo09
Juste Inscrit !
Date d'inscription: 8 Feb 2008
Messages: 4

Easy Calculate sous ArcGis

Bonjour,

J'aurai besoin d'un petit coup de main sur " Easy Calculate "
Dans le Script : draw_PointSquareBuffer


Il faut :
-renseigner dBufferDistance X et Y : Ok
-renseigner dAngle : Ok
-Enlever « ' » pour que ça puisse tourner : Ok
-Mais par contre, je ne vois pas comment (où) mettre le nom du champ (adjust the field name) ??

Quelqu’un pourrait m’aider ??

Merci !

Hors ligne

 

#2 Tue 12 February 2008 15:27

Marc Ruffie
Participant actif
Lieu: Schilik
Date d'inscription: 31 Jul 2007
Messages: 64
Site web

Re: Easy Calculate sous ArcGis

Bonjour,

Voici le code si je ne m'abuse.

Code:

'=========================
'create_Rectangles_FromPoints.cal
'Author: Ianko Tchoukanski
'http://www.ian-ko.com
'=========================
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Dim pPoint As IPoint
Dim pEnv As IEnvelope
Dim pTransform As ITransform2D
Dim pContainer As IGraphicsContainer
Dim pElement As IElement
Dim dBufferDistanceX As Double
Dim dBufferDistanceY As Double
Dim dAngle As Double
Dim pSegColl As ISegmentCollection
Dim Pi As Double
Dim pFeatcls As IFeatureClass
Dim pFeatLayer As IFeatureLayer
Dim iLayerOrder As Integer
Dim pFCursor As IFeatureCursor
Dim pFBuffer As IFeatureBuffer
'==========================
'adjust the parameters below
dBufferDistanceX = 30
dBufferDistanceY = 30
                                                   'dAngle = -9,4
iLayerOrder = 2
'Unremark the line below, remove quotes
'and adjust the field name
'if angle values from a field are to be used
                                                    dAngle = "[Angle]"
'==========================
Pi = 4 * Atn(1)
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap
Set pFeatLayer = pMap.Layer(iLayerOrder)
Set pFeatcls = pFeatLayer.FeatureClass
Set pFBuffer = pFeatcls.CreateFeatureBuffer
Set pFCursor = pFeatcls.Insert(True)
If (Not IsNull([Shape])) Then
  Set pPoint = [Shape]
  If (Not pPoint.IsEmpty) Then
    dAngle = dAngle * Pi / 180
    Set pEnv = pPoint.Envelope
    pEnv.Expand dBufferDistanceX, dBufferDistanceY, False
    Set pSegColl = New Polygon
    pSegColl.SetRectangle pEnv
    Set pTransform = pSegColl
    pTransform.Rotate pPoint, dAngle
    Set pFBuffer.Shape = pSegColl
    pFCursor.InsertFeature pFBuffer
  End If
End If

Je vous ai décalé qui doit être changé.

Vous devez mettre en commentaire la ligne
dAngle = -9,4
A l'aide d'une cote

Et vous devez activer la ligne

dAngle = "[Angle]"

En enlevant la cote...

Ainsi, la valeur de l'angle sera recherché dans le champ, et ne sera une valeur fixe. Cette modification n'est pas a faire si la valeur d'angle est fixe.

En espérant que j'ai compris votre question, et que j'ai su y répondre,
cordialement

Marc

Dernière modification par Marc Ruffie (Tue 12 February 2008 15:30)


Sauvez un arbre, mangez un castor!

Hors ligne

 

#3 Tue 12 February 2008 16:03

leo09
Juste Inscrit !
Date d'inscription: 8 Feb 2008
Messages: 4

Re: Easy Calculate sous ArcGis

Bonjour et merci pour cette réponse..

En faite, je n'arrive pas à faire tourner ce script.. je ne connais pas la programmation sous Arcgis et ne sais comment m'en sortir..
Je souhaite créer des polygone carrés en ayant les centroïdes, voilà comment je procède:

- Je clic droit sur le champ "Nom" de la table attributaire de la couche "Points" (couche de type points pour laquelle je souhaite créer un polygone carré pour chaque enregistrement).
- Calculate values puis je coche "advanced" (PreLogic Script Code)
- Là, je "load" le script "draw_PointSquareBuffer"
- Je mets les valeurs que je souhaite pour "dBufferDistanceX et Y", de même pour dAngle,
- j'enlève les "quotes" avant la ligne (comme demandé : Unremark the line below and adjust the field name")

Quand je fais Ok, le message d'erreur suivant apparait : A field name was not found or there were unbalanced quotation marks"

Je pense que l'erreur vient du fait que je n'ai pas "ajuster le nom du champ", mais je ne sais pas comment faire??

Merci pour votre aide

Hors ligne

 

#4 Tue 12 February 2008 16:13

Marc Ruffie
Participant actif
Lieu: Schilik
Date d'inscription: 31 Jul 2007
Messages: 64
Site web

Re: Easy Calculate sous ArcGis

Voici un exemple factice:

ou je veux des polygones qui font 62 mètres de coté, et une inclinaison de 45 degré:


Dans un premier temps, il faut créer la couche de polygone qui recevra les carrés. Disons qu'on la place en 2ème dans l'arborescence des shapes ouverts

Code:

'=========================
'create_Rectangles_FromPoints.cal
'Author: Ianko Tchoukanski
'http://www.ian-ko.com
'=========================
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Dim pPoint As IPoint
Dim pEnv As IEnvelope
Dim pTransform As ITransform2D
Dim pContainer As IGraphicsContainer
Dim pElement As IElement
Dim dBufferDistanceX As Double
Dim dBufferDistanceY As Double
Dim dAngle As Double
Dim pSegColl As ISegmentCollection
Dim Pi As Double
Dim pFeatcls As IFeatureClass
Dim pFeatLayer As IFeatureLayer
Dim iLayerOrder As Integer
Dim pFCursor As IFeatureCursor
Dim pFBuffer As IFeatureBuffer
'==========================
'adjust the parameters below
                                                                  dBufferDistanceX = 31
                                                                  dBufferDistanceY = 31
                                                                  dAngle = 45
                                                                  iLayerOrder = 1
'Unremark the line below, remove quotes
'and adjust the field name
'if angle values from a field are to be used
'dAngle = "[Angle]"
'==========================
Pi = 4 * Atn(1)
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap
Set pFeatLayer = pMap.Layer(iLayerOrder)
Set pFeatcls = pFeatLayer.FeatureClass
Set pFBuffer = pFeatcls.CreateFeatureBuffer
Set pFCursor = pFeatcls.Insert(True)
If (Not IsNull([Shape])) Then
  Set pPoint = [Shape]
  If (Not pPoint.IsEmpty) Then
    dAngle = dAngle * Pi / 180
    Set pEnv = pPoint.Envelope
    pEnv.Expand dBufferDistanceX, dBufferDistanceY, False
    Set pSegColl = New Polygon
    pSegColl.SetRectangle pEnv
    Set pTransform = pSegColl
    pTransform.Rotate pPoint, dAngle
    Set pFBuffer.Shape = pSegColl
    pFCursor.InsertFeature pFBuffer
  End If
End If

J'ai décalé les valeurs a changer:

le

ilayerorder correspond au numéro d'index de la couche de polygone. Il est égal a la place de la couche -1

C'est a dire que la, la couche se trouvait au deuxième plan, la valeur est donc égale à 1.


J'espère ne pas avoir été trop obscur. Si vous comprenez pas, dites exactement quelle opération vous voulez faire, avec les valeurs voulues.

Cordialement

Marc


Sauvez un arbre, mangez un castor!

Hors ligne

 

#5 Tue 12 February 2008 16:50

leo09
Juste Inscrit !
Date d'inscription: 8 Feb 2008
Messages: 4

Re: Easy Calculate sous ArcGis

Merci,
mais je rame..

Pour reprendre le problème:

J'ai un shape de type points avec 24 enregistrements. Ces points sont les centroïdes de carré de 5000m de coté que j'aimerai tracer.

En faisant des recherches sur les forums, j'ai trouvé le script que vous avez cité dans les messages mais je n'arrive pas à l'utiliser..

Tout d'abord, vous dites qu'il faut créer un shape polygone qui recevra les carrés : comment faite vous ? Créer un shape vide (0 lignes): comment fait t'on pour créer un shape vide?, ou utiliser par exemple le shape "buffer" que j'ai réalisé dans un premier temps en effaçant les informations contenues dedans (histoire d'avoir 24 lignes)

ensuite, je pense quand faisant un copier/coller de votre dernier script en mettant les valeurs qu'il me faut (X=2500, Y=2500, Angle=0), ça devrait marcher?

Merci encore pour votre aide..

Hors ligne

 

#6 Tue 12 February 2008 17:04

Marc Ruffie
Participant actif
Lieu: Schilik
Date d'inscription: 31 Jul 2007
Messages: 64
Site web

Re: Easy Calculate sous ArcGis

Pour créer une nouvelle couche de polygones, je vous laisse chercher, ça a été demandé plusieurs fois (sinon, utilisez la couche "buffer" que vous avez déjà créé.

Ensuite, je viens de vérifier, il faut créer un nouveau champ dans votre couche de ponctuels, de type réel double. (10,10)

Mettez votre fichier de ponctuel en premier plan, et votre fichier de polygone en second plan.

Ouvrez la table attributaire de votre fichier de point, et faites clic droit sur le champ que vous venez de créer, puis faites calculer les valeurs.

Dans la fenêtre qui s'ouvre, cochez la case "avancé".

Dans la zone de texte du haut, collez ce code

Code:

'=========================
'create_Rectangles_FromPoints.cal
'Author: Ianko Tchoukanski
'http://www.ian-ko.com
'=========================
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Dim pPoint As IPoint
Dim pEnv As IEnvelope
Dim pTransform As ITransform2D
Dim pContainer As IGraphicsContainer
Dim pElement As IElement
Dim dBufferDistanceX As Double
Dim dBufferDistanceY As Double
Dim dAngle As Double
Dim pSegColl As ISegmentCollection
Dim Pi As Double
Dim pFeatcls As IFeatureClass
Dim pFeatLayer As IFeatureLayer
Dim iLayerOrder As Integer
Dim pFCursor As IFeatureCursor
Dim pFBuffer As IFeatureBuffer
'==========================
'adjust the parameters below
dBufferDistanceX = 2500
dBufferDistanceY = 2500
dAngle = 0
iLayerOrder = 1
'Unremark the line below, remove quotes
'and adjust the field name
'if angle values from a field are to be used
'dAngle = "[Angle]"
'==========================
Pi = 4 * Atn(1)
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap
Set pFeatLayer = pMap.Layer(iLayerOrder)
Set pFeatcls = pFeatLayer.FeatureClass
Set pFBuffer = pFeatcls.CreateFeatureBuffer
Set pFCursor = pFeatcls.Insert(True)
If (Not IsNull([Shape])) Then
  Set pPoint = [Shape]
  If (Not pPoint.IsEmpty) Then
    dAngle = dAngle * Pi / 180
    Set pEnv = pPoint.Envelope
    pEnv.Expand dBufferDistanceX, dBufferDistanceY, False
    Set pSegColl = New Polygon
    pSegColl.SetRectangle pEnv
    Set pTransform = pSegColl
    pTransform.Rotate pPoint, dAngle
    Set pFBuffer.Shape = pSegColl
    pFCursor.InsertFeature pFBuffer
  End If
End If

Et dans la zone de texte du bas, saisissez
1

Normallement, cela devrait marcher... (en tout cas, chez moi, c'est le cas wink )

En espérant que ca marchera, cordialement

Marc

Dernière modification par Marc Ruffie (Tue 12 February 2008 17:04)


Sauvez un arbre, mangez un castor!

Hors ligne

 

#7 Tue 12 February 2008 17:16

leo09
Juste Inscrit !
Date d'inscription: 8 Feb 2008
Messages: 4

Re: Easy Calculate sous ArcGis

Merci beaucoup :  ça marche !!

J'ai enfin pu créer de beaux petits carrés autour des mes points..

Merci encore et bonne fin de journée!

Hors ligne

 

#8 Wed 13 February 2008 16:14

203alb
Invité

Re: Easy Calculate sous ArcGis

Une piste  ?
Et pourquoi pas utiliser les outils de grilles comme celui de Hawth's tools?
Tu définis tes emprises en lat-lon / à tes extrémités et ton pas ....

 

Pied de page des forums

Powered by FluxBB