Tyle wiem na temat co jest na wikipedii. Mapy są dostępne np. tutaj. Weźmy jako przykład Wernersdorf, która zawiera m.in. okolice Piekła i Białej Góry.
Ściągnąłem oba wyżej
wymienione pliki 2079_Wernersdorf_1939_jpg.map
oraz 2079_Wernersdorf_1939.jpg
.
Po to aby wprowadzić współrzędne interesujących mnie punktów do GPSa
posłużyłem się programem OziExplorer (w wersji Trial).
Po załadowaniu pliku 2079_Wernersdorf_1939_jpg.map
w pasku na na górze okna ukazują
się współrzędne punktu, na którym znajduje się wskaźnik myszy. W notacji mieszanej, tj. przykładowo
53° 54,918'
oraz 18° 53,170 minut (mieszanej bo nie ma sekund tylko dziesiąte części minuty). Pewnie można to przestawić, ale
ja spisałem jak jest i zamieniłem na układ 100% dziesiętny używając skryptu:
#!/usr/bin/perl use Geo::Coordinates::DecimalDegrees; my @dms = @ARGV ; print STDERR "*** dms2decimal deg min sec ... deg/min/sec niekoniecznie sa liczbami calkowitymi....\n"; print STDERR "*** każde trzy liczby w linii poleceń są traktowane jako deg min sec *** \n"; while (@dms) { $deg = shift @dms ; $min = shift @dms ; $sec = shift @dms ; printf "%f %f %f = %.6f\n", $deg, $min, $sec, dms2decimal($deg, $min, $sec); } ## przykład: dms2decimal.pl 53 54.918 0 18 53.170 0 > 53.000000 54.918000 0.000000 = 53.915300 > 18.000000 53.170000 0.000000 = 18.886167
Czyli 53° 54,918'/18° 53,170 to 53.915300/18.886167 w notacji dziesiętnej. Nb. wszystkie on-line serwisy do
konwersji deg→dms, które oglądałem,
wymagają całkowitych wartości stopni/minut/sekund, a Geo::Coordinates::DecimalDegrees
nie. Inna sprawa
czy to co podaje jest poprawne. Na 100% pewności nie mam ale chyba tak.
Na mapie Google wygląda to tak.
Wg mapy Wernersdorf i OziExplorera w tym miejscu jest środek mostu nad Nogatem na drodze nr 605 w Białej Górze, czyli ten punkt.
Różnica dla długości i szerokości geograficznej wynosi odpowiednio 53.915300 - 53.913498 = 0,001802 oraz 18.886167 - 18.883739 = 0,002428.
W odpowiedź na pytanie czy ja coś poplątałem czy ktoś inny na razie nie będę się wgłębiał. Zamiast tego to co odczytam w OziExplorerze skoryguję (na razie) za pomocą wyżej wyznaczonych poprawek.
OziExplorer się instaluje w Fedorze, się uruchamia za pomocą wine, ale beznadziejnie kończy pracę komunikatem o brakującej pamięci...
W bibliotece,
z której korzystam
do wizualizowania plików GPX na google maps,
do wyświetlenia
punktu (czyli elementu wpt
) wykorzystywana jest funkcja
GPXParser.prototype.CreateMarker
:
GPXParser.prototype.CreateMarker = function(point) { var lon = parseFloat(point.getAttribute("lon")); var lat = parseFloat(point.getAttribute("lat")); // ... ... ... var marker = new GMarker(new GLatLng(lat,lon)); // ... ... ... }
W powyższym
symbol // ... ... ...
oznacza pominięte fragmenty funkcji.
Wszystkie ikony
dla elementów wpt
są oznaczone standardową dużą czerwoną pinezką.
Ja chcę, żeby moja pinezka ,,reagowała'' na obecność elementu
type
, który według
schematu GXP, określa typ punktu.
Przykładowo miejsce odwiedzone będę oznaczał jako:
<wpt lat="54.071729" lon="18.446817"><ele/> <name>Skarszewy</name> <type>visited</type> <extensions><html>Skarszewy</html></extensions></wpt>
Tak oznaczone miejsca mają być wyróżniane za pomocą niebieskiej ikony. Pozostałe będą oznaczane czerwoną:
GPXParser.prototype.CreateMarker = function(point) { var lon = parseFloat(point.getAttribute("lon")); var lat = parseFloat(point.getAttribute("lat")); var wpType = point.getElementsByTagName("type")[0] ; // czy istnieje element type? var wpTypeTxt = "?"; if ( wpType ) { wpTypeTxt = wpType.firstChild.nodeValue; } // jeżeli tak przypisz wartość // ... ... ... // zmiana wyglądu, skopiowane z: http://kody.wig.pl/tag/gmarker/ var cIcon = new GIcon(); // Ikony do pobrania z http://sites.google.com/site/gmapicons/ // umieszczam w katalogu '/icons_/' if ( wpTypeTxt == "visited" ) { cIcon.image = '/icons_/mm_20_blue.png'; } else { cIcon.image = '/icons_/mm_20_red.png'; } cIcon.shadow = "/icons_/mm_20_shadow.png"; var marker = new GMarker(new GLatLng(lat,lon), cIcon ); cIcon.iconSize = new GSize(12, 20); cIcon.shadowSize = new GSize(22, 20); cIcon.iconAnchor = new GPoint(6, 20); cIcon.infoWindowAnchor = new GPoint(5, 1); // ... ... ... }
Wynik można obejrzeć tutaj.