Randonautica

Dotarła do mnie podobno kontrowersyjna aplikacja Randonautica, z „pozytywnym nastawieniem” ruszyłem w kierunku attractorów aby znaleźć miejsce kultu i satanistycznych orgii, lądowiska obcych albo chociaż jakieś zwłoki.

Google mówi coś o „najbardziej ściganym grafficiarzu”, który zakończył swoją nielegalną działalność, jestem fanem street artu i graffiti ale nie mogę powiedzieć, że jestem pod wrażeniem prac tego artysty. Na tym profilu prawdopodobnie znajdują się jego prace. Idźmy dalej.

Nie mogę powiedzieć, że była to najbardziej hardkorowa wycieczka po mieście ale to fakt, że sam z siebie nie wybrałbym tej marszruty. Chyba naturalnym jest, że na zwykły spacerek raczej idzie się wzdłuż ulic, co po jakimś czasie zwyczajnie się nudzi, natomiast randomowość punktu destynacji i azymutu oraz aura tajemniczości dodaje smaczku do zwykłej przechadzki po ośce, w sumie polecam.

Co do gisowego punktu widzenia, raczej nie chce mi się wierzyć, że twórcy ukryli jakąś wyszukaną logikę związana z analizą rastrową i klasyfikacją zdjęć lotniczych. Raczej stawiam na proste generatory punktów po stronie serwera.

Jeżeli masz potrzebę wygenerowania sobie „mapy losowych punktów Szatana” możesz to zrobić w dwóch prostych krokach przy użyciu QGISa!

  1. Przyjmij odpowiednie nastawienie. Pomyśl, że szukasz czegoś niesamowitego lub przerażającego.
  2. Narysuj poligon i użyj algorytmu „Losowe punkty w poligonie”.

Gdybyście potrzebowali zrobić coś takiego w swojej aplikacji służę pomocą. Poniżej javascriptowy pseudo kod z użyciem biblioteki turf.js

import * as turf from '@turf/turf'

let center = [x,y] //albo [y,x] zawsze zapominam xD 
let radius = 1 //  maksymalny zasięg w kilometrach

let destination = turf.destination(center, radius * Math.random(), 360*Math.random(), {units: 'kilometers'});

console.log(destination.geometry.coordinates)

Jest duże prawdopodobieństwo, że Randonautica robi to w ten sposób. Zmienna center może przyjąć współrzędne GPS, radius to długość promienia okręgu w jakim ma odbyć się losowanie. Azymut na kolejny punkt wyliczy się na podstawie iloczynu 360*Math.random(). Powyższe współrzędne wystarczy wrzucić do obiektu Marker albo czegoś podobnego. Proste.

Update: Przypadek? Nie sądzę! Nie zauważyłem w pierwszej chwili, że kilka moich losowych attraktorów wygenerowało się w pobliżu siedziby pewnej telewizji. Ciekawe.

Dynamiczna hipsometria

Warstwy NMT z Gugiku wciąż nie dają mi spokoju. Stanąłem przed koniecznością wpięcia tej warstwy do mojej instancji leaflet’a. Wydawało się, że to żaden problem aż do momentu weryfikacji kiedy to mym oczom ukazał sie taki efekt…

Okazuje się, że warstwa nie jest standardowym WMSem. Paleta barwna rozciąga się dynamicznie w kontekście tile’a. Próbowałem napisać własne rozszerzenie do imageOverlay… z wątpliwym sukcesem ale okazało się, że jest już paczka npm – nonTiledLayer, która to załatwia. Po co się więc męczyć?


        let hipsoDynamiczna = L.nonTiledLayer.wms('https://mapy.geoportal.gov.pl/wss/service/PZGIK/NMT/GRID1/WMS/Hypsometry', {
            layers: 'ISOK_HipsoDyn',
            format: 'image/jpeg',
            transparent: true,
            maxZoom: 21,
            version: "1.3.0",
            layName: "hipso",
            opacity: 0.5
        })
            .on("loading", (e) => console.log("ładuję", e.target.options.layName))
            .on("load", (e) => console.log("załadowałem", e.target.options.layName))
            .on("tileerror", (e) => console.log("shit happen", e.target.options.layName))
            .addTo(map);
Czytaj dalej
Notatka na marginesie

Mapbox GL2

Rok 2020 dla geoinformatyki jest czymś niesamowitym, od początku roku powstało dziesiątki aplikacji mapowych o tematyce covidowej, w sierpniu GUGIK uwolnił dane przestrzenne a w grudniu Mapbox zrobił update swojej biblioteki javascriptowej wzbogacając ją o możliwość wyświetlania ukształtowania terenu w 3D. Czy coś jeszcze nas zaskoczy? Może Google Maps stanie się darmowe? Leaflet zyska możliwość obracania mapy?

update:

nie wierzę, że to sie dzieje…

https://www.npmjs.com/package/leaflet-rotate-map

Łódzki detal

Uwielbiam wspierać mikro-biznesy i ciekawe inicjatywy poprzez dostarczenie mAppek. Jakiś czas temu popełniłem taki mikro projekcik prezentujący detale i szczegóły architektoniczne co ciekawszych budynków w Łodzi. Pomysłów na improvementy mam jeszcze kilka, między innymi wdrożenie rozszerzonej rzeczywistości z A-Frame.

lodzkidetal.pl/mapa-detali/

Czas realizacji: 2 godzinki.

Najtrudniejszym tematem było poprawne zgeokodowanie ekselka z adresami w różnym formacie.

Informacja o stanie

Mapa Prypeci

Na fali serialu HBO o przygodach „sowieckich fachowców” i „testach na produkcji” poczułem silną potrzebę wsparcia kolegów zajmujących się urbexem w okolicach czarnobylskiej elektrowni.

Moim podstawowym celem było stworzenie aplikacji PWA działającej w trybie offline w oparciu o bibliotekę Mapbox GL JS.

Co sie udało?

PWA: Wdrożone, apka pozwala się zainstalować na pc i smartphonach z Androidem.

Mapbox GL: Kilkoma brzydkimi hackami udało się „odciąć” od płatnych vector-tile’i i przygotować wstępną formę wizualizacji dróg oraz trójwymiarowe budynki.

Podkład: Celem było stworzenie własnej „postarzanej” warstwy rastrowej, która ma nadać „postapokaliptyczny” klimat. Dokumentacja nie podaje jakiegoś „oczywistego” rozwiązania na referencję takiej grafiki. Użyłem gimpa, qgisa i danych o pokryciu terenu z OSM.

Powyższa mapa jest interaktywna, możesz poscrollować i spróbować zainstalować apkę z tego linku.

Bardzo mocno brakuje mi merytorycznych danych o „zonie”, nawiązałem kontakt z osobą, która to wydaje mapę okolicy na papierze, niestety dane nie są w „gisowym” formacie, a powyższy nie jest skłonny do współpracy… Samej „brudnej roboty” przy tym projekcie jest jeszcze sporo, ale kluczowe funkcjonalności zostały uzyskane.

Co dalej?

UI: mam przygotowaną wstępną formę, i kilka podstawowych funkcjonalności. Pozostaje tylko wektoryzować punkciki…

AR: To będzie formalność.