Jaki program do wykresu

W dniu 2017-07-14 o 16:45, snipped-for-privacy@gmail.com pisze:

Dzięki. Za mało zajmuję się grafiką, aby takie narzędzia były mi niezbędne.

Zapisałem sobie imagemagick jako kolejny temat - może kiedyś. Na pewno Gimp, Inkscape i DraftSight (lub LibreCad) najpierw (te ostatnie to z mojego wypytania jakiś czas temu na temat wymiarowanego rysunku 2D). Przytłacza mnie ilość "ciekawych rzeczy".

Moje doświadczenie z tym geoportal jest takie, że co rok jak chcę sobie inną mapkę złożyć to strona już wygląda nieco inaczej (inne obszary ekranu są zanieczyszczone). Jak otwieram taki pobrany zrzut w Irfan to zaznaczam obszar bez zanieczyszczeń i widzę parametry tego zaznaczenia. Potem tylko z menu wybieram przetwarzanie wsadowe, wpisuję tam te parametry i każę wycinanie wykonać na wszystkich plikach w kartotece.

Przypuszczam, że jak miałby to zrobione skryptem to i tak co roku musiałbym modyfikować parametry - czyli roboty tyle samo, a to narzędzie znam. Co innego by było jakbym robił to codziennie. P.G.

Reply to
Piotr Gałka
Loading thread data ...

Pan Piotr Gałka napisał:

A jednak ImageMagick również to potrafi. Jest do tego program "import". Napisałem teraz takie coś:

import -window 0x03c00010 Firefox.png

-- i już mam na dysku obrazek okna firefoksa. Ten tajemniczy numerek (ID) znalazłem przez "wmctrl -lp".

Można obie czynności zautomatyzować zbierając do kupy w jeden skrypt, na przykład taki:

#!/bin/sh ID=`wmctrl -lp | grep "Mozilla Firefox" | cut -f 1 -d" "` import -window $ID Firefox.png

-- będzie działać niezależnie od tego, jaki ID ma aktualnie uruchomiony firefox (pod warunkiem, że jest jeden, ale to ograniczenie dla jasności przykładu pomińmy).

Reply to
invalid unparseable

Da się to zrobić, ale jest to nieco bardziej skomplikowane niż jedno wywołanie curla. Obrazy rastrowe przeznaczone do wyświetlania w różnych skalach są przechowywane jako drzewo "kafelków" przeskalowanych do odpowiednich rozdzielczości. Te kafelki mają stałe rozmiary, np.

256x256px albo 512x512px.

Na samym szczycie masz kafelek z mapą w małej skali (czyli mało szczegółów), pokazującej cały pokryty obszar. To jest skala "0" w terminologii aplikacji mapowej. Na następnym poziome ten sam obszar jest przedstawiony w dwukrotnie wyższej rozdzielczości i podzielony na 4 (bądź 2, jeśli jest stosunek boków jest 2:1) kafelki. To jest skala "1". Na poziomie "2" znów masz obraz o dwukrotnie większej rozdzielczości niż na poziomie "1", i na każdy kafelek z "1" przypadają 4 z poziomu "2". W ten sposób tworzysz kolejne poziomy kafelków aż dojdziesz do obrazu (-ów, bo może być to być wiele zeskanowanych arkuszy map) o pełnej rozdzielczości. To będzie twoja mapa o największej skali (czyli najwięcej szczegółów). Poziom z którego pobiera się obrazki jest określony przez wielkość "zoomu", a współrzędne kafelków do pobrania oblicza się na podstawie współrzędnych widoku wyświetlanego na ekranie.

Można ręcznie wyliczyć linki do kafelków i ściągnąć je curlem czy wgetem. Np. dla OpenStreetMap url ma następujący format:

formatting link
$zoom/$kolumna/$wiersz.png, gdzie $zoom, $kolumna i $wiersz to odpowiednio poziom w drzewku, kolumna i wiersz w arkuszu kafelków. Arkusz o najmniejszej skali pokazujący cały glob to
formatting link
kolejne są na
formatting link
formatting link
itd. Jak już ściągniesz wszystkie obrazy kafelków wystarczy je połączyć i masz gotowy obrazek.

Jednak o wiele wygodniej posłużyć się gotową biblioteką. W tej chwili praktycznie do każdego języka można znaleźć pakiet obsługujący ściąganie kafelków. Z R używam pakietu "ggmap", a dla Processing używałem biblioteki "Unfolding" (można też użyć z Javą). Raczej nie będzie w nich obsługi map używanych przez Geoportal, ale jak znasz format linka do kafelków, to w miarę łatwo jest dodać (sam dorzuciłem 6 nowych klas providerów kafelków do Unfolding).

