Lietuvos upių baseinai II

Beveik prieš metus buvo rašyta apie Lietuvos upių baseinų žemėlapio kūrimą. Atsirado žmonių, kurie norėjo detaliau pasinagrinėti tokį žemėlapį, o susikurti savo db, įvykdyti skaičiavimus ir pan. nėra taip labai jau paprasta. Taigi dabar pristatome tą patį žemėlapį, tik jau perdaryta vektorinėmis internetinių žemėlapių technologijomis: https://openmap.lt/baseinai.html.

Upių baseinų žemėlapis

Kad stambesniuose masteliuose būtų kiek paprasčiau orientuotis – fone pridėti labai blyškūs gyvenviečių pavadinimai (kad nelįstų per daug į akis, nes svarbiausia šiame žemėlapyje – upės). Taip pat pridėtas ir puikusis reljefas, kurio tamsus variantas dera su neoniniu vandens kelių stiliumi ir sukuria atitinkamą „emocinį foną“.

Stambus upių baseinų žemėlapis

Share

Topografinis žemėlapis

Topografinis Lietuvos žemėlapis – naujausias pagal OpenStreetMap duomenis sukurtas Lietuvos žemėlapis. Topografinio žemėlapio viena pagrindinių detalių – aukščio informacija. T.y. topografinis žemėlapis be aukščio informacijos – ne topografinis.

Panaudojant NŽT aukščio informaciją, SpatialForces narys Marius paruošė duomenis, tinkamus aukščio informacijai vaizduoti žemėlapyje. Todėl dabar pristatome https://topo.openmap.lt

Topografinis žemėlapis

Pradiniai NŽT aukščio duomenys yra ~1m2 gardelės. Toks detalumas naudingas nebent labai specifinėse situacijose (pvz. archeologijai, statyboms), todėl aukščio duomenys buvo supaprastinti iki 4m2 gardelės. Tai vis tiek yra gerooookai tikslesni duomenys, nei beveik visų žemėlapių naudojami Shuttle duomenys (SRTM), kur gardelės dydis yra 30m2.

MapBox GL-JS aukščio šešėliavimo varikliukas leidžia šešėlius braižyti kliento naršyklėje, todėl gaunamas interaktyvumas. Tarkim topo žemėlapyje yra nustatyta, kad saulė visada šviečia iš viršaus kairės. Pabandykite pasukti žemėlapį ir pažiūrėkite, kaip atitinkamai perpaišomi šešėliai.

Žemėlapio stilius pastoviai papildomas remiantis Lietuvos topografinio žemėlapio specifikacija, ją šiek tiek pagardinus bene garsiausių kartografų – SwissTopo kūrėjų – spalvomis ir šriftais.

Share

Kartografijos problemos ir jų sprendimai

Pagrindiniu vadinamas OpenStreetMap žemėlapis (tas, kurį matome www.openstreetmap.org) dažnai sulaukia neigiamų nuomonių, nes yra perkrautas, jame rodoma (ar bandoma rodyti) galybė įvairiausios informacijos, neaiškus žemėlapio tikslas ir žinutė, kurią jis bando perduoti. Bet geriau pasidomėjus paaiškėja, didžioji dalis tokios kritikos nėra pelnyta, šio žemėlapio kartografai sprendžia labai netrivialias problemas. „Pagrindinis“ žemėlapis visų pirma yra skirtas žymėtojams, kad jie matytų tai, ką sužymėjo. Tai reiškia, kad jis skirtas labiau žemėlapiais besidominčiais žmonėmis nei eilinis žmogus, todėl persotinimas yra leistinas. Taip pat reikia suprasti, kad šis stilius yra skirtas rodyti viso pasaulio duomenis, o tai reiškia, kad kartografai turi išspręsti galybę įvairiausių uždavinių, kaip maksimaliai aiškiai pavaizduoti norimą informaciją, kai jos variacijų gali būti labai labai daug. Jei kažkokia simbolizavimo priemonė (spalva, šablonas, simboliai) panaudoti vienoje vietoje vaizduoti elementui ar savybei X, kitame pasaulio gale elementui Y jau reikia ieškoti kitokių sprendimų. O juk sprendimas kiek įmanoma turi būti intuityvus.

Imagico

