Thread View: pl.comp.bazy-danych.msaccess
6 messages
6 total messages
Started by Phantom
Sat, 23 Jun 2018 08:20
Konwersja współrzędnych geograficznych - ciąg dalszy
Author: Phantom
Date: Sat, 23 Jun 2018 08:20
Date: Sat, 23 Jun 2018 08:20
34 lines
2417 bytes
2417 bytes
Witam dotyczy: przeliczania wartości duble na stopnie W poprzedniej konwersacji na ten temat znalazłem genialny kod Krzysztofa Noworyty na powyższe. I tak dla wartości np.: 50,2684844521002 (współrzędna geograficzna w układzie WGS) funkcja zwraca: +50°16'07" - oczywiście wynik jest prawidłowy, ale: Wprowadzając tą samą wartość wgs (50,2684844521002) do GoogleMaps otrzymuję: 50°16'06.5" - czyli wynik jest dokładniejszy. Czy ktoś z grupowiczów ma pomysł na "podkręcenie" funkcji i zwiększenie dokładności obliczeń? Funkcja poniżej: Function DoubleNaStopnie(dbSt As Double) As String Dim x As Double, y As Double Dim znak As String znak = "+" If Sgn(dbSt) < 0 Then znak = "-" dbSt = Abs(dbSt) x = Int(CDec(dbSt)): y = CDec(dbSt) - x DoubleNaStopnie = znak & x & Chr(176) & Format(y / 24, "nn\'ss") & Chr(34) End Function Proszę o pomoc Pozdrawiam Tomek
Re: Konwersja współrzędnych geograficznych - ciąg dalszy
Author: Zbigniew Bratko
Date: Sat, 23 Jun 2018 15:13
Date: Sat, 23 Jun 2018 15:13
66 lines
2853 bytes
2853 bytes
W dniu 2018-06-23 o 10:20, Phantom pisze:
> Witam
>
> dotyczy: przeliczania wartości duble na stopnie
>
> W poprzedniej konwersacji na ten temat znalazłem genialny kod Krzysztofa Noworyty na powyższe.
> I tak dla wartości np.:
> 50,2684844521002 (współrzędna geograficzna w układzie WGS)
> funkcja zwraca:
> +50°16'07" - oczywiście wynik jest prawidłowy, ale:
> Wprowadzając tą samą wartość wgs (50,2684844521002) do GoogleMaps
> otrzymuję:
> 50°16'06.5" - czyli wynik jest dokładniejszy.
>
> Czy ktoś z grupowiczów ma pomysł na "podkręcenie" funkcji i zwiększenie dokładności obliczeń?
> Funkcja poniżej:
>
> Function DoubleNaStopnie(dbSt As Double) As String
[...]
>
> End Function
[...]
Przetestuj poniższą funkcję:
'_____________________________________________________________
Public Function zbDoubleNaStopnie(dblSt As Double) As String
Dim dblMin As Double
Dim dblSec As Double
Dim sRet As String
dblMin = (dblSt - Int(dblSt)) * 60
dblSec = dblMin - Int(dblMin)
' stopnie i minuty
sRet = sRet & CStr(Int(dblSt)) & Chr(176) & CStr(Int(dblMin)) & "'"
' sekundy
sRet = sRet & CStr(Int(dblSec * 60))
' reszta po przecinku zaokrąglona do 2 miejsc
sRet = sRet & "." & Mid$(CStr(bs_Round(dblSec * 60 - _
Int(dblSec * 60), 2)), 3) & Chr(34)
zbDoubleNaStopnie = sRet
End Function
'____________________________________________________________
Public Function bs_Round(Number As Variant, _
NumDigitsAfterDecimal As Long) As Double
If Not IsNumeric(Number) Then Err.Raise 5
bs_Round = Sgn(Number) * Int(CDec(Abs(Number)) * _
(10 ^ NumDigitsAfterDecimal) + 0.5) / _
(10 ^ NumDigitsAfterDecimal)
End Function
--
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: Konwersja współrzędnych geograficznych - ciąg dalszy
Author: Zbigniew Bratko
Date: Sun, 24 Jun 2018 08:33
Date: Sun, 24 Jun 2018 08:33
90 lines
3353 bytes
3353 bytes
W dniu 2018-06-23 o 17:13, Zbigniew Bratko pisze:
> W dniu 2018-06-23 o 10:20, Phantom pisze:
>> Witam
>>
>> dotyczy: przeliczania wartości duble na stopnie
>>
>> W poprzedniej konwersacji na ten temat znalazłem genialny kod
>> Krzysztofa Noworyty na powyższe.
>> I tak dla wartości np.:
>> 50,2684844521002 (współrzędna geograficzna w układzie WGS)
>> funkcja zwraca:
>> +50°16'07" - oczywiście wynik jest prawidłowy, ale:
>> Wprowadzając tą samą wartość wgs (50,2684844521002) do GoogleMaps
>> otrzymuję:
>> 50°16'06.5" - czyli wynik jest dokładniejszy.
>>
>> Czy ktoś z grupowiczów ma pomysł na "podkręcenie" funkcji i
>> zwiększenie dokładności obliczeń?
>> Funkcja poniżej:
>>
>> Function DoubleNaStopnie(dbSt As Double) As String
>
> [...]
>
>>
>> End Function
>
> [...]
>
> Przetestuj poniższą funkcję:
Poniższa funkcja nie działa prawidłowo
>
>
> '_____________________________________________________________
> Public Function zbDoubleNaStopnie(dblSt As Double) As String
> Dim dblMin As Double
> Dim dblSec As Double
> Dim sRet As String
>
[...]
>
> End Function
[...]
Ta jest bardziej uniwersalna i powinna działać dobrze:
'_______________________________________________________________
Public Function zbDoubleNaStopnie( _
ByVal dblSt As Double, _
ByVal bDigitAfterDec As Long) As String
Dim dblMin As Double
Dim dblSec As Double
Dim sRet As String
' znak
sRet = IIf(dblSt < 0, "-", "")
dblSt = Abs(dblSt)
dblMin = (dblSt - Int(dblSt)) * 60
dblSec = dblMin - Int(dblMin)
' stopnie i minuty
sRet = sRet & CStr(Int(dblSt)) & Chr(176) & CStr(Int(dblMin)) & "'"
' sekundy i dziesiętne sekundy
sRet = sRet & Trim(Str(bs_Round(dblSec * 60, bDigitAfterDec))) & Chr(34)
zbDoubleNaStopnie = sRet
End Function
'____________________________________________________________
Public Function bs_Round(Number As Variant, _
NumDigitsAfterDecimal As Long) As Double
If Not IsNumeric(Number) Then Err.Raise 5
bs_Round = Sgn(Number) * Int(CDec(Abs(Number)) * _
(10 ^ NumDigitsAfterDecimal) + 0.5) / _
(10 ^ NumDigitsAfterDecimal)
End Function
--
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: Konwersja współrzędnych geograficznych - ciąg dalszy
Author: Phantom
Date: Sun, 24 Jun 2018 10:19
Date: Sun, 24 Jun 2018 10:19
13 lines
2647 bytes
2647 bytes
Witam Testuję ostatnią funkcję z indeksem 2 czyli do dwóch miejsc po przecinku na sekundach. Porównanie do modułów googla prezentuj się następująco: zb 50°16'6.54" google zwraca 50°16'06.54" zb 50°16'8.2" google zwraca 50°16'08.20" Sprawdziłem na mapie i punkt na mapie jest w tym samym miejscu, czyli funkcja liczy poprawnie, tylko ten wygląd danych... w raporcie (wartość jedna pod drugą) wygląda.. nie wygląda. Wiem... nudzę. Dzięki zb za pomoc PS.: Panie Zbigniewie próbowałem kilkakrotnie się z Panem skontaktować (m. in. przez messengera). Pana opracowania vb, zwłaszcza mapowe są na najwyższym poziomie. Moje zapotrzebowanie na takie rozwiązania są nieograniczone. Przepraszam za śmiałość, ale gdyby był Pan znalazł chwilę czasu i był zainteresowany współpracą to proszę o kontakt: 607-69-92-69 lub podanie kontaktu do siebie i terminu ewentualnego kontaktu. Nadmieniam, ze jesteśmy (najprawdopodobniej) prawie sąsiadami :) Pozdrawiam Tomek
Re: Konwersja współrzędnych geograficznych - ciąg dalszy
Author: Zbigniew Bratko
Date: Sun, 24 Jun 2018 12:56
Date: Sun, 24 Jun 2018 12:56
79 lines
4047 bytes
4047 bytes
W dniu 2018-06-24 o 12:19, Phantom pisze:
> Witam
> Testuję ostatnią funkcję z indeksem 2 czyli do dwóch miejsc po przecinku na sekundach.
> Porównanie do modułów googla prezentuj się następująco:
> zb 50°16'6.54" google zwraca 50°16'06.54"
> zb 50°16'8.2" google zwraca 50°16'08.20"
> Sprawdziłem na mapie i punkt na mapie jest w tym samym miejscu, czyli funkcja liczy poprawnie, tylko ten wygląd danych... w raporcie (wartość jedna pod drugą) wygląda.. nie wygląda.
> Wiem... nudzę.
No dobra ;-)
Przetestuj poniższą funkcję:
Public Function zbDoubleNaStopnie( _
ByVal dblSt As Double, _
ByVal bDigitAfterDec As Byte) As String
Dim dblMin As Double
Dim dblSec As Double
Dim sRet As String
Dim sSec As String
' znak
sRet = IIf(dblSt < 0, "-", "")
dblSt = Abs(dblSt)
dblMin = (dblSt - Int(dblSt)) * 60
dblSec = dblMin - Int(dblMin)
' stopnie i minuty
sRet = sRet & CStr(Int(dblSt)) & Chr(176) & _
Format$(Int(dblMin), "00") & "'"
' formatuj sekundy i dziesiętne części sekundy
sSec = Format$(bs_Round(dblSec * 60, bDigitAfterDec), _
IIf(bDigitAfterDec = 0, "00", _
"00." & String(bDigitAfterDec, "0")))
' zastąp przecinek kropką
sSec = Replace(sSec, ",", ".", , , vbBinaryCompare)
zbDoubleNaStopnie = sRet & sSec & Chr(34)
End Function
'____________________________________________________________
Public Function bs_Round(Number As Variant, _
NumDigitsAfterDecimal As Byte) As Double
If Not IsNumeric(Number) Then Err.Raise 5
bs_Round = Sgn(Number) * Int(CDec(Abs(Number)) * _
(10 ^ NumDigitsAfterDecimal) + 0.5) / _
(10 ^ NumDigitsAfterDecimal)
End Function
>
> Dzięki zb za pomoc
>
> PS.: Panie Zbigniewie próbowałem kilkakrotnie się z Panem skontaktować (m. in. przez messengera). Pana opracowania vb, zwłaszcza mapowe są na najwyższym poziomie. Moje zapotrzebowanie na takie rozwiązania są nieograniczone. Przepraszam za śmiałość, ale gdyby był Pan znalazł chwilę czasu i był zainteresowany współpracą to proszę o kontakt: 607-69-92-69 lub podanie kontaktu do siebie i terminu ewentualnego kontaktu. Nadmieniam, ze jesteśmy (najprawdopodobniej) prawie sąsiadami :)
[...]
Obecnie Accessem zajmuję się z nudów, jak nie mam nic innego do roboty.
Z biblioteką OpenLayers ostatni kontakt miałem ze 3 lata temu, jak
również z Google Maps API.
W chwili obecnej (w wolnych chwilach) bawię się Krajowym Rejestrem
Urzędowym Podziału Terytorialnego Kraju (TERYT).
Miałem zamiar pobrać współrzędne GPS wszystkich miejscowości i ew. ulic.
Jak widać z Accessem mam niewielki kontakt.
Czasami jestem w stanie pomóc na tejże grupie.
Ewentualny kontakt ze mną: admin "małpka" accdb "kropeczka" pl,
ale nic nie obiecuję.
--
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: Konwersja współrzędnych geograficznych - ciąg dalszy
Author: Phantom
Date: Sun, 24 Jun 2018 13:50
Date: Sun, 24 Jun 2018 13:50
1 lines
1662 bytes
1662 bytes
Poszło! :))
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads