Topologijos taisyklės

Plotai su „skylėmis“

OpenStreetMap žymėtojai dažnai klausia, ką daryti, kai turime parkelį, sudarytą iš miško ir jo viduryje esančios pievos. Kaip juos teisingai pažymėti?

Tokiu atveju OpenStreetMap tikėtina turėsime du kelius: A – išorinis perimetras, B – vidinės pievos perimetras:

Jei išorinį kelią A pažymėsime tiesiog landuse=forest, o vidinį – landuse=meadow, gausime tokius geografinius objektus:

Kaip matome, miškas neturi iškirpimo. Taigi jei skaičiuosime miško plotą – gausime neteisingą rezultatą. Kuriant žemėlapį reikės pievos plotą (apskritimą) paišyti vėliau (aukščiau) už miško plotą (stačiakampį), jei norėsime, kad pieva matytųsi. Kadangi realiame žemėlapyje bus daug panašių objektų, tai vienoje vietoje „iškirpimas“ bus pieva, kitoje – miškas, trečioje vanduo, ketvirtoje ežero sala. Taigi net teoriškai neegzistuos tokia braižymo tvarka, kuri užtikrintų teisingą objektų vaizdavimą. Vienu atveju nesimatys miškai, kitu – pievos, vienu atveju nesimatys ežero salos, kitu atveju – maži ežeriukai miškuose.

Sprendimas yra sukurti multipoligoną (ryšį), kuriame A kelią nurodytume kaip „outer“ kelią, o B – kaip „inner“. Tokiu atveju gautume trečią geografinį objektą:

Gavome objektą su „išpjova“. Būtent toks ir yra miškas. Turint tokį mišką mums ir ploto skaičiavimai gausis teisingi, ir nereikės rūpintis, ką braižyti pirmą – mišką ar pievą – visada gausime teisingą rezultatą, nes figūros viena su kita nepersidengia.

Galutinis objektų sąrašas turėtų būti toks:

  • C – miško multipoligonas (landuse=forest), sudarytas iš A kaip „outer“ ir B kaip „inner“.
  • B – pievos poligonas (landues=meadow) – kelias B
  • A – parko poligonas (leisure=park) – išorinis kelias. Parkas yra viskas: ir miškas, ir pieva. Braižant žemėlapį parkas yra „virš“ visko. T.y. apačioje braižome miško/medžių ir pievos/žolės plotus, o tada virš jų, jei to reikia žemėlapiui, paišome permatomą „parko“ plotą arba tiesiog parko pavadinimą, dengiantį tiek miško, tiek pievos dalis.

Puiku. Bet ne visi žino, kad taip reikia žymėti. Ką daryti? Sukurti ir naudoti Topologijos taisykles, kurios šiuo konkrečiu atveju nurodytų, kad miško ir pievos poligonai negali persidengti.

Kas yra topologijos taisyklės?

Topologijos taisyklės apibrėžia santykį tarp skirtingų objektų geografinėje informacinėje sistemoje. Tarkime viena taisyklė gali nurodyti, kad miško poligonai negali persidengti vienas su kitu. Kita taisyklė gali nurodyti, kad miško poligonas negali persidengti su vandens poligonu. Dar kita taisyklė – kad miesto X adreso taškai turi būti miesto X administracinėse ribose.

Daugiau principinių topologijos taisyklių pavyzdžių galite rasti ESRI Topologijos taisyklių brošiūroje.

Kam reikalingos topologijos taisyklės

Apibrėžus topologijos taisykles ir jų laikantis, geografinė duomenų bazė tampa tvarkingesne. Kuriant ar keičiant duomenis aiškiau, kaip reikia teisingai braižyti. Prisiminus aukščiau aprašytą parko pavyzdį, apibrėžus taisyklę, kad miškas ir pieva negali persidengti, pasidaro aišku, kad neužteks nupaišyti pievą vidury miško, reikia tokį patį plotą „iškirpti“ iš miško.

Laikantis tokių taisyklių palengvinamas ir kartografų darbas. Jei pagal aukščiau apibrėžtą pavyzdį pievos plotas bus iškirptas iš miško, kartografui nereikės rūpintis, ką paišyti pirmiau/žemiau – mišką ar pievą. Nors šiuo konkrečiu atveju atrodytų, kad paišykime mišką žemiau, tada virš jo pievą ir viskas bus gerai, bet kas bus, jei turėsime analogišką situaciją, tik dabar jau turėsime mažą miškiuką didelėje pievoje? Jei nedarysime pievos iškirpimo pagal miško plotą, galutiniame žemėlapyje miškas nesimatys.

