Wang–Müller linijų generalizavimas

Ruošiant duomenis smulkesniems masteliams, prireikia generalizavimo algoritmų. Linijoms paprastai naudojami Douglas–Peucker bei Visvalingam–Whyatt algoritmai. Deja tai matematiniai/geometriniai algoritmai, neatsižvelgiantys į kartografinius reikalavimus.

Wang–Müller algoritmas būtent ir siekia (natūralių objektų) linijas generalizuoti atsižvelgiant į kartografinius reikalavimus, tokius kaip charakteringų savybių išsaugojimas ar net paryškinimas.

Originalus Wang–Müller mokslinis straipsnis algoritmą aprašo labai aptakiai, kadangi nėra atviro kodo šio algoritmo realizacijos, ne tik neįmanoma šio algoritmo panaudoti plačiai, bet ir kyla daug klausimų, kaip veikia ar turėtų veikti kai kurios šio algoritmo vietos.

Vilniaus Universiteto studentas Motiejus Jakštys atliko puikų darbą – ne tik realizavo pagrindinę Wang–Müller algoritmo dalį atviromis technologijomis, bet ir daug detaliau aprašė algoritmą savo moksliniame darbe, kurį visi galite rasti čia:

https://github.com/motiejus/wm/blob/main/mj-msc-full.pdf

Darbe rasite algoritmo aprašymą, rekomendacijas algoritmo parametrų reikšmėms skirtingiems masteliams, daugybę iliustracijų ir pasiūlymų, ką toliau reikėtų daryti, norint užbaigti šio algoritmo atvirą įgyvendinimą, kad jį galėtų naudoti visi norintys.

GRPK ir Wang-Müller masteliui 1:50000

Artimiausiu metu Motiejaus sukurtas algoritmas keliaus į Atvirojo žemėlapio repozitoriją, kur bus tęsiamas šio algoritmo vystymas.

ArcGIS Field Calculator – galingas įrankis

ArcGIS (ArcMAP, ArcGIS Pro ir pan.) funkcija Field Calculator skirta užpildyti atributų laukus ir pasiekiama tiesiogiai atributų lentelėje (pasirinkus konkretų atributą – lauką) arba iš atskiro įrankio Calculate Field yra vienas iš universaliausių, galingiausių ir lanksčiausių ArcGIS duomenų tvarkymo ir analizės įrankių. Taip – bendrai duomenų, ne vien aprašomųjų – atributinių, bet ir bendrai kaip erdvinių.

Toliau skaityti “ArcGIS Field Calculator – galingas įrankis”

Kartografinis punktyrų braižymas QGIS’e

Prieš kelis mėnesius twitteryje vienas iš QGIS programuotojų (Nyall Dawson) rado iliustraciją apie kartografiškai tvarkingą punktyrų braižymą. Per kelias valandas buvo identifikuota, kad tai žymioji Šveicarijos kartografų knyga apie generalizaciją (publikuojama SwissTopo). Šveicarai greitai suorganizavo Nyall’ui šią knygą ir prašom – jau turime pirmus vaisius QGIS’e!

Kai keliai žemėlapyje braižomi punktyrais, gali iškilti šiokių tokių nesklandumų. Tarkim jei kelio pradžioje pataikoma braižyti punktyro tarpą (t.y. nebraižyti nieko), žemėlapio skaitytojui gali kilti klausimas, ar čia punktyro braižymo specifika, ar šie keliai realybėje nėra sujungti?

Probleminė – tuščia – punktyro pabaiga ties kelių sankirta sudaro dviprasmybę – yra jungtis, ar nėra?

Šiai problemai spręsti galime panaudoti pirmą iš dviejų naujų parinkčių – „Priderinti punktyro šabloną prie linijos ilgio“:

Ir tada QGIS „pritemps“ šabloną taip, kad linija baigtųsi braižoma punktyro dalimi:

Pataisyta punktyrinė jungtis – paskutinis braižomas pilnas segmentas.

Tušti punktyro segmentai gali kelti problemų ir ties aštriais kampais, kur gali kilti neaiškumų, kokia yra reali situacija ant žemės:

Dviprasmiškas punktyrinis kampas – ar yra pravažiavimas/praėjimas?

Panaudojus antrąją QGIS parinktį „Pataisyti punktyro šabloną aštriuose kampuose“, bus panaikinta ir ši dviprasmybė:

Pataisytas kampo punktyras.

