OVH Cloud OVH Cloud

RE Kit GeoConcept

4 réponses
Avatar
Christophe
Désolé d'entamer un nouveau fil

salut Patrice,

Il faut m'éclairer un peu.
"Pour l'instant,t j'utilise un fichier de coordonnées terrestres
correspondant aux points des frontières des zones terrestres."

quel est le systeme de coordonnée utilisé?

"Je souhaite passer en vectoriel car
j'utilise un zoom qui permet de voir la terre de plus ou moins loin dans
l'espace (au maximum 20° autour d'un point central)"

quels sont les types de représenttation que tu utilises planes spheriques...

j'arrive pas bien à voir ton probleme expliques je t'aiderais volontier si
je peu.

Christophe Vergon

Très intéressé par les compétences de Christophe en géographie (s'il s'agit
bien de cela)
En effet je développe un programme qui doit tracer à un moment donné des
cartes. Pour l'instant,t j'utilise un fichier de coordonnées terrestres
correspondant aux points des frontières des zones terrestres. Je transforme
par une matrice ces coordonnées en coordonnées sur le plan tangent au globe
représenté par un rectangle dans ma forme et j'utilise ensuite l'API polygon
pour tracer le dessin correspondant. Je souhaite passer en vectoriel car
j'utilise un zoom qui permet de voir la terre de plus ou moins loin dans
l'espace (au maximum 20° autour d'un point central)
Surtout je pense que je peux peut-être gagner en terme de lissage et de
taille des données. Pour l'instant mon fichier de points terrestres fait 103
KO, mais je n'ai pas réalisé 1% des cartes nécessaires et tout ce qui
concerne l'Amérique est absent.
Sinon je gère moi-même les données du dessin.
"Christophe" <geo.ch@tiscali.fr> a écrit dans le message de
news:bteqqi$8jv$1@news.tiscali.fr...
> Salut et bonne années à tous
> Pace E Salute
>
> Ben pour le kit GeoConcept, je connais pas.
> Où tout du moins je n'ai jamais programmé avec. (Je vais me mettre à
> ArcView8.0 prochainement, pour le reste je developpe mes propres outils,
> particulierement la gestion raster & vectoriel avec les APIs et
association
> BD Access).
>
> Voici une liste de diffusion où tu trouveras les gens de la geomatique
> www.georezo.net
> qui utilisent geoconcept
> http://geomatique.georezo.net/geosig-archives.php3
>
> Je reste à ta disposition pour une paserelle VB/Geomatique si tu n'es pas
du
> Geométier.
>
>
> Christophe Vergon
>
>
>
>
>
> "JCM" <jean-claude.mansion@wanadoo.fr> a écrit dans le message de news:
> 058901c3c9f9$b2e18670$a501280a@phx.gbl...
> Bonjour
>
> cela veut dire que je dois renouveller mon message
> régulierement ?
>
> Jean claude
> >-----Message d'origine-----
> >> Quelqu'un connait til l'usage de ce kit ?
> >
> >:O)
> >
> >S'il y en un qui peut t'aider c'est bien Christophe
> Vergon qui jongle avec
> >les API graphiques depuis un an maintenant (et oui
> déjà... :O) ) et qui est
> >géomètre de métier... Il passe ici régulièment, faudra
> juste s'assurer qu'il
> >jète un oeil à ton message.. ;O)
> >
> >--
> >Cordialement
> >Yanick Lefebvre - MVP pour Visual Basic
> >http://faq.vb.free.fr/?rubrique=0 -
> http://www.mvps.org/vbnet/
> >http://www.mentalis.org/agnet/apiguide.shtml -
> http://www.mztools.com/
> >
> >Merci de poster les réponses au groupe afin d'en faire
> profiter à tous
> >
> >
> >.
> >
>
>

4 réponses

Avatar
Patrice Henrio
Les coordonnées sont exprimées en latitude et longitude en degrés
centésimaux. je les traduit en (x,y) dans un plan.
Pour ce qui est du type de variable j'utilise un type pointplan avec un
champ abscisse et un champ ordonnée tant en coordo terrestre qu'en plan.
Je souhiate comprendre comment je peux passer en dessin vectoriel et surtout
si j'y gagne en espace mémoire et/ou en temps.
Je joins la procédure de dessin que j'utilise.
En fait il y a deux façons de dessiner car dans un cas je dois créer en plus
la zone qui soit sensible au passage de la souris.

