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
j'arrive pas bien à voir ton probleme expliques je t'aiderais volontier si
je peu.
Christophe Vergon
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
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
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
par une matrice ces coordonnées en coordonnées sur le plan tangent au
représenté par un rectangle dans ma forme et j'utilise ensuite l'API
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
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
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
> >
> >
> >.
> >
>
>
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
j'arrive pas bien à voir ton probleme expliques je t'aiderais volontier si
je peu.
Christophe Vergon
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
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
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
par une matrice ces coordonnées en coordonnées sur le plan tangent au
représenté par un rectangle dans ma forme et j'utilise ensuite l'API
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
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
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
> >
> >
> >.
> >
>
>
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
j'arrive pas bien à voir ton probleme expliques je t'aiderais volontier si
je peu.
Christophe Vergon
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
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
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
par une matrice ces coordonnées en coordonnées sur le plan tangent au
représenté par un rectangle dans ma forme et j'utilise ensuite l'API
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
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
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
> >
> >
> >.
> >
>
>
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
DeleteObject hBrush
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
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
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
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
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
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
DeleteObject hBrush
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
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
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
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
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
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
DeleteObject hBrush
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
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
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
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
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
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
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
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
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
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
> 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
> 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
> > 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
> > 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
> > >
> > >
> > >.
> > >
> >
> >
>
>
>
>
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
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
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
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
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" <geo.ch@tiscali.fr> a écrit dans le message de
news:btf4bd$jk2$1@news.tiscali.fr...
> 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
> je peu.
>
> Christophe Vergon
>
>
"Christophe" <geo.ch@tiscali.fr> a écrit dans le message de
news:btggp5$rc5$1@news.tiscali.fr...
> 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
> 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
> > 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
> > 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
> > >
> > >
> > >.
> > >
> >
> >
>
>
>
>
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
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
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
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
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
> 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
> 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
> > 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
> > 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
> > >
> > >
> > >.
> > >
> >
> >
>
>
>
>