Nepamirškime ir plotų skaičiavimo. Tarkime norime paskaičiuoti bendrą miškų plotą. Jei pievos ar kiti miško viduje esantys plotai nebus „iškirpti“ – mes gausime neteisingą suminį plotą (bus įskaičiuotas ir pievų plotas). Susumavę visus Lietuvos miškus, pievas, gyvenamuosius plotus, vandenį ir t.t. ir pan. mes gausime didesnį skaičių nei bendras Lietuvos plotas!

OpenStreetMap

Atvirame žemėlapyje duomenims yra suteikiama labai didelė laisvė. Žymėtojai patys gali susigalvoti norimas žymas, jų reikšmes. Taip pat nėra apibrėžtos (bent jau kol kas) ir topologijos taisyklės. Taigi kas kaip sugalvoja, tas taip ir braižo. Tokia anarchija nors ir padaro braižymą lengvesniu, bet užtat tokių duomenų naudojimas yra sudėtingesnis.

Taigi kol kas yra apibrėžiamos tik regioninės topologijos taisyklės. Pavyzdžiui Lietuvoje yra apibrėžtos kelios topologijos taisyklės. Bendras jų veikimo procesas yra toks:

  1. Topologijos taisyklė yra suformuluojama, pasiūloma ir aptariama.
  2. Topologijos taisyklė patvirtinama, vykdoma taisyklės neatitinkančių objektų paieška, taisomos problemos ir tuo pačiu tikrinama, ar visur taisyklės taikymas yra logiškas. Jei kažkur taikymas nelogiškas – taisyklė arba taisoma, arba jos atsisakoma apskritai.
  3. Jei pavyksta ištaisyti visas topologijos taisyklės klaidas, taisyklė įjungiama į „stebėjimo režimą“. Tai reiškia, kad periodiškai (kasdien) yra patikrinama, ar naujai įvesti ar pakeisti objektai atitinka taisyklės reikalavimus.

Tai tiek bendros informacijos apie topologijos taisykles. Žinokite, kad toks dalykas yra, rašykite į sąrašyną (talk-lt) naujų taisyklių kūrimo ar esamų keitimo pasiūlymus!

Share

Vektorinis žemėlapis

Džiugu pranešti, kad atnaujintas openmap.lt pradėjo naudoti vektorinius žemėlapius. Mano žiniomis, tai pirmas Lietuvoje padarytas vektorinis žemėlapis (kitas yra Google žemėlapis, bet jis ne Lietuvoje padarytas).

Sakysite, kad techninės detalės, niekam neįdomu? Ne. Štai kelios paprastam naudotojui matomos vektorinio žemėlapio savybės, kurių nebuvo ir negalėjo būti anksčiau naudotuose rastriniuose („kaladėliniuose“) žemėlapiuose.

Žemėlapio pasukimas

Nors šiais laikais įprasta žemėlapį orientuoti taip, kad viršuje būtų šiaurė (beje, istoriškai taip buvo ne visada: viduramžiais viršuje buvo pietūs, dar anksčiau viršuje buvo rytai). Vektorinį žemėlapį galima pasukti kaip norime, ir visos etiketės (gatvių, lankytinų vietų ir pan. pavadinimai) bus atitinkamai perpaišytos, nebus aukštyn kojomis parašyto teksto:

Kam to reikia? Dažnai žmonės mėgsta žemėlapį pasukti savo žiūrėjimo kryptimi. Jei tarkim aš stoviu prie Gedimino paminklo Katedros aikštėje ir noriu eiti link Rotušės, tai norėsiu taip pasukti žemėlapį, kad Rotušė būtų „virš“ Katedros aikštės. Taip pat galima padaryti, kad žemėlapis automatiškai sukinėtųsi pagal judėjimo kryptį (kaip tai daroma GPSR įrenginiuose).

Žemėlapio pakreipimas

Žemėlapį taip pat galima pakreipti, taip sudarant erdvinio vaizdo įspūdį:

Pasukti ir pakreipti žemėlapį galite dešiniu pelės mygtuku arba dviem pirštais tapšno-įrenginiuose.

Žemėlapis yra interaktyvus

Galima spausti ant žemėlapyje rodomų lankytinų vietų, bus rodoma papildoma informacija, tokia kaip darbo laikas, svetainė, nuotrauka ir pan.

Ortofotografinis sluoksnis