Une carte peut être composée de plusieurs régions connexes, chaque région
étant délimitée par sa frontière qui est elle-même composée de plusieurs
morceaux de courbes définis par une liste de points dans un fichier (en fait
il suffit de connaître le premier et le dernier point de la liste pour
connaître l'ensemble)
Je ne suis peut-être pas très clair mais le projet est assez considérable
pour l'instant.
Merci de ton aide

Sub DessineRégion()
'Dessin des terres
Dim Index As Integer, T() As PointPlan, PremierPoint As Long, _
DernierPoint As Long, NbPoints As Long, Couleur As Long

For Index = 1 To NbRégions
PremierPoint = PremierPointRégion(Index)
DernierPoint = DernierPointRégion(Index)
NbPoints = 0
ReDim T(1 To DernierPoint - PremierPoint + 1)
For I = PremierPoint To DernierPoint
NbPoints = NbPoints + 1
T(NbPoints) = Projection(Points(I))
Next
Dessin T, Régions(Index).Couleur ,0
Next Index

End sub

Public Function Projection(P As PointPlan) As PointPlan
'Transforme les coordonnées terrestres (longitude,latitude) en coordonnées
sur la carte
'NouvellesCoordonnées = MatriceCht * AnciennesCoordonnées
Dim AnciennesCoordonnées As PointSphère, _
NouvellesCoordonnées As PointSphère, _
MXNégatif As Boolean
AnciennesCoordonnées = PointLongLat(P)
NouvellesCoordonnées.X = MatriceCht.COL1.X * AnciennesCoordonnées.X _
+ MatriceCht.COL1.Y * AnciennesCoordonnées.Y _
+ MatriceCht.COL1.Z * AnciennesCoordonnées.Z
MXNégatif = (NouvellesCoordonnées.X <= 0)
If MXNégatif Then NouvellesCoordonnées.X = 0.001
NouvellesCoordonnées.Y = MatriceCht.COL2.X * AnciennesCoordonnées.X _
+ MatriceCht.COL2.Y * AnciennesCoordonnées.Y _
+ MatriceCht.COL2.Z * AnciennesCoordonnées.Z
NouvellesCoordonnées.Z = MatriceCht.COL3.X * AnciennesCoordonnées.X _
+ MatriceCht.COL3.Y * AnciennesCoordonnées.Y _
+ MatriceCht.COL3.Z * AnciennesCoordonnées.Z
Projection.X = Hauteur / 2 + 0.5 * Loupe * CoefficientX *
NouvellesCoordonnées.Y / NouvellesCoordonnées.X
Projection.Y = Hauteur / 2 - 0.5 * Loupe * CoefficientY *
NouvellesCoordonnées.Z / NouvellesCoordonnées.X
Projection.X = Mini(2 * Hauteur, Maxi(Projection.X, -Hauteur))
Projection.Y = Mini(2 * Hauteur, Maxi(Projection.Y, -Hauteur))
End Function

Sub AffecterMatrices()
'Affecte les matrices de transformation.
'MatriceCht permet de passer de coordonnées terrestres (longitude,latitude),
exprimées
'en degré, en coordonnées sur la carte (X,Y), exprimées en pixel
'MatriceChtInverse réalise la transformation inverse.
Dim CosPhi As Single, _
CosTêta As Single, _
SinPhi As Single, _
SinTêta As Single

CosPhi = Cos(Radian(Longitude))
SinPhi = Sin(Radian(Longitude))
CosTêta = Cos(Radian(Latitude))
SinTêta = Sin(Radian(Latitude))

With MatriceCht
With .COL1
.X = CosPhi * CosTêta
.Y = SinPhi * CosTêta
.Z = SinTêta
End With
With .COL2
.X = -SinPhi
.Y = CosPhi
.Z = 0
End With
With .COL3
.X = -CosPhi * SinTêta
.Y = -SinPhi * SinTêta
.Z = CosTêta
End With
End With

With MatriceChtInverse
With .COL1
.X = CosPhi * CosTêta
.Y = -SinPhi
.Z = -SinTêta * CosPhi
End With
With .COL2
.X = SinPhi * CosTêta
.Y = CosPhi
.Z = -SinPhi * SinTêta
End With
With .COL3
.X = SinTêta
.Y = 0
.Z = CosTêta
End With
End With

End Sub

Public Sub Dessin(ByRef Points() As PointPlan, _
ByVal Couleur As Long, _
ByVal Index As Integer)
'Dessine un polygone dont les coordonnées terrestres sont dans Points().
'Ce polygone commence à PremierPoint et comprend NbPoints
'La couleur de remplissage est transmise dans Couleur
'Index est le numéro de la zone
'Si Index est nul, cela correspond aux terres et mers
'Si Index est positif, ce sont les territoires historiques
Dim hBrush As Long, _
I As Long, _
TabPoints() As PointAPI, _
NbPoints As Long

NbPoints = UBound(Points)
ReDim TabPoints(1 To NbPoints)
For I = 1 To NbPoints
TabPoints(I) = ChangePtPlan_PtAPI(Points(I))
Next
FormeHistoire.Carte.ForeColor = Couleur
hBrush = CreateSolidBrush(Couleur)
If Index = 0 Then
SelectObject FormeHistoire.Carte.hdc, hBrush
Polygon FormeHistoire.Carte.hdc, TabPoints(1), NbPoints
Else
Pays(Index).hRgn = CreatePolygonRgn(TabPoints(1), NbPoints, ALTERNATE)
FillRgn FormeHistoire.Carte.hdc, Pays(Index).hRgn, hBrush
End If
DeleteObject hBrush
End Sub



"Christophe" a écrit dans le message de
news:btf4bd$jk2$
salut Patrice,

Il faut m'éclairer un peu.
"Pour l'instant,t j'utilise un fichier de coordonnées terrestres
correspondant aux points des frontières des zones terrestres."

quel est le systeme de coordonnée utilisé?

"Je souhaite passer en vectoriel car
j'utilise un zoom qui permet de voir la terre de plus ou moins loin dans
l'espace (au maximum 20° autour d'un point central)"