Tinklaraštyje blog.imagico.de galima šiek tiek paskaityti pasakojimų, kokios pasitaiko problemos ir kokie kartografiniai jų sprendimai svarstomi ar pritaikomi OpenStreetMap žemėlapyje.

  • Paišyti linijas yra paprasčiausia dalis. Ar tikrai? Ką daryti, kai daug neištisinių (punktyrinių) linijų reikia pavaizduoti šalia, jei jos nėra tiesios? Kaip turint ribotą spalvų kiekį pavaizduoti svarbias kelio savybes: klasifikaciją, dangą, paskirtį? Ar esate pastebėję „pašvaistę“ aplink žemėlapyje rodomą tekstą? O pašvaistę aplink kelius?
  • Vandens įraše aprašomas vandens objektų vaizdavimas. Dažniausiai visas vanduo būna vienos spalvos, bet gal nebūtinai? Gal galima skirtingomis spalvomis pavaizduoti skirtingas vandens savybes, ir tai padaryti taip, kad žemėlapio naudotojui vaizdavimo skirtumai būtų kiek galima intuityvesni? O kaip vaizduoti brastas, kad jos neuždengtų savęs?
  • Miškų vaidavimo įraše rasite informacijos apie tai, kokie gali būti miškai, iš karto pasakysiu, kad tai ne tik: lapuočiai, spygliuočiai ir mišrūs. Kaip skirtingi miškai buvo vaizduojami skirtingais istoriniais periodais. Kokie miškų žymėjimai yra svarbūs? Koks gaunasi galutinis miškų vaizdas?

Taip, didžioji dalis šios informacijos yra gan specifinė ir techninė, bet tai turėtų būti geras pavyzdys, ką gi daro „tie kartografai“. Pagaliau kiekvienam žemėlapių mylėtojui šie įmagico.de įrašai turėtų būti malonūs skaityti, nes yra daug iliustracijų 🙂

Share

Generalizacija

Kartais gali pasirodyti, kad visos žemėlapių įdomybės yra tik stambiausiame mastelyje, kad smulkesniuose tiesiog rodome mažiau duomenų. Bet ne viskas taip paprasta. Štai kaip atrodo geležinkeliai 11 mastelyje:

Geležinkelio artefaktai 11z

Plika akimi matosi, kad geležinkelis nubraižytas su problemomis. Padidinkime šį piešinį:

Gelžkelio artefaktų 11z fragmentas

Kai kuriose vietose matome netvarkingus geležinkelio „punktyrus“ (apibrėžta raudonai). Kitose vietose matome, kad buvo bandyta braižyti visas esamas geležinkelio linijas, o tokiame mastelyje jos netelpa, todėl gavosi makalynė (apibrėžta mėlynai).

Abi šios problemos atsiranda dėl to, kad kuo smulkesnis mastelis, tuo labiau objektų mastelis neatitinka žemėlapio mastelio: jei mastelis yra 1:50000, tai 3 metrų pločio geležinkelio linija žemėlapyje turėtų būti 0,06mm pločio! Geležinkelį tenka braižyti žymiai platesniu, kad jis apskritai matytųsi žemėlapyje. Realiame gyvenime šalia esančias geležinkelio linijas tenka braižyti vieną ant kitos. Todėl ir gauname košę-makalošę.

Tai taipogi reiškia, kad vektorinėse kaladėlėse yra daugiau informacijos, nei jos realiai reikia: dėl to ilgiau užtrunka kaladėlių kūrimas, daugiau kilobaitų reikia persiųsti internetu ir naršyklės daugiau laiko užtrunka braižydamos informaciją žemėlapyje.

Generalizacija

Tokios problemos sprendžiamos naudojant kartografinę generalizaciją. Generalizacija – tai procesas, kurio metu geoobjektai pašalinami, paryškinami, pastumiami ar pan. tam, kad smulkesnio mastelio žemėlapyje vis tiek būtų įmanoma perduoti norimą informaciją ir žemėlapis neatrodytų kaip košė. Generalizacija daryta nuo senų laikų, bet formaliai ją aprašinėti pradėta XIXa. Šiuo metu, kai išplito GIS naudojimas, automatinė generalizacija yra viena iš įdomiausių sričių, nes reikia matematiškai, algoritmais apibrėžti tai, ką dalis kartografų laiko ne mokslu, o menu. Kas norite daugiau informacijos apie generalizaciją, galite jos rasti internete, kad ir šitoje kiek senstelėjusioje, bet vis dar tinkančioje GITTA medžiagoje.

