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…