quels sont les types de représenttation que tu utilises planes


spheriques...

j'arrive pas bien à voir ton probleme expliques je t'aiderais volontier si
je peu.

Christophe Vergon






"Christophe" a écrit dans le message de
news:btggp5$rc5$
Désolé d'entamer un nouveau fil

salut Patrice,

Il faut m'éclairer un peu.
"Pour l'instant,t j'utilise un fichier de coordonnées terrestres
correspondant aux points des frontières des zones terrestres."

quel est le systeme de coordonnée utilisé?

"Je souhaite passer en vectoriel car
j'utilise un zoom qui permet de voir la terre de plus ou moins loin dans
l'espace (au maximum 20° autour d'un point central)"

quels sont les types de représenttation que tu utilises planes


spheriques...

j'arrive pas bien à voir ton probleme expliques je t'aiderais volontier si
je peu.

Christophe Vergon

Très intéressé par les compétences de Christophe en géographie (s'il


s'agit
bien de cela)
En effet je développe un programme qui doit tracer à un moment donné des
cartes. Pour l'instant,t j'utilise un fichier de coordonnées terrestres
correspondant aux points des frontières des zones terrestres. Je


transforme
par une matrice ces coordonnées en coordonnées sur le plan tangent au


globe
représenté par un rectangle dans ma forme et j'utilise ensuite l'API


polygon
pour tracer le dessin correspondant. Je souhaite passer en vectoriel car
j'utilise un zoom qui permet de voir la terre de plus ou moins loin dans
l'espace (au maximum 20° autour d'un point central)
Surtout je pense que je peux peut-être gagner en terme de lissage et de
taille des données. Pour l'instant mon fichier de points terrestres fait


103
KO, mais je n'ai pas réalisé 1% des cartes nécessaires et tout ce qui
concerne l'Amérique est absent.
Sinon je gère moi-même les données du dessin.
"Christophe" a écrit dans le message de
news:bteqqi$8jv$
> Salut et bonne années à tous
> Pace E Salute
>
> Ben pour le kit GeoConcept, je connais pas.
> Où tout du moins je n'ai jamais programmé avec. (Je vais me mettre à
> ArcView8.0 prochainement, pour le reste je developpe mes propres outils,
> particulierement la gestion raster & vectoriel avec les APIs et
association
> BD Access).
>
> Voici une liste de diffusion où tu trouveras les gens de la geomatique
> www.georezo.net
> qui utilisent geoconcept
> http://geomatique.georezo.net/geosig-archives.php3
>
> Je reste à ta disposition pour une paserelle VB/Geomatique si tu n'es