Podobną technikę wykorzystuje się nie tylko do wyświetlania map, ale także do innych wielkich obrazów rastrowych, np. panoram czy zdjęć w rozdzielczości gigapikselowej. Trzeba tylko wygenerować drzewko kafelków i powiedzieć aplikacji wyświetlającej gdzie one są.

Jacek.

Reply to
Jacek Radzikowski

Pan Piotr Gałka napisał:

Po kliknięciu w firefoksie w "Informacje o stronie" (albo po prostu Ctrl I) mamy listę mediów, a wśród nich kafelki, z jakich składa się mapa. Można je zapisać na dysku w oryginale. Mają 512x512px.

To by trzeba napisać sprytnego spidera (taki skrypt jakoby), który pobierze wszystkie kafelki. Trzeba się przy tym autoryzować, więc nie takie proste, ale da się. Będą gigabajty, ale nie w jednym pliku. Tyle że geoportalowcy mogą się w trakcie połapać i zablokować transmisję.

Takie fajerfoksy, co je się je z linii poleceń wpisuje i nie robią żadnych okienek.

Serio. Wget może być za cienki, ale curlem powinno dać się zaemulować działanie normalnej przeglądarki. Albo napisać to w całości w jakimś pythonie.

Reply to
invalid unparseable

Dnia Fri, 14 Jul 2017 14:34:05 -0400, Jacek Radzikowski napisał(a):

A propos - wydaje mi sie, ze kiedys widzialem jakies alternatywne kafelki OSM, znacznie wyrazniejsze. Kojarzy ktos ?

J.

Reply to
J.F.

Tutaj masz kilka publicznie dostępnych, może coś znajdziesz:

formatting link
Jacek

Reply to
Jacek Radzikowski

Pan Jacek Radzikowski napisał:

A jak to wygląda teraz w guglomapach? Kiedyś mi mówili (ludzie z google), że mają całośc opisaną wektorowo, w stronę klienta mapa wyrusza opisana w SVG, a w locie zamieniana jest na kafle PNG. To ostatnie z uwagi na fakt, że to było w czasach, kiedy ludzie używali jeszcze jakichś Internet Explorerów nie kumających SVG. Teraz zajrzałem -- kafli nie widzę. SVG wprost też nie, ale ślady w źródłach są. Jakieś to mocno zamotane, ale działa dobrze.

Reply to
invalid unparseable

Praktycznie każdy serwis serwujący mapy rastrowe korzysta z podziału na kafelki. Wektorowo mogą być wysyłane dane dodatkowe (np. informacje o infrastrukturze, mapa dróg), ale jeśli to są informacje które nie zmieniają się zbyt często to taniej pod względem wydajności jest przerobić je na raster i wyświetlać jako warstwę na mapie bazowej.

Jacek.

Reply to
Jacek Radzikowski

Pan Jacek Radzikowski napisał:

Ale ja tam nie widzę tych kafelków! Kiedyś były wyraźne przy ładowniu. Wszystko wygląda na wektorowe. O, proszę, budynki są 3D! Jak się przesuwa bardzo przybliżoną mapę, to widać raz jedną, raz drugą ścianę domu. Ale nie w każdym miejscu. Kafle są oczywiście w widoku ze zdjęciem satelitarnym, ale też mają warstwę 3D budynków robioną już po strronie przeglądarki.

Reply to
invalid unparseable

