Grazie per l'ascolto e per gli eventuali consigli!
....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...
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
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
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
Ciao Dario..