pas
du
> Geométier.
>
>
> Christophe Vergon
>
>
>
>
>
> "JCM" a écrit dans le message de news:
> 058901c3c9f9$b2e18670$
> Bonjour
>
> cela veut dire que je dois renouveller mon message
> régulierement ?
>
> Jean claude
> >-----Message d'origine-----
> >> Quelqu'un connait til l'usage de ce kit ?
> >
> >:O)
> >
> >S'il y en un qui peut t'aider c'est bien Christophe
> Vergon qui jongle avec
> >les API graphiques depuis un an maintenant (et oui
> déjà... :O) ) et qui est
> >géomètre de métier... Il passe ici régulièment, faudra
> juste s'assurer qu'il
> >jète un oeil à ton message.. ;O)
> >
> >--
> >Cordialement
> >Yanick Lefebvre - MVP pour Visual Basic
> >http://faq.vb.free.fr/?rubrique=0 -
> http://www.mvps.org/vbnet/
> >http://www.mentalis.org/agnet/apiguide.shtml -
> http://www.mztools.com/
> >
> >Merci de poster les réponses au groupe afin d'en faire
> profiter à tous
> >
> >
> >.
> >
>
>






Avatar
Christophe
Re,
Concernant l'approche vectoriel, nous ne parlons pas de la même chose.
la structure polygon que tu utilises est vectorielle.
Vectoriel s'oppose à bitmap.
Pour le stockage d'une structure polygon ou polyligne c'est kif kif.
Pour l'affichage c'est plus long quand tu dois remplir (polygon).
Personnellement j'utilise le dessin fiul de fer (polyligne widthline=1) et
si je veux remplir ou obtenir une region je transforme en chemin, c'est très
utile mais les plate-forme win98 sont limitées pour se genre de fonction
(pour la gdi en général).

Une remarque très importante pour que tes appels au API n'interferent pas
avec VB il faut toujours
rendre le DC dans l'état où on l'à trouver en arrivant (c'est comme les WC
les DC).
De plus il vau mieux deselectionner un objet avant de le détruiree.

hBrush = CreateSolidBrush(Couleur)

OldObject&= SelectObject (FormeHistoire.Carte.hdc, hBrush)
'stocke l'objet précédent

If Index = 0 Then
Polygon FormeHistoire.Carte.hdc, TabPoints(1), NbPoints
Else
Pays(Index).hRgn = CreatePolygonRgn(TabPoints(1), NbPoints, ALTERNATE)
FillRgn FormeHistoire.Carte.hdc, Pays(Index).hRgn, hBrush
End If



Dummy&=selectobject(formehistoire.carte.hdc,oldobject&)
'reselesctionne l'objet original
DeleteObject hBrush



Christophe Vergon

"Patrice Henrio" a écrit dans le
message de news:
Les coordonnées sont exprimées en latitude et longitude en degrés
centésimaux. je les traduit en (x,y) dans un plan.
Pour ce qui est du type de variable j'utilise un type pointplan avec un
champ abscisse et un champ ordonnée tant en coordo terrestre qu'en plan.
Je souhiate comprendre comment je peux passer en dessin vectoriel et


surtout
si j'y gagne en espace mémoire et/ou en temps.
Je joins la procédure de dessin que j'utilise.
En fait il y a deux façons de dessiner car dans un cas je dois créer en


plus
la zone qui soit sensible au passage de la souris.

