Animaton 2024, wizualizacja na mapie Gdańska

Idę. Będę tutaj robić szum i dokumentować research co do rozwiązań technicznych. Bo nie będzie czasu w te 24h.

Linki:

Dobrałem się do otwartych danych z Mevo.

Odpaliłem na swoim mikrusie skrypcik w cronie. Co 10 minut każdej godziny. 137Kb per odpowiedź. Policzyłem dla pewności ile mi to zajmie i wychodzi śmieszne 77 mega. Nie zapcham moich 5 giga na serwerze.

curl -H "Client-Identifier: not7cd-net" https://gbfs.urbansharing.com/rowermevo.pl/free_bike_status.json > data/free_bike_status_$(date '+%Y-%m-%d_%H-%M-%S').json

Znalazłem też dane dla AIS o pozycjach statków w czasie rzeczywistym.

No i skrypcik do ich zrzucania. Tutaj jest websocket, więc musi działać cały czas.

import asyncio
import websockets
import json
from datetime import datetime, timezone

async def connect_ais_stream():

    async with websockets.connect("wss://stream.aisstream.io/v0/stream") as websocket:
        subscribe_message = {"APIKey": "sekret :)", "BoundingBoxes": [[[54.564363, 18.426644], [54.222180, 19.032136]]], "FiltersShipMMSI": [], "FilterMessageTypes": ["PositionReport"]}

        subscribe_message_json = json.dumps(subscribe_message)
        await websocket.send(subscribe_message_json)
        with open(f"/root/aisdata/{datetime.now()}.jsondump", "a") as file:
            async for message_json in websocket:
                 message = json.loads(message_json)
                 ais_message = message['Message']['PositionReport']
                 file.write(json.dumps(message))
                 print(f"[{datetime.now(timezone.utc)}] ShipId: {ais_message['UserID']} Latitude: {ais_message['Latitude']} Longitude: {ais_message['Longitude']}")

if __name__ == "__main__":
    asyncio.run(connect_ais_stream())

42KB na minutę. Spodziewam się 250 MB, nie tak źle jak na 4 dni zasysania.

Kolejny ciekawy zasób. Zostawię go tutaj.


Integracja może być ciężka.

Jeśli chodzi o dane z jeszcze jednego środka transportu. Pociągi PKP. API brak, i dane które są podspodem są przeklęte. Nie mam czasu tego integrować. Trzeba by się wstrzyknąć w JS’a i przechwytywać pozycje już rysowanych pociągów.

Jeszcze jest system tristar, ale ma szczątkowe dane na wybranych szlakach.

https://tristar.gdansk.pl/pages/public/detailed_map.xhtml

Za to znalazłem jakąś paczkę do R, która może zaciągać zagęszczenie na wszystkich ulicach. Ale w rastrze.

Co ty mówisz, z tego TRIPSTARa sporo można wyciągnąć

https://mapa.ztm.gda.pl/gpsPositions?v=2 (to trzeba curlem traktować, w przeglądarce mi się nie ładuje)

Od przedwczoraj naparzam właśnie do tego API i ściągam. Mam już 500 MB danych z Mevo, ZTM, AIS, i ASD-B

Będę korzystać z tego.

To wydaje mi się przydatne do tego wyzwania.

Also this, shadery mogą być przydatne.

update, zrobiłem PoC. TypeScript to może być średni pomysł.

edit: Uhh, jeszcze lepsza libka?

Czego potrzeba po szybkim teście projekcji na planie miasta:

  • p5.js absolute position, full screen.
  • upload, download callibration files for projection.
  • plan miasta nie jest w pełni pokryty przez projektor, bruh. Trzeba uciąć kawałeczek u dołu. Może obrazek powinien wystawiać obrys za projekcji.

podrzucam cool free online kursik shaderów od 0

1 polubienie

Traffic Layer, ta paczka w R nie działa, I ona w zasadzie uruchamia Google chrome i robi screenshota. :stuck_out_tongue: Tutaj w tym samym stylu, ale w JSfiddle. Nie sądzę, abym miał czas to automatyzować przy pomocy jakiegoś Selenium.

1 polubienie

TODO: Parametry fizyczne, projekcje, makiety
Ten post to wiki każdy może go edytować.

Makieta

TODO
Parametry projektora, rozdzielczość, notatkim
Koordynaty lat/long które obejmują makietę, czy jest skierowane na północ

Plan na ścianie

TODO
Parametry projektora, rozdzielczość, notatkim
Koordynaty lat/long które obejmują plan

Rekonesans

Hej tutaj macie jako takie foto mape Śródmieścia https://obliview.brg.gda.pl/

Magiczna podróż człowieka elfa i windows serwer (desktop)

System makiety niestety nie działa z powodów niewiadomych. Odbycie się hackatonu wisi na włosku. Dzielni uczestnicy jednak się nie poddają i walczą dzielnie o przywrócenie makiety IKMu do swej świetności z godzin 9:00-18:00 ponieważ prawdopodobnie wszystkiemu winnemu są skrypty które próbują zaoszczędzić pieniądze podatników Trójmiasta i wyłączają system po zamknięciu makiety. Szkoda że nikt nikogo nie poinformował o jego istnieniu…

  1. Napisaliśmy batch script który uruchamia shutdown -a w loopie żeby zwalczyć skrypt wyłączający system po zamknięciu IKM/wystawy makiety.
  2. Walczymy z skryptem automatycznie wyłączającym projektory (HDMI) po zamknięciu IKM/wystawy makiety.

Czy naszym bohaterom się uda? Dowiecie się w kolejnym komentarzu
To be continued

Rozwiązanie było prostsze niż się wydawało. Jeden z komputerów był masterem i wszystkie urządzenia posiadały watchdoga który słuchał jego skryptu. Makieta przywrócona do działania

1 polubienie

1 polubienie

https://rowerowygdansk.pl/pomiar-ruchu