Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Conversione coordinate

502 views
Skip to first unread message

Dario Matta

unread,
Dec 22, 1999, 3:00:00 AM12/22/99
to
Ciao a tutti.
Il mio problema consiste nel convertire delle coordinate geografiche di una
mappa in coordinate dello schermo.
Io lavoro con un controllo mappa (MapobjectsLT).Un metodo di tale controllo
mi permette di convertire le coordinate dello schermo provenienti
dall'evento Mousemove in coordinate geografiche ma non viceversa. Ecco io
avrei bisogno di un consiglio perchè ci sto provando in tutti i modi ma
niente da fare. Ho provato con le API con le varie funzioni che ho a
disposizione ma tutte richiedevano come argomento delle coordinate ben
precise che provenivano dagli eventi del mouse o che consistevano comunque
in coordinate dello schermo.

Grazie per l'ascolto e per gli eventuali consigli!

Steama

unread,
Dec 22, 1999, 3:00:00 AM12/22/99
to
Ho da poco realizzato la funzionalità che ti serve, pero' senza il controllo
di cui parli (non ne conoscevo l'esistenza).
Ho convertito coordinate geografiche espresse in Latitudine e Longitudine in
coordinate schermo (Pixel o Twips in funzione delle necessità) ed ho potuto
presentare a video la cartografia selezionata. Successivamente ho dovuto
trasformare le azioni operatore sulla mappa da coordinate schermo a
Lat-Long. Il mio metodo e' TOTALMENTE matematico. Nessun utilizzo di
controlli specifici. E' un po' lunghetto da spiegare, quindi se sei
interessato dammi l'OK e cerco di buttare giu' una spiegazione scritta.

....magari in cambio dammi delle informazioni sul controllo MapobjectsLT

...per esempio, il componente che lo include.

Ciao

Stefano

Dario Matta <dm...@risorseambientali.it> wrote in message
83q5h7$2nge$1...@stargate1.inet.it...

Dario Matta

unread,
Dec 22, 1999, 3:00:00 AM12/22/99
to
Puoi scaricare gratuitamente a questo indirizzo il controllo di cui ti ho
parlato.

http://www.esri.com/software/mapobjectslt/mapobjectslteval.html

Se gentilmente rispondi al mio appello e mi dicessi che metodo matematico o
proporzione o altro hai usato per risolvere il problema te ne sarei
veramente grato.


A presto.
Ciao e grazie

Steama

unread,
Dec 22, 1999, 3:00:00 AM12/22/99
to
Dunque .....
per il momento a me funziona, ma il programma non e' ancora terminato.
Diciamo che per il momento non ci sono sorprese rilevanti ....

La subroutine che segue (ComputeCV) deve essere richiamata ogni volta che
cambi videata. Fornirai in input i valori Lat-Long ed X-Y degli estremi
ALTO-SINISTRO e BASSO-DESTRO facendo attenzione al riferimento in quanto le
coordinate Lat-Long sono invertite rispetto a quelle X-Y per quanto riguarda
le ORDINATE (asse Y) . Questa procedura ti fornirà in output i fattori di
conversione a,b,c,d che dovranno successivamente essere forniti in input
alle procedure di conversione.

Public Sub ComputeCV(ByVal Lat1 As Long, _
ByVal Lon1 As Long, _
ByVal Lat2 As Long, _
ByVal Lon2 As Long, _
ByVal x1 As Long, _
ByVal y1 As Long, _
ByVal x2 As Long, _
ByVal y2 As Long, _
ByRef a As Double, _
ByRef b As Double, _
ByRef c As Double, _
ByRef d As Double)

'
' Calcolo dei fattori di conversione da coordinate geografiche a
' coordinate cartesiane per proiezione di Mercatore secondo le formule
' x = a*lon(secondi) + b e y = c*log(tan(pigreco/4 + lat(sec->rad)/2))+ d
'
Dim Num, Tmp As Double

Num = CDbl(x1 - x2) / CDbl(Lon1 - Lon2)
a = Num
b = (x1 - Num * Lon1)

Tmp = Log(Tan((pi / 4) + (CDbl(Lat1) * pi / 1296000#)))

Num = Tmp - Log(Tan((pi / 4) + (CDbl(Lat2) * pi / 1296000#)))
Num = (y1 - y2) / Num

c = Num
d = y1 - (Num * Tmp)

End Sub

La subroutine che segue effettua la conversione da Lat-Long a X-Y. Si
forniranno in input la coordinata da convertire ed i fattori di conversione
precedentemente calcolati.


Public Sub LLtoXY(ByVal Lat As Long, _
ByVal Lon As Long, _
ByVal a As Double, _
ByVal b As Double, _
ByVal c As Double, _
ByVal d As Double, _
ByRef X As Long, _
ByRef Y As Long)
'
' Conversione da Lat Long (in secondi) a X-Y secondo le formule:
' x = a*lon + b e y = c*log(tan(pigreco/4 + lat(sec->rad)/2)) + d
'
Dim Num As Double

Num = Lat / 7200# + 45#
Num = Tan(pi * (Num / 180#))
Num = c * Log(Num) + d

Y = CDbl(CLng(Num + 0.5))

Num = a * Lon + b + 0.5

X = CDbl(CLng(Num))

End Sub

La subroutine che segue effettua la conversione da X-Y a Lat-Long . Si
forniranno in input la coordinata da convertire ed i fattori di conversione
precedentemente calcolati.

Public Sub XYtoLL(ByVal X As Long, _
ByVal Y As Long, _
ByVal a As Double, _
ByVal b As Double, _
ByVal c As Double, _
ByVal d As Double, _
ByRef Lat As Long, _
ByRef Lon As Long)

'
' Conversione da X-Y a Lat Long (in secondi) secondo le formule:
' Lat = (rad->sec)(2*(atan(exp((y - d)/c)) - pigreco/4 e
' Long= (x-b) / a
'

Dim Num As Double

Num = (Y - d) / c
Num = Exp(Num)
Num = 4# * Atn(Num) / pi - 1#
Num = Num * 324000#
Lat = CLng(Num)

Num = (X - b) / a
Lon = CLng(Num)

End Sub

Per il momento e' tutto.
Se ci dovessero essere malfunzionamenti o problemi di qualsiasi genere fammi
sapere ...... vorrebbe dire che ho una bomba inesplosa nel programma !!

Ciao

Stefano

Maurizio Napolitano

unread,
Dec 23, 1999, 3:00:00 AM12/23/99
to

FINALMENTE QUALCUNO CHE USA MAPOBJECT CON VB!
Cominciavo a credere di essere l'unico su questo NG!!!
Ci possiamo tenere informati per ogni cassata?
Ciao


Dario Matta

unread,
Dec 23, 1999, 3:00:00 AM12/23/99
to
"Cessamente!!!"

Franco Languasco

unread,
Dec 24, 1999, 3:00:00 AM12/24/99
to Dario Matta
Ciao a tutti i cartografi:
Io uso questo sistema, per la cartografia aeronautica..
La mappa, reticoli di meridiani e paralleli e rotte di volo sono disegnate su
di un
PictureBox scalato in gradi decimali di latitudine e longitudine con:
picCarta.Scale (Lg1, Lt2)-( Lg2, Lt1)
con Lt1, Lg1 coordinate minime e Lt2, Lg2 coordinate massime (sempre in gradi
decimali). Eventuali conversioni da/a Gradi.Primi.Secondi, metri di Mercatore
(per il
GPS) o radianti vengono gestiti con appropriate routines.
Quando invece mi serve il valore in [pixel], ad esempio per alimentare la
StretchBlt(....)
che mi costruisce una carta aggregando pezzi di fogli d' atlante, uso le
istruzioni:
Lgx_pix = picCarta.ScaleX(Lgx - picCarta.ScaleLeft, vbUser, vbPixels)
Ltx_pix = picCarta.ScaleY(Ltx - picCarta.ScaleTop, vbUser, vbPixels)

e ovviamente il contrario (...vbPixel, vbUser) per passare da [pixel] a gradi
decimali.

Chiudo, ringraziando Dario che mi ha permesso di scoprire la presenza sull' NG
di altri
"Mercatori" (dovremmo restare i contatto per scambi reciproci) e auguro a tutti
Buon
Natale e Felice Nuovo Secolo.

Franco

Dario Matta

unread,
Dec 27, 1999, 3:00:00 AM12/27/99
to
Grazie a tutti per aver risposto al mio appello...
Spero che potremo continuare a sentirci e parlare di nuovo insieme....
Auguri di Buon Natale e Felice anno nuovo a presto.

Ciao Dario..

0 new messages