Taigi QGIS ir toliau tobulina kartografinį rezultatą.

Tik nepamirškite, kad tam, jog veiktų ši funkcija, kelius reikia padalinti ties susikirtimais.

Vandens kranto efektai QGIS’e

Tikriausiai visi esate matę senovinius vandens simbolizavimo būdus – kai braižomos intervalais nuo kranto atitolusios linijos, primenančios bangas:

Vanduo senoviniuose žemėlapiuose

Daniel Huffman suorganizavo virtualius pristatymus, kaip daryti žemėlapius. Tarp krūvos įdomių video buvo ir Sarah Bell (ESRI) pristatymas, kaip braižyti tokius „bangų“ efektus Adobe Iliustratoriuje. Žiūrėjau žiūrėjau, ir, nors labai gražu, viskas labai jau sudėtingai atrodo. Jau nekalbant apie tai, kad apdorojimas vyksta jau po to, kai žemėlapio vektorinė informacija sukurta iš geografinių duomenų. Tai reiškia, kad jei norėsime sukurti kitos vietos žemėlapį su tokiais pačiais vandens efektais, tai viską reikės daryti iš naujo.

Norėjau pabandyti, ar galima tokius pačius vandens kranto efektus gauti QGIS’e nenaudojant sudėtingų algoritmų, nekuriant papildomų sluoksnių ir pan. Ir, po trumpos diskusijos su kitais QGIS žinovais, buvo rastas gan elegantiškas sprendimas. QGIS turi puikią galimybę vaizduoti ne tik pirminę (tikrą) objekto geometriją, bet ir modifikuotą geometriją. T.y. imama geometrija iš šaltinio, tada ji apdorojama (Python’o išraiška) ir tada gauta geometrija naudojama simbolizavimui (ar etikečių braižymui). Taip pat simbolį galima kurti iš kelių sluoksnių, reiškią tą pačią pradinę geometriją galime keisti kelis kartus gaudami kelias skirtingas braižomas geometrijas.

Taigi QGIS’e imame ežerų sluoksnį, paliekame „standartinį“ vandens poligono simbolizavimą, o virš jo sukuriame papildomą „Geometrijos generatoriaus sluoksnį“, kuriame nurodome buffer veiksmą su neigiamu atstumu:

Geometrijos generatoriaus nustatymai QGIS’e

Šios modifikuotos geometrijos simbolizavime nurodome, kad užpildymas būtų permatomas, o linijos spalvą parenkame tarkim tokią, kokia yra vandens kontūro spalva (na arba pagal skonį).

Tokių sluoksnių sukuriame (ir sudedame vieną ant kito) tiek, kiek norime. Ir prašom, per kelias minutes gauname štai taip atrodančius vandens poligonus:

Vandens kranto linijos QGIS’e

Viskas. Tokį stilių galite įsirašyti į dažnai naudojamų stilių sąrašą ir per sekundę parinkti kituose savo projektuose.

Pastatų tipifikavimas

Smulkiuose masteliuose nesinori pastatų visai išimti iš žemėlapio, bet jei pastatus tiesiog braižysime tokius, kaip yra, gausime atsitiktinį „smėlį“:

Negeneralizuoti pastatai smulkiame mastelyje virsta „smėliu“

Norėdami šito išvengti, turime pastatus generalizuoti. Pradžioje pastatus reikia supaprastinti (sumažinti kraštinių skaičių paliekant pagrindines/charakteringas). Antras pastatų generalizavimo etapas – tipifikacija. Žemiau aprašysiu tipifikacijos eksperimento, naudojant atvirą PostGIS sistemą, trumpą aprašymą.

Imame paprastą apibrėžimą: tipifikuoti – imti pastatų centrą ir jame braižyti minimalaus tinkamo dydžio kvadratą, orientuojant jį į artimiausią kelią. T.y. paprastam eksperimentui ignoruosiu pastatų pasiskirstymą, išdėstymo šablonus ir pan.

Mastelyje n pastatus, kurių plotas didesnis už kritinę ribą p, supaprastiname, o visus likusius – tipifikuojame. Tipifikavimo seka: iteruojame per pastatus, pradedant nuo didžiausio. Jei pastato centroide nubraižytas minimalus kvadratas yra toliau nuo kitų jau apdorotų (supaprastintų ar tipifikuotų didesnių) pastatų, tai pastato kvadratą braižome, priešingu atveju pastatas išmetamas (nebraižomas mastelyje n).

Pastatų generalizavimas (20m)