Šiame žemėlapyje yra ir Nacionalinės Žemės Tarnybos ortofotografinis ORT10LT sluoksnis. Tai nėra vektorinės technologijos nuopelnas tiesiogiai, bet su vektoriniu žemėlapiu yra daug paprasčiau padaryti, kad ant ortofotografinio žemėlapio būtų rodomi kelių, upių pavadinimai ir pan.

Kitos techninės naujovės

Taipogi yra eilė naujovių labiau techninėmis detalėmis besidomintiems. Tarkim vektorinio žemėlapio atveju, serveris grąžina tik objektų formas. Kaip braižomas žemėlapis (kokie objektai braižomi, kokie nebraižomi, kokios naudojamos spalvos, kelių storiai, piktogramos lankytinoms vietoms ir panašiai) yra valdoma paprastu json failu žemėlapį rodančioje svetainėje. Tai reiškia, kad dabar, net neatlikdami sudėtingų veiksmų, tokių kaip savo duombazės kūrimas, osm duomenų įkėlimas ir atnaujinimas ir pan. jūs galite susikurti savo žemėlapį tiesiog įvairiais vizualaus redagavimo įrankiais pakoregavę stiliaus json failą pagal savo poreikius (gal išmesti sau neįdomius objektus, gal spalvas pritaikyti prie savo svetainės spalvų schemos ir pan.).

Pakreipus žemėlapį galima pridėti 3D žemėlapį tiesiog panaudojus pastatų aukščio informaciją.

Ir dar daug daug kitų naujų galimybių, apie kurias bus rašoma vėliau 🙂

Share

Lietuvos pažintiniai takai

Lietuvoje yra virš šimto pažintinių takų. Informacija apie juos buvo renkama OpenStreetMap nuo pat projekto atsiradimo pradžios. Nes tuo metu (prieš 13 metų) praktiškai nebuvo kito pasirinkimo (neskaitant dedikuotų GIS sprendimų). Kalbant apie pažintinius takus, mums įdomi tiek taškinė informacija (kurią paprasta rodyti žemėlapyje, „į kurią“ galima naviguoti ir pan.), tai paprastai bus pažintinio tako pradžios taškas (ar taškai, kai pradžių yra kelios). Na ir įdomi pati trasa (maršrutas), nes kai jis nubraižytas žemėlapyje, mes galime geriau suprasti, ką pamatysime eidami konkrečiu taku.

Maršrutų informacija yra pakankamai sudėtingas dalykas, todėl nėra taip jau ir trivialu pamatyti pažintinių takų informaciją, nors būdų tikrai yra daug. Žemiau pateiksiu kelis variantus skirtingiems taikymams/įrenginiams.

Interneto svetainės

Galite naudoti http://hikebikemap.org/. Joje įsijungę „Lonvia Hiking Routes“ matysite pažintinių takų maršrutus (ten pat galite įsijungti ir dviračių maršrutų rodymą).

Lietuvoje galite naudoti https://places.openmap.lt svetainę. Joje yra galimybė matyti pažintinius takus kaip taškus žemėlapyje, tai patogu ieškant pažintinių takų Lietuvoje:

Bet galite ir gauti tiesiog sąrašą visų pažintinių takų: https://places.openmap.lt/pazintiniai-takai/

Na ir detalią pažintinio tako informaciją:

Mobilioji programėlė

Mobiliuose aparatuose (telefonuose, planšetėse), kai norite viską turėti nenaudojant interneto, kaip visada nepralenkiama yra OsmAnd programėlė, tik žmonės dažnai nežino/neranda reikiamo funkcionalumo, kurio OsmAnd labaaaai jau daug.

Taigi. Einame į meniu „Konfigūruoti žemėlapį“, ir ten pačioje pabaigoje randam punktą „Maršrutai“:

Tada žiūrime skiltį „Padengimas žygių simboliais“:

Čia galite pasirinkti jums priimtinesnį pėsčiųjų maršrutų vaizdavimą (arba jį išjungti). Ir viskas, tada žemėlapyje matysite paryškintus pažintinius takus:

Duomenys

O dabar truputis techninės informacijos tiems, kas ne tik naudoja OpenStreetMap informaciją, bet ją pildo/taiso.

Pažintinių takų tašką žymime maršruto pradžioje kaip paprastą tourism=attraction, tik pridedame papildomą žymą attraction:type=hiking_route. Toliau standartiškai name, website, description, image, distance žymos.

Pats maršrutas – keliai, sujungti į ryšį, turintį tokias žymas:

  • type=route
  • route=hiking
  • network=lwn
  • name=**** pavadinimas, lygiai toks pats, kaip ir aukščiau minėtame tourism=attraction taške ****
  • distance=5