Une carte peut être composée de plusieurs régions connexes, chaque région
étant délimitée par sa frontière qui est elle-même composée de plusieurs
morceaux de courbes définis par une liste de points dans un fichier (en


fait
il suffit de connaître le premier et le dernier point de la liste pour
connaître l'ensemble)
Je ne suis peut-être pas très clair mais le projet est assez considérable
pour l'instant.
Merci de ton aide

Sub DessineRégion()
'Dessin des terres
Dim Index As Integer, T() As PointPlan, PremierPoint As Long, _
DernierPoint As Long, NbPoints As Long, Couleur As Long

For Index = 1 To NbRégions
PremierPoint = PremierPointRégion(Index)
DernierPoint = DernierPointRégion(Index)
NbPoints = 0
ReDim T(1 To DernierPoint - PremierPoint + 1)
For I = PremierPoint To DernierPoint
NbPoints = NbPoints + 1
T(NbPoints) = Projection(Points(I))
Next
Dessin T, Régions(Index).Couleur ,0
Next Index

End sub

Public Function Projection(P As PointPlan) As PointPlan
'Transforme les coordonnées terrestres (longitude,latitude) en coordonnées
sur la carte
'NouvellesCoordonnées = MatriceCht * AnciennesCoordonnées
Dim AnciennesCoordonnées As PointSphère, _
NouvellesCoordonnées As PointSphère, _
MXNégatif As Boolean
AnciennesCoordonnées = PointLongLat(P)
NouvellesCoordonnées.X = MatriceCht.COL1.X * AnciennesCoordonnées.X _
+ MatriceCht.COL1.Y * AnciennesCoordonnées.Y _
+ MatriceCht.COL1.Z * AnciennesCoordonnées.Z
MXNégatif = (NouvellesCoordonnées.X <= 0)
If MXNégatif Then NouvellesCoordonnées.X = 0.001
NouvellesCoordonnées.Y = MatriceCht.COL2.X * AnciennesCoordonnées.X _
+ MatriceCht.COL2.Y * AnciennesCoordonnées.Y _
+ MatriceCht.COL2.Z * AnciennesCoordonnées.Z
NouvellesCoordonnées.Z = MatriceCht.COL3.X * AnciennesCoordonnées.X _
+ MatriceCht.COL3.Y * AnciennesCoordonnées.Y _
+ MatriceCht.COL3.Z * AnciennesCoordonnées.Z
Projection.X = Hauteur / 2 + 0.5 * Loupe * CoefficientX *
NouvellesCoordonnées.Y / NouvellesCoordonnées.X
Projection.Y = Hauteur / 2 - 0.5 * Loupe * CoefficientY *
NouvellesCoordonnées.Z / NouvellesCoordonnées.X
Projection.X = Mini(2 * Hauteur, Maxi(Projection.X, -Hauteur))
Projection.Y = Mini(2 * Hauteur, Maxi(Projection.Y, -Hauteur))
End Function

Sub AffecterMatrices()
'Affecte les matrices de transformation.
'MatriceCht permet de passer de coordonnées terrestres


(longitude,latitude),
exprimées
'en degré, en coordonnées sur la carte (X,Y), exprimées en pixel
'MatriceChtInverse réalise la transformation inverse.
Dim CosPhi As Single, _
CosTêta As Single, _
SinPhi As Single, _
SinTêta As Single

CosPhi = Cos(Radian(Longitude))
SinPhi = Sin(Radian(Longitude))
CosTêta = Cos(Radian(Latitude))
SinTêta = Sin(Radian(Latitude))

With MatriceCht
With .COL1
.X = CosPhi * CosTêta
.Y = SinPhi * CosTêta
.Z = SinTêta
End With
With .COL2
.X = -SinPhi
.Y = CosPhi
.Z = 0
End With
With .COL3
.X = -CosPhi * SinTêta
.Y = -SinPhi * SinTêta
.Z = CosTêta
End With
End With

With MatriceChtInverse
With .COL1
.X = CosPhi * CosTêta
.Y = -SinPhi
.Z = -SinTêta * CosPhi
End With
With .COL2
.X = SinPhi * CosTêta
.Y = CosPhi
.Z = -SinPhi * SinTêta
End With
With .COL3
.X = SinTêta
.Y = 0
.Z = CosTêta
End With
End With

End Sub

Public Sub Dessin(ByRef Points() As PointPlan, _
ByVal Couleur As Long, _
ByVal Index As Integer)
'Dessine un polygone dont les coordonnées terrestres sont dans Points().
'Ce polygone commence à PremierPoint et comprend NbPoints
'La couleur de remplissage est transmise dans Couleur
'Index est le numéro de la zone
'Si Index est nul, cela correspond aux terres et mers
'Si Index est positif, ce sont les territoires historiques
Dim hBrush As Long, _
I As Long, _
TabPoints() As PointAPI, _
NbPoints As Long

NbPoints = UBound(Points)
ReDim TabPoints(1 To NbPoints)
For I = 1 To NbPoints
TabPoints(I) = ChangePtPlan_PtAPI(Points(I))
Next
FormeHistoire.Carte.ForeColor = Couleur
hBrush = CreateSolidBrush(Couleur)
If Index = 0 Then
SelectObject FormeHistoire.Carte.hdc, hBrush
Polygon FormeHistoire.Carte.hdc, TabPoints(1), NbPoints
Else
Pays(Index).hRgn = CreatePolygonRgn(TabPoints(1), NbPoints, ALTERNATE)
FillRgn FormeHistoire.Carte.hdc, Pays(Index).hRgn, hBrush
End If
DeleteObject hBrush
End Sub





Avatar
Christophe
C'est les soldes!!!!
pour ton calcul de projection si tu veux le faire en vrai!
http://mathworld.wolfram.com/PolyconicProjection.html
a+
Ch. vergon
"Patrice Henrio" a écrit dans le
message de news:
Les coordonnées sont exprimées en latitude et longitude en degrés
centésimaux. je les traduit en (x,y) dans un plan.
Pour ce qui est du type de variable j'utilise un type pointplan avec un
champ abscisse et un champ ordonnée tant en coordo terrestre qu'en plan.
Je souhiate comprendre comment je peux passer en dessin vectoriel et


surtout
si j'y gagne en espace mémoire et/ou en temps.
Je joins la procédure de dessin que j'utilise.
En fait il y a deux façons de dessiner car dans un cas je dois créer en


plus
la zone qui soit sensible au passage de la souris.

Une carte peut être composée de plusieurs régions connexes, chaque région
étant délimitée par sa frontière qui est elle-même composée de plusieurs
morceaux de courbes définis par une liste de points dans un fichier (en


fait
il suffit de connaître le premier et le dernier point de la liste pour
connaître l'ensemble)
Je ne suis peut-être pas très clair mais le projet est assez considérable
pour l'instant.
Merci de ton aide

Sub DessineRégion()
'Dessin des terres
Dim Index As Integer, T() As PointPlan, PremierPoint As Long, _
DernierPoint As Long, NbPoints As Long, Couleur As Long

For Index = 1 To NbRégions
PremierPoint = PremierPointRégion(Index)
DernierPoint = DernierPointRégion(Index)
NbPoints = 0
ReDim T(1 To DernierPoint - PremierPoint + 1)
For I = PremierPoint To DernierPoint
NbPoints = NbPoints + 1
T(NbPoints) = Projection(Points(I))
Next
Dessin T, Régions(Index).Couleur ,0
Next Index

End sub

Public Function Projection(P As PointPlan) As PointPlan
'Transforme les coordonnées terrestres (longitude,latitude) en coordonnées
sur la carte
'NouvellesCoordonnées = MatriceCht * AnciennesCoordonnées
Dim AnciennesCoordonnées As PointSphère, _
NouvellesCoordonnées As PointSphère, _
MXNégatif As Boolean
AnciennesCoordonnées = PointLongLat(P)
NouvellesCoordonnées.X = MatriceCht.COL1.X * AnciennesCoordonnées.X _
+ MatriceCht.COL1.Y * AnciennesCoordonnées.Y _
+ MatriceCht.COL1.Z * AnciennesCoordonnées.Z
MXNégatif = (NouvellesCoordonnées.X <= 0)
If MXNégatif Then NouvellesCoordonnées.X = 0.001
NouvellesCoordonnées.Y = MatriceCht.COL2.X * AnciennesCoordonnées.X _
+ MatriceCht.COL2.Y * AnciennesCoordonnées.Y _
+ MatriceCht.COL2.Z * AnciennesCoordonnées.Z
NouvellesCoordonnées.Z = MatriceCht.COL3.X * AnciennesCoordonnées.X _
+ MatriceCht.COL3.Y * AnciennesCoordonnées.Y _
+ MatriceCht.COL3.Z * AnciennesCoordonnées.Z
Projection.X = Hauteur / 2 + 0.5 * Loupe * CoefficientX *
NouvellesCoordonnées.Y / NouvellesCoordonnées.X
Projection.Y = Hauteur / 2 - 0.5 * Loupe * CoefficientY *
NouvellesCoordonnées.Z / NouvellesCoordonnées.X
Projection.X = Mini(2 * Hauteur, Maxi(Projection.X, -Hauteur))
Projection.Y = Mini(2 * Hauteur, Maxi(Projection.Y, -Hauteur))
End Function

Sub AffecterMatrices()
'Affecte les matrices de transformation.
'MatriceCht permet de passer de coordonnées terrestres


(longitude,latitude),
exprimées
'en degré, en coordonnées sur la carte (X,Y), exprimées en pixel
'MatriceChtInverse réalise la transformation inverse.
Dim CosPhi As Single, _
CosTêta As Single, _
SinPhi As Single, _
SinTêta As Single

CosPhi = Cos(Radian(Longitude))
SinPhi = Sin(Radian(Longitude))
CosTêta = Cos(Radian(Latitude))
SinTêta = Sin(Radian(Latitude))

With MatriceCht
With .COL1
.X = CosPhi * CosTêta
.Y = SinPhi * CosTêta
.Z = SinTêta
End With
With .COL2
.X = -SinPhi
.Y = CosPhi
.Z = 0
End With
With .COL3
.X = -CosPhi * SinTêta
.Y = -SinPhi * SinTêta
.Z = CosTêta
End With
End With

With MatriceChtInverse
With .COL1
.X = CosPhi * CosTêta
.Y = -SinPhi
.Z = -SinTêta * CosPhi
End With
With .COL2
.X = SinPhi * CosTêta
.Y = CosPhi
.Z = -SinPhi * SinTêta
End With
With .COL3
.X = SinTêta
.Y = 0
.Z = CosTêta
End With
End With

End Sub

Public Sub Dessin(ByRef Points() As PointPlan, _
ByVal Couleur As Long, _
ByVal Index As Integer)
'Dessine un polygone dont les coordonnées terrestres sont dans Points().
'Ce polygone commence à PremierPoint et comprend NbPoints
'La couleur de remplissage est transmise dans Couleur
'Index est le numéro de la zone
'Si Index est nul, cela correspond aux terres et mers
'Si Index est positif, ce sont les territoires historiques
Dim hBrush As Long, _
I As Long, _
TabPoints() As PointAPI, _
NbPoints As Long

NbPoints = UBound(Points)
ReDim TabPoints(1 To NbPoints)
For I = 1 To NbPoints
TabPoints(I) = ChangePtPlan_PtAPI(Points(I))
Next
FormeHistoire.Carte.ForeColor = Couleur
hBrush = CreateSolidBrush(Couleur)
If Index = 0 Then
SelectObject FormeHistoire.Carte.hdc, hBrush
Polygon FormeHistoire.Carte.hdc, TabPoints(1), NbPoints
Else
Pays(Index).hRgn = CreatePolygonRgn(TabPoints(1), NbPoints, ALTERNATE)
FillRgn FormeHistoire.Carte.hdc, Pays(Index).hRgn, hBrush
End If
DeleteObject hBrush
End Sub



"Christophe" a écrit dans le message de
news:btf4bd$jk2$
> salut Patrice,
>
> Il faut m'éclairer un peu.
> "Pour l'instant,t j'utilise un fichier de coordonnées terrestres
> correspondant aux points des frontières des zones terrestres."
>
> quel est le systeme de coordonnée utilisé?
>
> "Je souhaite passer en vectoriel car
> j'utilise un zoom qui permet de voir la terre de plus ou moins loin dans
> l'espace (au maximum 20° autour d'un point central)"
>
> quels sont les types de représenttation que tu utilises planes
spheriques...
>
> j'arrive pas bien à voir ton probleme expliques je t'aiderais volontier


si
> je peu.
>
> Christophe Vergon
>
>


"Christophe" a écrit dans le message de
news:btggp5$rc5$
> Désolé d'entamer un nouveau fil
>
> salut Patrice,
>
> Il faut m'éclairer un peu.
> "Pour l'instant,t j'utilise un fichier de coordonnées terrestres
> correspondant aux points des frontières des zones terrestres."
>
> quel est le systeme de coordonnée utilisé?
>
> "Je souhaite passer en vectoriel car
> j'utilise un zoom qui permet de voir la terre de plus ou moins loin dans
> l'espace (au maximum 20° autour d'un point central)"
>
> quels sont les types de représenttation que tu utilises planes
spheriques...
>
> j'arrive pas bien à voir ton probleme expliques je t'aiderais volontier


