Thread View: pl.rec.gps
8 messages
8 total messages
Started by Borneq
Sat, 26 Apr 2014 17:53
[cross] Jak odrysowywać dane o współrzędnych geograficznych?
Author: Borneq
Date: Sat, 26 Apr 2014 17:53
Date: Sat, 26 Apr 2014 17:53
19 lines
2086 bytes
2086 bytes
W OpenStreetMap dane zapisywane są w formie długości i szerokości geograficznej. Jednak przy wyświetlaniu tych danych nie można bezpośrednio przeskalować ich na piksele ponieważ wtedy widok będzie rozciągnięty w poziomie. Można by ewentualnie ścieśnić poziomo przez współczynnik cos(latitude=szerokość geograficzna) Aby dobrze wyświetlić, to myślę, że najpierw należałoby przekonwertować do współrzędnych kartezjańskich x,y,z (gdzie (0,0,0) środek Ziemi) a potem przyłożyć płaszczyznę do pewnego punktu np. środka Polski prosotpadle do wektora (0,0,0)-(x,y,z) i rzutować równololegle na płaszczyznę. Tu mamy kłopot, bo dla każdej mapy będzie inny punkt przyłożenia, gdy powiększymy wycinek Polski, punkt przyłożenia będzie centrum tego wycinka. Stąd nie można przekonwertować (lat,lon) na (x,y) jednorazowo dla całej bazy, ale taka konwersja będzie wymagana przy odrysowywaniu. I tu mamy drugi kłopot, bo nie wiadomo jak przyśpieszyć odrysowywanie przez odrzucenie elementów, całych grup elementów, które nie mieszczą się na ekranie, bo ekran trzeba by rzutować teraz odwrotnie na współrzędne geograficzne, a nawet nie będzie prostokątem.
Re: [cross] Jak odrysowywać dane o współrzędnych geograficznych?
Author: mt
Date: Sat, 26 Apr 2014 21:53
Date: Sat, 26 Apr 2014 21:53
47 lines
3693 bytes
3693 bytes
W dniu 2014-04-26 19:53, Borneq pisze: > W OpenStreetMap dane zapisywane są w formie długości i szerokości > geograficznej. W OSM dane źródłowe zapisywane są w formie wektorów w odwzorowaniu WGS84, natomiast serwer danych zwraca je (czy to do przeglądarki czy do innego programu potrafiącego korzystać z tych danych) w odwzorowaniu WGS84/Pseudo Merkator (tak samo jak Google Maps). > Jednak przy wyświetlaniu tych danych nie można > bezpośrednio przeskalować ich na piksele ponieważ wtedy widok będzie > rozciągnięty w poziomie. ?? Przy wyświetlaniu gdzie? Jakie skalowanie na piksele? Mógłbyś jaśniej o co chodzi? > Można by ewentualnie ścieśnić poziomo przez współczynnik > cos(latitude=szerokość geograficzna) > Aby dobrze wyświetlić, to myślę, że najpierw należałoby przekonwertować > do współrzędnych kartezjańskich x,y,z (gdzie (0,0,0) środek Ziemi) a > potem przyłożyć płaszczyznę do pewnego punktu np. środka Polski > prosotpadle do wektora (0,0,0)-(x,y,z) i rzutować równololegle na > płaszczyznę. > Tu mamy kłopot, bo dla każdej mapy będzie inny punkt przyłożenia, gdy > powiększymy wycinek Polski, punkt przyłożenia będzie centrum tego > wycinka. Stąd nie można przekonwertować (lat,lon) na (x,y) jednorazowo > dla całej bazy, ale taka konwersja będzie wymagana przy odrysowywaniu. > I tu mamy drugi kłopot, bo nie wiadomo jak przyśpieszyć odrysowywanie > przez odrzucenie elementów, całych grup elementów, które nie mieszczą > się na ekranie, bo ekran trzeba by rzutować teraz odwrotnie na > współrzędne geograficzne, a nawet nie będzie prostokątem. Czytam to któryś raz i wciąż nie wiem o co Ci tak naprawdę chodzi, ale żadnych kłopotów nie ma z wyświetlaniem czy konwersją danych OSM w różnych odwzorowaniach, mam wrażenie że próbujesz wymyślać na nowo coś, co już dawno zostało opracowane. Mogę się jedynie domyślać, że owo "rozciągnięcie" które wg. Ciebie jest niepoprawne wynika z wyświetlania danych w WGS84 (taka charakterystyka tego odwzorowania, nie ma w tym nic błędnego). Jeżeli chciałbyś mieć dane "bardziej ścieśnione" jak to określiłeś np. dla Polski, to wystarczy przekonwertować (albo włączyć reprojekcję w locie, zależy czego używamy do wyświetlania danych) dane chociażby do PUWG 1992. Nie trzeba wymyślać żadnych płaszczyzn rzutowania, to już dawno zostało zrobione i to bardzo dobrze. -- marcin
Re: [cross] Jak odrysowywać dane o współrzędnych geograficznych?
Author: Borneq
Date: Sun, 27 Apr 2014 04:28
Date: Sun, 27 Apr 2014 04:28
27 lines
2535 bytes
2535 bytes
W dniu 2014-04-26 23:53, mt pisze: > W dniu 2014-04-26 19:53, Borneq pisze: >> W OpenStreetMap dane zapisywane są w formie długości i szerokości >> geograficznej. > > W OSM dane źródłowe zapisywane są w formie wektorów w odwzorowaniu > WGS84, natomiast serwer danych zwraca je (czy to do przeglądarki czy do > innego programu potrafiącego korzystać z tych danych) w odwzorowaniu > WGS84/Pseudo Merkator (tak samo jak Google Maps). Czyli dane offline w plikach *.pbf są w postaci WGS84, ale niekoniecznie musimy ściągać całych plików dla poszczególnych krajów bo z serwera możemy dostać punkty dla zadanego obszaru? Czy gdzieś na stronach wiki.openstreetmap.org jest opisane API do ściągania przetworzonych danych np. na smartfona? Patrzyłem jak OpenStreetMap obrazowuje dla małej skali: http://www.openstreetmap.org/#map=1/-47/-6 (to jest właśnie ten Pseudo Merkator?) okazuje się, że zachowując kąty rozszerza przy biegunach zarówno poziomo jaki pionowo powiększając Antarktydę. Czy da się dopasować to do zdjęć satelitarnych pamiętając by przy biegunach mieć inną skalę tych zdjęć? Mi chodziło o coś wręcz przeciwnego - taki widok jak w Google Eartch - jak nazywa się taki rzut? Choć pseudomerkator ma tę zaletę że jest globalnym odwzorowaniem bez żadnych "punktów przyłożenia", choć z drugiej strony nie będzie można pokazać w nim całej Antarktydy. Jak konwertować z WGS84 na pseudo-Merkatora?
Re: [cross] Jak odrysowywać dane o współrzędnych geograficznych?
Author: Borneq
Date: Sun, 27 Apr 2014 04:51
Date: Sun, 27 Apr 2014 04:51
12 lines
1715 bytes
1715 bytes
W dniu 2014-04-26 23:53, mt pisze: > W OSM dane źródłowe zapisywane są w formie wektorów w odwzorowaniu > WGS84, natomiast serwer danych zwraca je (czy to do przeglądarki czy do > innego programu potrafiącego korzystać z tych danych) w odwzorowaniu > WGS84/Pseudo Merkator (tak samo jak Google Maps). Serwer OpenStreetMap dla mniejszej skali podaje mniej szczegółów. Na przykład największą skalą jest 19, przy skali 16 nie podaje numerów domów, przy skali 13 podaje tylko ulice itd. Chciałbym dla mapy offline zrobić to samo, jakiego algorytmu do tego użyć, czy polega że każdy typ ma minimalną skalę przy której będzie wyświetlony czy też generalizacja jest bardziej skomplikowana?
Re: [cross] Jak odrysowywać dane o współrzędnych geograficznych?
Author: Sergiusz Rozanski
Date: Sun, 27 Apr 2014 08:10
Date: Sun, 27 Apr 2014 08:10
19 lines
2272 bytes
2272 bytes
Dnia 27.04.2014 Borneq <borneq@antyspam.hidden.pl> napisał/a: > W dniu 2014-04-26 23:53, mt pisze: >> W OSM dane źródłowe zapisywane są w formie wektorów w odwzorowaniu >> WGS84, natomiast serwer danych zwraca je (czy to do przeglądarki czy do >> innego programu potrafiącego korzystać z tych danych) w odwzorowaniu >> WGS84/Pseudo Merkator (tak samo jak Google Maps). > > Serwer OpenStreetMap dla mniejszej skali podaje mniej szczegółów. Na > przykład największą skalą jest 19, przy skali 16 nie podaje numerów > domów, przy skali 13 podaje tylko ulice itd. > Chciałbym dla mapy offline zrobić to samo, jakiego algorytmu do tego > użyć, czy polega że każdy typ ma minimalną skalę przy której będzie > wyświetlony czy też generalizacja jest bardziej skomplikowana? Co masz na myśli pisząc "podaje" - kafelki czy dane z bazy OSM? Jeśli chcesz budować kafelki do bazy offline - dla potrzeb 1 usera to zły pomysł, pozostań przy wektorach. Matematyka kafelka jest dość prosta, poszukaj w google 'lon lat to tile' i dostaniesz gotowe wzory, funkcje, biblioteki.
Re: [cross] Jak odrysowywać dane o współrzędnych geograficznych?
Author: mt
Date: Sun, 27 Apr 2014 09:40
Date: Sun, 27 Apr 2014 09:40
47 lines
3569 bytes
3569 bytes
W dniu 2014-04-27 06:28, Borneq pisze: > Czyli dane offline w plikach *.pbf są w postaci WGS84, ale niekoniecznie > musimy ściągać całych plików dla poszczególnych krajów bo z serwera > możemy dostać punkty dla zadanego obszaru? ?? Litości, napisz bardziej po polsku w czym rzecz. Dane udostępniane chociażby na geofabrik (w przypadku plików shp) są w EPSG:4326 (WGS84), ale to nie ma większego znaczenia, to jest wektor, który można sobie przepisać do dowolnego odwzorowania bez straty jakości, natomiast kafelki udostępniane przez serwery OSM są w EPSG:3857 (WGS84/Pseudo Merkator). > Czy gdzieś na stronach wiki.openstreetmap.org jest opisane API do > ściągania przetworzonych danych np. na smartfona? No przecież chociażby z poziomu niektórych aplikacji na telefonie można sobie pobrać kafelki i zapisać jako dane offline. > Patrzyłem jak OpenStreetMap obrazowuje dla małej skali: > http://www.openstreetmap.org/#map=1/-47/-6 > (to jest właśnie ten Pseudo Merkator?) Tak, to co się wyświetla w przeglądarce jest w EPSG:3857. > okazuje się, że zachowując kąty rozszerza przy biegunach zarówno poziomo > jaki pionowo powiększając Antarktydę. Normalne. Na tym polega rzutowanie sfery na płaszczyznę. Nie ma odwzorowań, które byłyby jednocześnie wiernokątne, wiernopowierzchniowe i wiernoodległościowe. Pewną namiastką tego jest globus. > Mi chodziło o coś wręcz przeciwnego - taki widok jak w Google Eartch - > jak nazywa się taki rzut? Choć pseudomerkator ma tę zaletę że jest > globalnym odwzorowaniem bez żadnych "punktów przyłożenia", choć z > drugiej strony nie będzie można pokazać w nim całej Antarktydy. > Jak konwertować z WGS84 na pseudo-Merkatora? Google Earth pewnie stosuje jakieś zmodyfikowane do własnych potrzeb odwzorowanie, natomiast odwzorowaniem pozwalającym wpisać półkulę w koło jest chociażby odwzorowanie równopowierzchniowe azymutalne poprzeczne, a jak w elipsę to chociażby równopowierzchniowe normalne Mollweidego. Jakie dane chcesz konwertować, pbf? To już są dane binarne. Jak wektor np. w postaci shp to wspomniany chociażby QGIS wystarczy. -- marcin
Re: [cross] Jak odrysowywać dane o współrzędnych geograficznych?
Author: mt
Date: Sun, 27 Apr 2014 09:44
Date: Sun, 27 Apr 2014 09:44
23 lines
2547 bytes
2547 bytes
W dniu 2014-04-27 06:51, Borneq pisze: > W dniu 2014-04-26 23:53, mt pisze: >> W OSM dane źródłowe zapisywane są w formie wektorów w odwzorowaniu >> WGS84, natomiast serwer danych zwraca je (czy to do przeglądarki czy do >> innego programu potrafiącego korzystać z tych danych) w odwzorowaniu >> WGS84/Pseudo Merkator (tak samo jak Google Maps). > > Serwer OpenStreetMap dla mniejszej skali podaje mniej szczegółów. Na > przykład największą skalą jest 19, przy skali 16 nie podaje numerów > domów, przy skali 13 podaje tylko ulice itd. > Chciałbym dla mapy offline zrobić to samo, jakiego algorytmu do tego > użyć, czy polega że każdy typ ma minimalną skalę przy której będzie > wyświetlony czy też generalizacja jest bardziej skomplikowana? A ta mapa offline to w jakiej postaci i w czym wyświetlana? W przypadku OSM i kafelków, mechanizm ich generowania leży po stronie serwera i w jego oprogramowaniu ustawia się widoczność poszczególnych warstw, ich styl i etykietowanie w zależności od skali. Jak masz wektor, to praktycznie każdy program klasy GIS desktop czy GIS serwer pozwala samemu definiować reguły wyświetlania. -- marcin
Re: [cross] Jak odrysowywać dane o współrzędnych geograficznych?
Author: Borneq
Date: Sun, 27 Apr 2014 13:21
Date: Sun, 27 Apr 2014 13:21
12 lines
1836 bytes
1836 bytes
W dniu 2014-04-27 11:44, mt pisze: > A ta mapa offline to w jakiej postaci i w czym wyświetlana? W przypadku > OSM i kafelków, mechanizm ich generowania leży po stronie serwera i w > jego oprogramowaniu ustawia się widoczność poszczególnych warstw, ich > styl i etykietowanie w zależności od skali. Jak masz wektor, to Tych warstw jest sporo, raczej są to pary klucz-wartość. Czy widoczność tych warstw jest zdefiniowana w jakimś pliku np. xml, aby podejrzeć? A jak to jest z prędkością? Przy skali 7 widać prawie całą Polskę, widoczna jedynie niewielka część elementów, jednak jak to jest zrobione? Wyświetla tylko niektóre elementy, jednak musi przejrzeć wszystkie aby na podstawie warstw zdecydowaną ilość odrzucić?
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