Aukščiau pateiktoje iliustracijoje štrichuoti – originalūs pastatai, geltoni – supaprastinti (paliekant tik kraštines, ilgesnes nei 20m), violetiniai – tipifikuoti pastatai.

Kažkur ties 40m jau pasiekiame lyg ir ribą, nes kai kurie tipifikuoti pastatai tampa net labiau išraiškingi už realybėje didesnius pastatus:

Pastatų generalizavimas (40m)

Toliau lieka žaisti su parametrais:

  • supaprastinimo/tipifikavimo riba konkrečiame norimame mastelyje (ši riba, panašu, turi būti gerokai didesnė už mastelyje matomą taško dydį),
  • minimaliu atstumu tarp pastatų.

Dar viena ne iki galo aiški detalė – kokius reikia naudoti kelius tipifikuotų pastatų orientavimui. Pradinė mintis lyg ir būtų naudoti kelius, kurie rodomi atitinkamame mastelyje, ir tai dažniausiai veikia, bet yra ir išimtinių atvejų, tarkime jei kelias eina iki sodybos su keliais pastatais, jei pastatus orientuosime į šio kelio galą, gausime nelabai teisybę atspindintį išsidėstymą puslankiu.

Pirmame įrašo paveiksle pateiktas pastatų „smėlis“ virsta tokiais simboliais, kurie turėtų aiškiau rodyti, kad čia yra atskiri pastatai:

Tipifikuoti pastatai

Šiuo principu tipifikuotus pastatus rasite atvirame Lietuvos topografiniame žemėlapyje: https://topo.openmap.lt

QGIS pamokėlės

Trumpos, aiškios, lietuviškai įgarsintos QGIS pamokėlės.

Mokomųjų filmų ciklas „GIS taikymas gamtosaugoje“

Sukurta įgyvendinat projektą „Natura 2000 tinklo valdymo optimizavimas Lietuvoje“ LIFE16 IPE/LT/016, kuris iš dalies finansuojamas LIFE programos lėšomis. Projekto tinklapis naturalit.lt

Parengta bendradarbiaujant Aplinkos projektų valdymo agentūrai ir Valstybinės saugomų teritorijų tarnybos Metodiniam analitiniam centrui.

Rengėjas Kristina Jarmalavičienė

Reikalinga Jūsų Nuomonė apie Žemės Stebėjimus

Nuotoliniais Žemės stebėjimais (angl. Earth observations) vadinamas informacijos rinkimas apie Žemės planetos paviršiaus fizines, chemines ir biologines savybes ir sistemas naudojant dirbtinius Žemės palydovus, lėktuvus, bepiločius orlaivius ir pan. Žemės stebėjimai iš kosmoso suteikia patikimus erdvinius duomenis, o pasikartojantys palydovų praskridimai leidžia stebėti Žemės paviršiaus pokyčius laike net ir sunkiai prieinamose vietose. Palydoviniai duomenys gali būti naudojami natūralių ekosistemų, miškų, žemės ūkio, urbanizuotų teritorijų, laivininkystės stebėsenai, ekstremalių situacijų valdymui, nuostolių ir pažeidimų identifikavimui ir vertinimui.

Vilniaus universiteto Geomokslų institutas 2019/2020 metais organizuos mokymų ciklą skirtą nuotoliniams Žemės stebėjimams iš kosmoso (angl. Earth Observations). Šiuo metu siekiama išsiaiškinti koks yra nuotolinių Žemės stebėjimų mokymų poreikis, kokios palydovinių duomenų taikymo sritys yra aktualiausios ir kokių įgūdžių trūksta.

Prašome skirti kelias minutes apklausai:

Apklausa bus atvira iki kovo 31 d.

Vandens telkinių etiketės (I etapas)

Jau buvo nemažai galvota ir rašyta apie vandens telkinių etiketes. Iš pradžių buvo svarstytas variantas tiesiog skaičiuoti centro liniją, bet taip gali būti rasta vieta etiketei, kur tekstas fiziškai netelpa (pavyzdžiui siauroje vandens telkinio vietoje), taipogi vien centro linijos skaičiavimas nenurodo, kokio dydžio šriftą galima naudoti. Stambiame mastelyje vandens telkinių etikečių reikia daugiau, kad būtų didesnė tikimybė matomoje žemėlapio dalyje matyti ir ežero ar tvenkinio pavadinimą. Taigi reikėjo kitokio sprendimo, kurio bendras principas buvo aprašytas atskirame įraše. Šiame įraše bus aprašytas praktinis etikečių skaičiavimo įgyvendinimas. Tiksliau jo pirma dalis.