Budynki to jest kolejna warstwa, wektorowa. W Google Earth były wysyłane jako KML i renderowane w aplikacji. W Google Maps zdjęcia z powietrza i mapa z drogami jest wysyłana jako kafelki (n.p ten:

formatting link
widzę że warstwa 3d jest ściągana w jakimś formacie binarnym (być może skompresowany KML) i renderowana po stronie klienta. W każdym razie nic nie stoi na przeszkodzie żeby kafelki rastrowe i dane wektorowe były przedstawione na tej samej mapie.

Jacek.

Reply to
Jacek Radzikowski

Pan Jacek Radzikowski napisał:

Oglądam teraz Warszawę i nie widzę niczego rastrowego (na mapach z ulicami, nie na zdjęciach). Ponadto przy kolejnych wejściach na to samo miejsce mam różnie. Poprzednio widziałem płaski Pałac Kultury, teraz jest 3D. To się pokrywa z zeznniami znajomego robiącego w guglu -- zmiany wprowadza się tam stopniowo, przy okazji restartu każdego serwerka, których sa jakieś miliony. Więc mozna różnie trafić. Ze trzy tygodnie temu czytałem, że ma się coś zmienić w mapach Google. Może to właśnie to. Ten Waszyngton z podanego wyżej linka też u mnie wygląda jakoś inaczej.

Mam pewne podejrzenia, że przy większym oddaleniu są grafiki rastrowe, a przy maksymalnym zbliżeniu nie ma ich wcale. Ale nie wiem, czy słuszne.

Reply to
invalid unparseable

Mam wrażenie że mówimy o tym samym. Informacje na mapie (poza zdjęciami) rozpoczynają żywot jako dane wektorowe. Te które nie zmieniają się zbyt często są przepuszczane przez rasteryzator i serwowane jako kafelki. Tak wygląda sieć dróg i ikonki POI. Część informacji, jak np. współrzędne POI żeby można było kliknąć, zawsze jest wysyłana w postaci wektorowej.

Budynki 3D też są wyrenderowane, ale dodatkowo widzę że też są pobierane dane binarne, najprawdopodobniej uproszczone 3D. Tutaj masz przykład kafelka mapy z zaznaczonymi POI i obrysem 3D budynku:

formatting link
tym podkładzie najprawdopodobniej są renderowane przez WebGL dodatkowe ikonki POI i budynki.

Google pewnie ma swoje narzędzia i swój proces tworzenia map, więc możemy tylko zgadywać jak dokładnie mają to zaimplementowane, ale gdybyś chciał się pobawić w domu i zbudować swój serwer map, albo nawet tylko poczytać jak to jest robione, to polecam projekt OpenLayers. Wielka kobyła, ale jest w nim wszystko: od wstępnej obróbki danych rastrowych i wektorowych, po obsługę wyświetlania w przeglądarce.

Jest też cała masa innych darmowych narzędzi do rasteryzacji danych wektorowych:

formatting link

Jacek.

Reply to
Jacek Radzikowski

Pan Jacek Radzikowski napisał:

Tylko po co właściwie serwować coś oprócz zdjęć jako grafikę rastrową? W prapoczątkach Google Maps wszystko było rastrowe, taki był stan techniki. Łącze też miałem dużo słabsze i widać było jak przy zbliżaniu pikseloza powoli wypełnia się szczegółami. Gdy zaczęto dokładać wektorowe elementy, to być może nie wszyscy je widzieli. Jakaś strata, ale nie całkowita. Teraz przeglądarki mogą więcej, więc jaki jest sens dawania rastrowego kafelka z dwiema ulicami na krzyż zamiast po prostu wykreślić te ulice?

Reply to
invalid unparseable

Nie wiem jak to dokładnie jest zrobione, ale bazując na tym co widzę że jest ciągnięte i jak działają inne podobne systemy, pobawię się trochę we wróżkę.

Myślę że słowami kluczowymi są tutaj wydajność i dostępność. Wygenerowanie takiego takiego kafelka z obrazem jest względnie tanie, a wysłanie go praktycznie nic nie kosztuje. Wysłanie danych wektorowych, gdyby chcieć je mieć zawsze aktualne, wymaga przeszukiwania bazy danych przy każdy odwołaniu, co jest bardzo drogie. W praktyce pewnie to jest zrobione tak, że mają je "zrasteryzowane", w sensie że są pogrupowane w "kafelki" odpowiadające z grubsza kafelkom rastrowym, ale za to wymagania na oprogramowanie po stronie klienta są nieco większe niż dla obrazków.

Należy też pamiętać że są na świecie rejony gdzie powolny dialup jest luksusem, a stary 486 to może być szczyt marzeń. Więc nie mogą sobie pozwolić żeby odciąć tych klientów od usług.

Jacek.

Reply to
Jacek Radzikowski

Pan Jacek Radzikowski napisał:

Moja szklana kula mówi co innego. Postać wektorowa powinna być lepsza dla dialupowych łącz. Ponadto dla takich speców jak google, co jak co, ale przeszukiwanie bazy danych powinno być tanie.

Może nie jest w najgorszym stanie ta moja kula, bo z grubsza pokrywa się to z tym, co widzę. Przy dużych zbliżeniach jednak są to wektory. A w oddaleniu serwowane są rastry -- bo po pierwsze i tak by nie było widać szczegółów pomniejszonych wektorów, po drugie dużo by ich było (ech, te dialupy), a po trzecie nie ma co przeliczać tego, czego i tak nie widać (486). Można by było zhierarchizować ten opis wektorowy i przy oddalonym widoku nie przekazywać na przykład dokładnego przebiiegu każdej ulicy, ale to wcale nie wygląda na zadanie trywialne. Więc się w takich okolicznościach przyrody tradycyjnie serwuje bitmapy.

Reply to
invalid unparseable

Jakie tanie by nie było, zawsze będzie droższe niż pobranie statycznego pliku.

Wektory szybciej się ściągną, ale słaby komputer nie poradzi sobie z ich narysowaniem.

Ten przykład kafelka który ostatni podesłałem był na prawie największym zbliżeniu. Strona pobrała kafelek z wyrenderowanym obrazem mapy. A jak teraz jeszcze raz się przyjrzałem na konsoli developerskiej chrome jakie pliki są ściągane przy pełnym przeładowaniu mapy (po wyczyszczeniu cache) na maksymalnym zbliżeniu to widzę same pliki png i ani jednego wektorowego. Chyba musimy nasze szklane kule wysłać razem na wódkę, żeby uzgodniły zeznania :)

