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 Thu 11 January 2001 01:20

Carol
Invité

AVENUE

Bonjour,
Je suis a la recherche d une solution pour completer automatiquement la table d un theme point.
J aimerais recuperer les coordonnees XY de mes points de prelevements en Lambert 1, en DMS et en DD. Pour recuperer les coordonnees en Lambert 1, il n y a pas de problemes puisque ma vue est en Lambert 1. Par contre, pour completer ma table avec les coordonnees des points en DMS et en DD, je ne sais pas trop comment m y prendre. Le probleme concerne surtout les DMS. Si vous avez sous la main un script pour me depanner ou une iddee de la synthaxe a utiliser...
Je vous remercie par avance.

 

#2 Fri 12 January 2001 01:22

Carol Zammit
Invité

Re: AVENUE

Bonjour,

Suite a mon message d hier, j ai recu deux solutions qui correspondent en fait a ce que je faisais jusqu a present. Pour etre plus claire, ma methode consistait a completer la table de mon theme point en recuperant les coordonnees de mes points avec le script ADDXYCOO.AVE dans une vue en Lambert 1. Je renommais ensuite les champs X_coord et Y_coord en X_Lamb1 et en Y_Lamb2. Je creais ensuite une vue en Lambert 2e et je recuperais mon theme pour le completer avec le meme script et je renommai les champs X_coord et Y_coord en X_lamb2 et Y_lamb2. Puis je creais une vue en DD, et je recuperais mon theme pour le completer une nouvelle fois avec le meme script et je renommais les champs X_DD et Y_DD. Puis j utilisais le Script DD2DMS et je renommais les champs en X_DMS et Y_DMS. Ces differentes manipulations sont efficaces mais vous comprendrez que c est long et que j avais envie de trouver une solution qui me permette de convertir mes donnees sans avoir a changer de projection a chaque fois.
Pour ceux qui sont interesses, j envoie les reponses qui me sont parvenues.
Avec tous mes remerciements pour les deux personnes qui m ont repondu.

De la Part de Jenny Dupuy
Bonjour,

Voici un script qui pourra peut etre vous aider. Peut etre suffit-il de
changer le type de projection entre chaque execution du script.

Je serais interessee par les autres reponses que vous obtiendrez si celle-ci
ne fonctionne pas.
Merci de me les communiquer.

Jenny Dupuy

****************************************************************************
***********
' Name: 3D.ADD_XYZ
'
' Title: Add X, Y and Z coord field into a 3D shape file
'
' Topic: View, 3D
'
' By: Yuan Ming Hsu, GIS Data analyst
'   Minnesota Department of Health
'   121 East 7th Place, Suit 210
'   St. Paul, MN 55164
'   Tel:651.215.0737 Fax: 651.215.0979
'   yuanming.hsu@texte-a-enlever.health.state.mn.us
'
' Date: 06.30.99
'
' Update: 06.30.99
'
' Description: This program will add three fields (X,Y and Z) into shape
file's attribute table.
' The shape file must be a 3D point class (pointZ).
'
' Program is modified from existing ESRI sample script.
'
' To convert a shape file into 3D, see system script: 3D.ConvertTo3D
'
' Require: 3D shape file
'
' Self:
'
' Retrun:
'

' inital setup
'
theView = av.GetActiveDoc
'must be global to work in Calc exp below
_theProjection = theView.GetProjection
project_flag = _theProjection.IsNull.Not 'true if projected
theTheme = theView.GetActiveThemes.Get(0)

'Check if point or polygon theme
'
if ((theTheme.GetSrcName.GetSubName = pointZ ).not) then
MsgBox.Info( Active theme must be a 3-D point theme , )
return nil
end

'get the theme table and current edit state
'
theFTab = theTheme.GetFTab
theFields = theFTab.GetFields
edit_state = theFTab.IsEditable