si
> je peu.
>
> Christophe Vergon
>
> Très intéressé par les compétences de Christophe en géographie (s'il
s'agit
> bien de cela)
> En effet je développe un programme qui doit tracer à un moment donné des
> cartes. Pour l'instant,t j'utilise un fichier de coordonnées terrestres
> correspondant aux points des frontières des zones terrestres. Je
transforme
> par une matrice ces coordonnées en coordonnées sur le plan tangent au
globe
> représenté par un rectangle dans ma forme et j'utilise ensuite l'API
polygon
> pour tracer le dessin correspondant. Je souhaite passer en vectoriel car
> j'utilise un zoom qui permet de voir la terre de plus ou moins loin dans
> l'espace (au maximum 20° autour d'un point central)
> Surtout je pense que je peux peut-être gagner en terme de lissage et de
> taille des données. Pour l'instant mon fichier de points terrestres fait
103
> KO, mais je n'ai pas réalisé 1% des cartes nécessaires et tout ce qui
> concerne l'Amérique est absent.
> Sinon je gère moi-même les données du dessin.
> "Christophe" a écrit dans le message de
> news:bteqqi$8jv$
> > Salut et bonne années à tous
> > Pace E Salute
> >
> > Ben pour le kit GeoConcept, je connais pas.
> > Où tout du moins je n'ai jamais programmé avec. (Je vais me mettre à
> > ArcView8.0 prochainement, pour le reste je developpe mes propres


