🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#137614
Author: Phantom
Date: Sat, 23 Jun 2018 08:20
34 lines
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
#137615
Author: Zbigniew Bratko
Date: Sat, 23 Jun 2018 15:13
66 lines
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
#137616
Author: Zbigniew Bratko
Date: Sun, 24 Jun 2018 08:33
90 lines
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
#137617
Author: Phantom
Date: Sun, 24 Jun 2018 10:19
13 lines
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
#137618
Author: Zbigniew Bratko
Date: Sun, 24 Jun 2018 12:56
79 lines
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
#137619
Author: Phantom
Date: Sun, 24 Jun 2018 13:50
1 lines
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