Štai ir viskas. Gero vaikščiojimo! 🙂

Share

Lankytinų vietų kolekcionavimas

Lankytinų vietų Lietuvoje tikrai yra daug – tūkstančiai. Pastoviai atsiranda naujos lankytinos vietos, senos kartais, deja, dingsta (pvz. pažintiniai takai apleidžiami, muziejai užsidaro ir pan.). Na ir dėl paties vietų kiekio gan sunku populiaresniuose regionuose iš karto aplankyti viską. Todėl anksčiau ar vėliau iškyla problema: kaip greitai rasti dar neaplankytas vietas?

Yra tokie puikūs aktyvus užsiėmimai kaip geocaching ar opencaching – lobiukų rinkimas. Jo esmė paprasta – tūkstančiai žmonių slepia lobiukus, registruoja jų pozicijas, o tada norintys ieško lobiukų, radę pažymi „radau“ ir tada ieško kitų lobiukų. Taigi tokiu pačiu principu sukurtas ir paleistas https://places.openmap.lt lankytinų vietų kolekcionavimas. Mintis paprasta: prisijungiate, nurodote, kokio tipo lankytinos vietos jums įdomios, gaunate sąrašą artimiausių lankytinų vietų, peržiūrite, pažymite aplankytas ar jūsų nedominančias – sąrašas mažėja. Taip sąraše turite tik tai, ko dar neaplankėte. Paprasta ir patogu greitai nuspręsti, ką aplankyti.

Kaip tai veikia

Visų pirma places.openmap.lt Lankytinų vietų žemėlapyje susirandate jus dominančią vietą, iš kurios lankysite objektus. T.y. žemėlapį pastumiate/priartinate taip, kad centras būtų jus dominanti vieta. Galite naudoti automatinį jūsų pozicijos nustatymo funkcionalumą.

Tada spaudžiate kolekcionavimo mygtuką:

Kolekcionavimo mygtukas

Patenkate į kolekcionavimo puslapį. Čia jums reikia prisijungti. Prisijungiate savo Google paskyra. Prisijungimo tikslas – unikaliai jus identifikuoti, kad sistema atsimintų būtent jūsų mėgstamas grupes ir būtent jūsų aplankytas vietas. Tai reiškia, kad rinktis lankytinas vietas, žymėti jas aplankytomis ar neįdomiomis, galite skirtingose vietose (tarkim namų kompiuteryje ir savo telefone), places atpažins, kad tai tas pats žmogus.

Prisijungus pirmą kartą jums reikia eiti į skiltį Grupės ir joje nurodyti, kokios lankytinų vietų grupės jus domina:

Lankytinų vietų grupės

Galite pasirinkti vieną ar daugiau grupių.

Pasirinkę grupes grįžkite į lankytinų vietų sąrašą:

Artimiausių lankytinų vietų sąrašas

Matote lankytinas vietas, išrikiuotas pagal atstumą nuo jūsų pradžioje žemėlapyje parinktos vietos. Iš viso rodoma iki 100 artimiausių lankytinų vietų.

Parinkite norimą lankytiną vietą – gausite detalesnę informaciją:

Detali lankytinos vietos informacija

Čia matote tą pačią informaciją, kuri rodoma ir pagrindiniame places.openmap.lt žemėlapyje. Turite tris mygtukus, kurių pagalba galite nurodyti, kad šią vietą jūs jau aplankėte arba kad ji jūsų nedomina – tokiu atveju vieta dings iš jūsų asmeninio neaplankytų vietų sąrašo.

Tai tiek. Bandykite, naudokite, komentuokite ir svarbiausia – lankykite 🙂

Share

Kaip sukurti Garmin žemėlapį I

Atviro žemėlapio duomenys visiems laisvai prieinami, su jais daryti galima bet ką. Tai reiškia galima ir pasidaryti savo Garmin žemėlapį. Garmin žemėlapį sukurti galima galybe skirtingų būdų, yra labai daug galimybių ir metodų, todėl parašysiu seriją straipsnių, po žingsnį rodant kaip padaryti vieną ar kitą dalyką, pradedant nuo paties paprasčiausio Garmin žemėlapio sukūrimo, iki sudėtingo žemėlapio su savais objektais ir savu atvaizdavimo stiliumi (sava simbolika).

Žemėlapio duomenys

Visų pirma mums reikės duomenų. Yra daug variantų, kaip ir iš kur gauti duomenis, čia paminėsiu tik vieną – patį paprasčiausią. Naudokite http://download.geofabrik.de/. Ten rasite visų žemynų, šalių, regionų duomenis.