outils,
> > particulierement la gestion raster & vectoriel avec les APIs et
> association
> > BD Access).
> >
> > Voici une liste de diffusion où tu trouveras les gens de la geomatique
> > www.georezo.net
> > qui utilisent geoconcept
> > http://geomatique.georezo.net/geosig-archives.php3
> >
> > Je reste à ta disposition pour une paserelle VB/Geomatique si tu n'es
pas
> du
> > Geométier.
> >
> >
> > Christophe Vergon
> >
> >
> >
> >
> >
> > "JCM" a écrit dans le message de


news:
> > 058901c3c9f9$b2e18670$
> > Bonjour
> >
> > cela veut dire que je dois renouveller mon message
> > régulierement ?
> >
> > Jean claude
> > >-----Message d'origine-----
> > >> Quelqu'un connait til l'usage de ce kit ?
> > >
> > >:O)
> > >
> > >S'il y en un qui peut t'aider c'est bien Christophe
> > Vergon qui jongle avec
> > >les API graphiques depuis un an maintenant (et oui
> > déjà... :O) ) et qui est
> > >géomètre de métier... Il passe ici régulièment, faudra
> > juste s'assurer qu'il
> > >jète un oeil à ton message.. ;O)
> > >
> > >--
> > >Cordialement
> > >Yanick Lefebvre - MVP pour Visual Basic
> > >http://faq.vb.free.fr/?rubrique=0 -
> > http://www.mvps.org/vbnet/
> > >http://www.mentalis.org/agnet/apiguide.shtml -
> > http://www.mztools.com/
> > >
> > >Merci de poster les réponses au groupe afin d'en faire
> > profiter à tous
> > >
> > >
> > >.
> > >
> >
> >
>
>
>
>