Sprendimas

Tokios kelių koncentracijos generalizavimo sprendimas yra vienas iš paprastesnių:

Geležinkelio generalizacija

  1. Pradiniai duomenys – geležinkelių keliai (imame tik pagrindinius bėgius, išmetame šalutinius, atsišakojimus ir pan.) – mėlyni vektoriai.
  2. Aplink visus geležinkelius paišome buferį (tarkim 40 metrų) ir visų geležinkelių buferius sujungiame į vieną diiiiiidelį poligoną – žalias poligonas.
  3. Tada randame tokio gauto žalio poligono apytiksles vidurio linijas – juodi vektoriai (piešinyje jie šiek tiek kampuoti, nes matomi duomenys dar ir papildomai supaprastinti tiek, kiek užtenka smulkesniame mastelyje).

Visa ši operacija su visais Lietuvos geležinkeliais neužtrunka nei minutės.

Rezultatas toks:

Generalizuotas geležinkleis

Kiti elementai

Tokios pačios problemos yra su automobilių keliais (tarkime A1, A2 ir kai kurių kitų kelių atkarpos yra dvigubos). Taip pat generalizuoti reikėtų ir plotus. Tikriausiai sudėtingiausias darbas – generalizuoti namus (pradžioje supaprastinti jų geometriją, tada juos praretinti ar sujungti, galiausiai apjungti į didesnius pastatų plotus). Tokiems dalykams vien standartinių PostGIS funkcijų jau neužteks. Bet čia jau užsiėmimas ateičiai.

Share

Kelių hierarchija

Tai gan techninis straipsnis apie kelių hierarchiją ir jos panaudojimą kartografijoje.

Kelių hierarchija

Straipsnio tikslas yra pasiaiškinti skirtumą tarp highway=unclassified ir highway=residential kelių, kaip reikia žymėti ir kokią tai daro įtaką. Pagrindinį dėmesį šį kartą skiriu kartografijai (žemėlapių braižymui), bet realiai tai gali turėti įtakos ir maršrutizavimui.

Kai mes braižome smulkaus mastelio žemėlapį (tarkime kai matoma visa Lietuva), mes norime braižyti tik pačius svarbiausius kelius. Jei nubraižytumėme visus visus kelius, įskaitant ir privažiavimus, tai gautume didžiulę makalynę (aš jau net nekalbu apie greitaveiką). Kai stambiname mastelį (pritraukiame artyn), tik tada norime, kad atsirastų vis daugiau ir daugiau kelių (pirmiau turi pasirodyti svarbesni keliai). Taigi smulkiausiame mastelyje norime automagistralių, arčiau norime ir krašto kelių, dar arčiau ir gyvenamųjų gatvių, o visai priartinę norime net ir šaligatvių. Tokia kelių hierarchijos prasmė braižant žemėlapį.

Šiuo metu visi žemėlapiai naudoja kelių hierarchiją… išskyrus „šuolį“ prieš atsirandant smulkesniems keliams už krašto kelius. T.y. kai jau atsiranda, atsiranda iš karto ir highway=unclassified, ir highway=residential keliai. Vienu masteliu aukščiau turime vaizdą, kur yra dideli plotai be kelių. Štai pvz. žinomiausias/matomiausias OpenStreetMap stilius „Carto“:

Atkreipkite dėmesį į tuštumą (kelių atžvilgiu) tarp 102 ir 103 kelių. Matosi tik Plytinės ir Kairėnų gatvės, nes jos pažymėtos highway=secondary.

Mapbox Streets stiliuje dar blogiau: ten, net dar labiau „priartinus“, vis tiek matosi tik labai svarbūs keliai, didžiuliai plotai neturi kelių susisiekimo:

Kodėl taip yra? Todėl, kad nors wiki ir yra aprašytas skirtumas tarp residential ir unclassified kelių – jis yra prastai suprantamas, todėl šie du kelių tipai yra dažnai painiojami. Taigi žemėlapių gamintojai šiuos du tipus laiko lygiaverčiais (dar galima būtų ir trečią tipą pridėti – pakankamai vėlai atsiradusį living_street).