Sunkiausia dalis yra sudėlioti etiketes sudėtingos geometrijos poligonuose, t.y. telkiniuose, turinčiuose ne vienos ištisos „dešrelės“, o sudėtingesnes formas: X, Y, E ar tiesiog vizualiai kai kuriuose masteliuose turinčius kelias atskiras dalis. Ir sunkiausia yra ne sugalvoti algoritmą, o iš principo aprašyti, kaip kada kur ir kiek turi būti etikečių. Taigi pagrindiniai klausimai yra kartografiniai, o ne programavimo.

Sausio pradžioje buvo gauta daug naudingų patarimų ir pasiūlymų iš Lietuvos kartografų. Dauguma jų buvo būtent apie sudėtingesnes etiketes (sudėtingos formos vandens telkiniams), tai pirmame etape patarimų panaudota nedaug, bet jų labai prireiks II etape.

Pirmame etape sukurtas algoritmas, skaičiuojantis etiketes paprastesnės formos ežerams. Absoliuti dauguma ežerų yra būtent tokie, ir dabartinis algoritmas dažniausiai duoda visai neblogą rezultatą.

I etapo rezultatai

Etiketės gali būti braižomos arba taške (horizontaliai), arba palei liniją. Kiekviena etiketė turi ir būtent jai paskaičiuotą šrifto dydį ir tarpą tarp raidžių. Etiketės skaičiuojamos kiekvienam masteliui atskirai. Vienas mastelis vienam telkiniui gali turėti vieną ar daugiau etikečių (paprastai stambiuose masteliuose, kur vienu metu matoma tik dalis ežero ar tvenkinio).

Skaičiavimas vyksta kiekvienam telkiniui atskirai. Pradedama nuo stambiausio mastelio. Patikrinama, ar vandens telkinyje telpa pavadinimas dideliu šriftu ir gal net keliose vietose. Jei taip – tam masteliui sukuriama viena ar daugiau
tokių stambių etikečių.

Kai didelės etiketės nebetelpa, bandoma skaičiuoti pagal formą išlenktas etiketes. Pradžioje bandoma sukurti didelę etiketę (30pt dydžio), jei tokia netelpa – bandoma kurti mažesnę etiketę. Bandoma tol, kol arba randama etiketės pozicija, arba nustatoma, kad net mažiausiam parinktam šrifto dydžiui etiketė netelpa.

Pagal ežero formą nubraižyta etiketė

https://topo.openmap.lt/#t/13/55.04815/25.55899/0/0/

Jei etiketės linija yra ilga, tai ji dalinama į dalis, kad vandens telkinys turėtų daugiau nei vieną etiketę ir žemėlapyje vaizduojant skirtingas telkinio dalis padidėtų tikimybė, kad bus rodoma ir etiketė.

Priklausomai nuo to, kokio ilgio gavosi etiketei skirta linija ir koks yra vandens telkinio pavadinimas, paskaičiuojama, kokie bus tarpai tarp raidžių.

Kai etiketės linija trumpa, tarp raidžių paliekami mažesni tarpai.

https://topo.openmap.lt/#t/14/55.30602/25.5749/0/0/

Jei ežeras per mažas, kad jame tilptų pagal formą išlankstyta etiketė, bet jis pakankamai didelis konkrečiame mastelyje – braižoma taškinė (horizontali) etiketė.

Pastebėtina, kad etiketės skaičiuojamos atskirai kiekvienam vandens telkiniui, atskirai kiekvienam masteliui. Taigi viename mastelyje greta vienas kito gali būti ežerai su skirtingo šrifto dydžio ir skirtingų tarpų tarp raidžių etiketėmis.

Skirtingo šrifto dydžio, skirtingų tarpų tarp raidžių ir net skirtingo tipo etiketės (Želvykščio ežero etiketė horizontali).

https://topo.openmap.lt/#t/14/55.3109/25.55123/0/0/