Visiems tolimesniems bandymams naudosime Lietuvos duomenis, kuriuos parsisiųsti galima iš čia: http://download.geofabrik.de/europe/lithuania.html.

Mus domina pbf failas lithuania-latest.osm.pbf.

Programinė įranga

Žemėlapį kursime naudodami atviro kodo programinę įrangą mkgmap (MaKe Garmin MAP).
Svetainė: http://www.mkgmap.org.uk.

Atsisiųskite paskutinę versiją (failas mkgmap-r1234.zip, kur 1234 – versijos numeris). Išpakuokite naujame aplanke. Turėtumėte gauti tokius failus/aplankus:

  • doc
  • examples
  • lib
  • LICENCE
  • README
  • mkgmap.jar

Patikrinkite, ar gerai atsisiuntė programa ir ar veikia java. Įvykdykite tokią komandą:

java -jar mkgmap.jar --version

Turėtumėte gauti kažką panašaus į šitą:

Time started: Sun Jul 16 16:22:57 EEST 2017
3973

T.y. paleidimo laikas ir mkgmap versijos numeris. Jei paleisti nepavyko – patikrinktie, ar veikia java.

Paprasčiausias žemėlapio kūrimas

Pabandykime paprasčiausią žemėlapio kūrimo komandą:

java -jar mkgmap.jar --input-file=lithuania-latest.osm.pbf

Gauname tokį atsakymą:

SEVERE (MapFailedException): lithuania-latest.osm.pbf:
(thrown in BufferedImgFileWriter.ensureSize()) There is not
enough room in a single garmin map for all the input data.
The .osm file should be split into smaller pieces first.

Garmin žemėlapio formatas turi apribojimą, kokio dydžio gali būti vienas žemėlapio „gabalas“ (nesigilinkime detaliau, kas tas „gabalas“), t.y. kiek informacijos galima sukišti į vieną žemėlapio dalį. Jei bandytume sukurti žemėlapį mažesniam regionui (tarkim tik Vilniui, arba kokiai dar mažesnei už Lietuvą šaliai), tai šios komandos užtektų. Dabar gi mums teks duomenis padalinti į gabalus.

Duomenų dalinimas į gabalus

Dalinimui naudosime programą splitter, kurią galite atsisiųsti iš tos pačios mkgmap svetainės: http://www.mkgmap.org.uk/download/splitter.html.

Padalinimui nurodysime tik pradinį duomenų failą ir maksimalų taškų skaičių – 3,2 milijono. Nesigilinkime, kodėl šis skaičius toks, ar kitoks 🙂

java -jar splitter.jar --max-nodes=3200000 lithuania-latest.osm.pbf

Šis dalintojas sukurs tiek žemėlapio duomenų failų, kiek reikia. Šio įrašo rašymo metu Lietuvai sukuriami keturi failai:

  • 63240001.osm.pbf
  • 63240002.osm.pbf
  • 63240003.osm.pbf
  • 63240004.osm.pbf

Dabar mums reikia pakartoti žemėlapio kūrimą, nurodant visus keturis failus.

Žemėlapio kūrimas iš kelių šaltinio kaladėlių

Mums reikia papildyti anksčiau naudotą mkgmap paleidimą kelių įvesties failų nurodymu (rašykite vienoje eilutėje)

java -jar mkgmap.jar --input-file=63240001.osm.pbf
--input-file=63240002.osm.pbf
--input-file=63240003.osm.pbf
--input-file=63240004.osm.pbf
--gmapsupp

Atkreipkite dėmesį, kad gale pridėta dar papildoma parinktis –gmapsupp – ji nurodo, kad iš visų šių keturių duomenų failų reikės sukurti vieną gmapsupp failą. Paleidžiame:

Time started: Sun Jul 16 21:01:03 EEST 2017
Number of MapFailedExceptions: 0
Number of ExitExceptions: 0
Time finished: Sun Jul 16 21:02:41 EEST 2017
Total time taken: 97612ms

Na ir turėtų būti atsiradęs failas gmapsupp.img – tai žemėlapis, kurį galite įsikelti į savo Garmin GPSR įrenginį:

Paprasto Garmin žemėlapio vaizdas įrenginyje

Tai tiek pirmam kartui. Šis žemėlapis neturi adresų paieškos galimybės, niekaip neįtakota, kokie objektai pateko/nepateko į žemėlapį ir panaudotas standartinis Garmino vaizdavimo stilius. Kaip šiuos dalykus valdyti, bus rašoma vėliau.

Share