'make sure table is editable and that fields can be added
'
if (theFtab.CanEdit) then
theFTab.SetEditable(true)
if ((theFTab.CanAddFields).Not) then
MsgBox.Info( Can't add fields to the table. +NL+ Check write
permission. ,
Can't add X,Y and Z coordinates )
return nil
end
else
MsgBox.Info( Can't modify the feature table. +NL+
Check write permission. , Can't add X,Y and Z coordinates )

return nil
end

'Check if fields named X-coord , Y-coord and Z-coord exist
'
x_exists = (theFTab.FindField( X-coord ) = NIL).Not
y_exists = (theFtab.FindField( Y-coord ) = NIL).Not
z_exists = (theFtab.FindField( Z-coord ) = NIL).Not

if (x_exists or y_exists or z_exists) then
if (MsgBox.YesNo( Overwrite existing fields? ,
X-coord, Y-coord and Z-coord fields already exist , false)) then
'if ok to overwrite, delete the fields as they may not be defined
'as required by this script (eg., created from another script).
if (x_exists) then
theFTab.RemoveFields({theFTab.FindField( X-coord )})
end
if (y_exists) then
theFTab.RemoveFields({theFTab.FindField( Y-coord )})
end
if (z_exists) then
theFtab.RemoveFields({theFtab.FindField( Z-coord )})
end
else
return nil
end 'if (MsgBox...)
end 'if

x = Field.Make ( X-coord ,#FIELD_DECIMAL,18,5)
y = Field.Make ( Y-coord ,#FIELD_DECIMAL,18,5)
z = Field.Make ( Z-coord ,#FIELD_DECIMAL,18,5)

theFTab.AddFields({x,y,z})

'Get point coordinates coordinates
'
if (theTheme.GetSrcName.GetSubName = pointZ ) then
if (project_flag) then

'Projection defined
theFTab.Calculate( [Shape].ReturnProjected(_theProjection).GetX , x)
theFTab.Calculate( [Shape].ReturnProjected(_theProjection).GetY , y)
theFTab.Calculate( [Shape].RetrunProjected(_theProjection).GetZ , Z)
else
'No projection defined
theFTab.Calculate( [Shape].GetX , x)
theFTab.Calculate( [Shape].GetY , y)
theFTab.Calculate( [Shape].GetZ , z)
end 'if
end

'Return editing state to pre-script running state
theFTab.SetEditable(edit_state)

-----------
De la part d Elise Gravel
Salut!

Lorsqu'on recupere les coordonnees de point avec l'outil CALCULER, il
utilise la projection de la vue.

Pour le DD:

1) Donc si la source du theme est en Geographic (LatLong), il suffit
d'eliminer la projection Lambert 1 de la vue (La vue est donc sans
projection et utilise la projection de la source), repeter le processus
utilise pour recueillir les coordonnees en Lambert 1 et reprojeter la vue en
Lambert 1 pour lui redonner son etat initial.

ou

2) Si la source est en Lambert 1, il faut projeter le theme en LatLong
(Geographic) avec le projector et repeter le processus utiliser pour
recueillir les coordonnees en Lambert 1 et reprojeter le theme en Lambert 1
pour lui redonner son etat initial.

Cependant, au lieu de reprojeter le theme en Lambert 1 suite au traitement,
il serait ideal de prendre la table du theme en Geographic et de venir la
joindre avec celle du theme initial en Lambert 1. Cette manipulation
eviterait une perte de precision du a des projections successives du theme.
Cette methode exige cependant d'avoir un identifiant unique. C'est cet
identifiant qui servira a la jointure.

Pour le DMS:

Il y a un script Avenue fournit avec ArcView qui permet de le faire. Le nom
du fichier est dd2dms.ave, mais on peut le trouver dans l'aide en tapant
Avenue dans sous la rubrique INDEX et en choisissant samples scripts et
theme.convertDDtoDMS.

Sinon ca ne convient pas je vous enverrai sur demande la formule a utiliser
avec le CALCULER.

 

Pied de page des forums

Powered by FluxBB