Net ir tokie pirmo etapo rezultatai nėra baigti, nes skaičiavime dalyvauja apie dešimt koeficientų, nuo kurių priklauso tiek teksto parametrai, tiek linijos geometrija, atstumas iki kranto ir kokio dydžio vidiniai objektai (salos, iškyšuliai) yra ignoruojami. Dauguma šių parametrų yra susiję tarpusavyje, todėl pareguliavus vieną tenka reguliuoti ir kitus. Šio teksto rašymo metu topo.openmap.lt žemėlapyje matomas gal 30 iteracijos rezultatas, bet net ir dabar naršant po žemėlapį randamos probleminės vietos, kurios sprendžiamos ir toliau keičiant koeficientų reikšmes.

Etiketės skirtos žemėlapiui, kuris gali būti pasukamas, todėl skaičiuojant etikečių linijas nebuvo teikiamas pirmumas gauti horizontalią etiketę.

Taipogi gali pasirodyti, kad sudėtingesnes etiketes galima būtų tiesiog nubraižyti rankomis ir vėliau naudoti, juk vandens telkinių geometrija keičiasi ypatingai retai. Bet tai jau būtų per daug paprasta, todėl viską stengiamasi padaryti išskirtinai tik algoritmo pagalba. Papildoma nauda – kai skaičiuoja algoritmas, visada aišku, kodėl konkreti etiketė buvo paskaičiuota taip, o ne kitaip, t.y. visada galima aiškiai pasakyti, kokiais kriterijais buvo vadovaujamasi.

Vienintelė vieta, kur buvo pritaikyti specifiniai veiksmai, tai Kuršių marios, kurių geometrija buvo apkarpyta pagal Lietuvos sienas, kad etiketė būtų Lietuvos viduje.

Kurių marių geometrija buvo apkarpyta, kad etiketės pozicija būtų paskaičiuota Lietuvoje.

https://topo.openmap.lt/#t/10/55.41769/21.19452/0/0/

Tai tiek apie pirmą etapą. Detalesnis techninis etikečių skaičiavimo algoritmo aprašymas (pastoviai kintantis) yra atviro žemėlapio githubo wikyje. Ten pat rasite ir etikečių skaičiavimo kodą. Viskas parašyta naudojant atviras technologijas – PostgreSQL+PostGIS – kad kiek galima daugiau projektų galėtų pasinaudoti rezultatais. Etikečių braižymo informacija greitai turėtų atsirasti ir Lietuvos OpenStreetMap shape duomenų svetainėje, kad norintys galėtų panaudoti tokias etiketes kurdami savo žemėlapius su QGIS ar kita GIS programine įranga.

Cartocon 2018

Vyto Markevičiaus nuotr.

Lietuvoje nėra gausu profesinių renginių ir įvykių kartografų ir GIS specialistų bendruomenei. Ilgą laiką tai buvo Hnit-Baltic kasmet rengiama Lietuvos ESRI vartotojų konferencija, na, iš dalies dar galima būtų paminėti kasmetinę Lietuvos Matininkų Asociacijos (LMA) konferenciją, tačiau vienoje orientuojamasi  į vieno gamintojo technologijas, o kitoje į tikslius ir turto matavimus.

Urtės Antanavičiūtės nuotr.

2018 metai buvo dar liūdnesni, nes ESRI vartotojų konferencija pakilo į aukštenį lygį ir išėjo už Lietuvos ribų.
Lietuvos Kartografų Draugijos metų pradžioje planuota šiuolaikinių kartografijos ir GIS mokslo ir technologijų konferencija teikė daug vilčių. Ir štai – 2018 lapkričio 30 d. tai įvyko. Cartocon 2018 buvo ne tik lyg tyro oro gurkšnis, bet pranoko net ir turėtus lūkesčius ir štai kodėl!

Toliau skaityti “Cartocon 2018”

Pastatų generalizavimas

Yra daug pastatų generalizavimo operacijų, daug operacijų parametrų parinkimo variantų, daug operacijų atlikimo sekų variantų. Kol kas nepastebėjau, kad kas nors būtų radęs vieną teisingą variantą, tinkantį visoms situacijoms: skirtingiems masteliams ir skirtingo tankio ir/ar geometrijos pastatams (pvz. tankiai užstatytiems senamiesčiams, retai užstatytiems sodams ir dar rečiau užstatytoms laukų sodyboms).

Aprašysiu bandymus parinkti tinkamus parametrus generalizuojant pastatus 12 masteliui (kur 1 taško plotis yra ~40m). Tikiuosi, kad radus parametrų reikšmes (o tikriausiai ir patvarkius pačią generalizavimo seką), bus galima atitinkamai išdėlioti generalizaciją ir stambesniems masteliams. Toliau skaityti “Pastatų generalizavimas”