Kadangi residential keliai gyvenamosiose vietovėse nutiesti gan tankiai, štai pavyzdys, kaip panašiame mastelyje atrodo nubraižyti ir unclassified, ir residential keliai:

Kelių yra tikrai per daug, jie susimala į vieną masę. Todėl tokie keliai ir nerodomi žemėlapiuose, kol pakankamai „nepriartinama“. Todėl ir turime tokį „šuolį“.

O kas būtų, jei mes sutvarkytume residential ir unclassified duomenis taip, kaip aprašyta wiki? Pagal wiki žymėjimas turėtų būti toks:

  • unclassified – jungiamasis kelias (jungiantis kelias gyvenvietes ar vieną gyvenvietę prie pagrindinio kelių tinklo). Tai yra kelias, viena klase žemesnis už highway=tertiary. Nereikia baimintis pavadinimo „unclassified“ (wiki sako, kad pavadinimas istoriškai atėjo iš Didžiosios Britanijos), tai nėra nežinomas, neaiškus, nereikšmingas kelias, greičiau priešingai. Taip pat tai nėra kelias, kurio klasifikacijos žymėtojas tiesiog nežino (tam skirtas highway=road).
  • residential – nejungiamasis kelias, tiesiog leidžiantis privažiuoti prie reikiamos vietos. Vieta nebūtinai turi būti gyvenamoji, tai gali būti ir privažiavimas prie komercinės ar pramoninės zonos.

Taip sutvarkę duomenis galėtume užpildyti šią skylę – prieš rodydami residential kelius, galėtume rodyti vien unclassified kelius, kurių funkcija (pagal wiki) yra žymėti jungiamuosius kelius, kurie neturi valstybinės klasifikacijos (t.y. neturi kelio numerio, rodomo kelio ženkluose).

Tada žemėlapis (tokiame pačiame mastelyje kaip aukščiau rodytas OSM Carto) atrodo jau taip:

Atsiranda pakankamai jungiamųjų kelių ir tuo pačiu metu žemėlapis neužteršiamas didžiuliu kiekiu gyvenamųjų kelių (jie atsiranda vienu lygiu toliau).

Duomenų tvarkymas

Tai, ką aprašiau aukščiau, nėra kažkoks kartografinis stebuklas. Problema ne kartografijoje, o duomenyse. Kol duomenys netvarkingi, gauname betvarkę. Štai pavyzdys, kaip atrodo nesutvarkyta vieta:

Matome tokias problemines vietas:

  • „pasimetę“ keliai – neprijungti prie bendro kelių tinklo (virš Laistų ir Jakų)
  • neesminės atšakos – ne jungiamieji, o prie konkrečių sodybų vedantys trumpi keliai (aplink Kiškėnus)
  • smulkūs keliai – smulkūs keliai, kurie nėra jungiamieji (prieplauka į Vakarus nuo Laistų)

Tokiame smulkiame mastelyje nepatogu ieškoti klaidų. Kviečiame į pagalbą PostGIS ir QGIS. Sujungiame visus kelius su klasifikacija unclassified ir aukštesnius į vieną tinklą, raudonai pažymėti tie, kurie prie tinklo neprijungti, pilkai – žemesnės klasifikacijos keliai (residential ir living_street):

Kaip matome, puikiai išsiskiria „pasimetę“ keliai. Jų aptikimas visiškai automatinis, kas yra puiku, nes būtent automatinis tikrinimas ir yra vienintelis būdas užtikrintai spręsti kelių klasifikavimo problemą.

Bet matome ir dviejų kitų tipų problemų: yra smulkūs nejungiamieji keliai, pažymėti žaliai – reiškia jie pažymėti unclassified, o ne residential. Taip pat matome trūkstamas jungtis – Moliakalnio g. turėtų būti pakeista į unclassified, nes iš viršaus ateina kelias, jungiantis šią gyvenvietę su kita stambesne gyvenviete.

Vat antra ir trečia klaidos ir yra labiausiai probleminės, nes ne tik kad nesugalvoju, kaip parašyti automatinį algoritmą tokių klaidų aptikimui, bet net ir negaliu sugalvoti, pagal kokius objektyvius kriterijus tai turėtų būti sprendžiama…

Share