Jacek.

Reply to
Jacek Radzikowski

Dnia Fri, 14 Jul 2017 23:49:31 +0200, Jarosław Sokołowski napisał(a):

Biorac pod uwage zamilowanie googla do wielkich dyskow, ilosc korzystajacych osob, czestosc zmian, ilos elementow na mapie ... to moze ma sens. Po co obciazac te tysiace komputerow A przy graficznym formacie tekstowym kto wie co mniej danych transmituje :-)

J.

Reply to
J.F.

Dnia Fri, 14 Jul 2017 16:21:43 -0400, Jacek Radzikowski napisał(a):

A jaascript sobie radzi z formatami binarnymi, czy cos innego uzywaja?

J.

Reply to
J.F.

W dniu 2017-07-14 o 20:48, Jarosław Sokołowski pisze:

Pół roku temu (przenosząc się z XP na W7) zrezygnowałem z Firefoxa na rzecz Opery - podobno mniej się muli jak się wiele okien na raz otworzy.

W menu znalazłem:

- Wyświetl źródło strony - kilkaset linii html - nie wiem czy tam bym się doszukał. A nawet jak bym się doszukał to czy umiałbym taki jeden kafelek ściągnąć.

- Narzędzia dla programistów - otwiera okno z zakładkami między innymi Elements, Sources. Nie umiem się w tym na szybko rozeznać, ale to pozostanie moim problemem

- jest oczywiste, że nie jestem programistą :).

O Pythonie też się kiedyś chciałbym czegoś dowiedzieć. Ja niestety, w temacie programowania, jestem samoukiem, który gdzieś w okolicy 1995 (po pobieżnym poznaniu Algola, Basica, Pascala, Lispa, Prologa, Fortha, C i C++) nie miał już czasu być choć trochę na bieżąco (może też nie za bardzo zdawałem sobie sprawę jak wiele się naokoło zmienia). P.G.

Reply to
Piotr Gałka

Dnia 14.07.2017 Jacek Radzikowski snipped-for-privacy@spamer.die.die.die.piranet.org> napisał/a:

Tych wywołań będzie dużo więcej. Ustawiamy wygląd, powiększenie i wywołujemy narzędzia developerskie w Chrome - Ctrl + Shift + I. Przesuwamy się po mapie. W zakładce Network mamy wszystkie zapytania. Dalej - Copy > Copy All as cURL.

Zostaje "tylko" połączyć.

Mapy opierają się na:

formatting link
Do google maps są odpowiednie API. Przykładowo do map statycznych.
formatting link
Inny dostęp wiąże się już raczej z łamaniem TOS. Wystarczy wyszukać na githubie google+maps+tiles. Jest tego mnóstwo.

Pierwszy z brzegu najprostszy - curl + Imagemagick.

formatting link
Zmieniamy tylko w tym skrypcie nieaktualne serwery # if [[ $4 == "s" ]]; then # curl -s "
formatting link
$x&y=$y&z=$z" -o "$y+$x.png" # else curl -s "
formatting link
$x&y=$y&z=$z" -o "$y+$x.png" #fi

W przypadku domyślnego pythona w wersji 3 zamieniamy na python2.

formatting link

Reply to
grapeli23

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.