Avatar
Patrice Henrio
En effet cette projection est sûrement la meilleure pour représenter la
sphère sur un plan.
Mais en fait comme je limite la partie de globe terrestre représenté à 20°
en longitude (Ouest, - et Est, +) et en latitude (Nord, + et Sud, -) autour
d'un point central, je peux me contenter d'une projection réelle de tous
les points terrestres qui m'intéressent (côtes et frontières) sur le plan
tangent à ce point central à partir du centre de la terre.
Pour cela je transforme d'abord un point donné en coordonnées terrestres
(long,lat) en un point (x,y,z) vérifiant x²+y²+z²=(Rayon terrestre)². Puis
j'applique la matrice de transformation passant du point (x,y,z) sur la
phère en un point (x',y',z') sur le plan, ensuite je récupère seulement les
coordonnées du point (x,y) dans le plan. En effet un système de coordonées
local sur la sphère se transforme en système de coordonnées sur le plan
(j'ai vu ça il y plusieurs années en cours de toplogie algébrique).
Bien sûr un problème se poserait si l'angle de longitude entre le point
central et le point dessiné approchait ou dépassait 180° puisque dans ce cas
soit la projection serait renvoyée à l'infini, soit celle-ci viendrait
parasiter le dessin des points voisins du point central (deux dessins sur un
seul plan).
En fait mon problème de "vectoriel" vient du fait que pour moi vectoriel
signifie que les données de bases ne sont pas des points d'un plan mais des
courbes géométriques données par leur équation et quelques données de bases
supplémentaires du genre, point de départ, point d'arrivée, sens de
parcours. La fonction polygone continue à exiger une liste de points reliés
entre-eux par des lignes, c'est vrai que finalement c'est du vectoriel
puisqu'un segment est une courbe délimitée par un point de départ de un
point d'arrivée.
En tout cas merci d'avoir pris la peine de te pencher sur mon problème et de
l'info concernant la destruction des objets.