🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

8 total messages Started by Borneq Sat, 26 Apr 2014 17:53
[cross] Jak odrysowywać dane o współrzędnych geograficznych?
#90967
Author: Borneq
Date: Sat, 26 Apr 2014 17:53
19 lines
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?
#90968
Author: mt
Date: Sat, 26 Apr 2014 21:53
47 lines
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?
#90969
Author: Borneq
Date: Sun, 27 Apr 2014 04:28
27 lines
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?
#90971
Author: Borneq
Date: Sun, 27 Apr 2014 04:51
12 lines
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?
#90972
Author: Sergiusz Rozanski
Date: Sun, 27 Apr 2014 08:10
19 lines
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?
#90970
Author: mt
Date: Sun, 27 Apr 2014 09:40
47 lines
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?
#90973
Author: mt
Date: Sun, 27 Apr 2014 09:44
23 lines
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?
#90974
Author: Borneq
Date: Sun, 27 Apr 2014 13:21
12 lines
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