Skip to content

Vandens telkinių etiketės

Tomas Straupis edited this page Feb 25, 2019 · 3 revisions

Vandens telkinių etiketės skaičiuojamos kiekvienam masteliui atskirai (išskyrus 18 mastelį, kuris naudoja 17 mastelio etiketes). Bendra skaičiavimo schema tokia:

main

Pradžioje skaičiuojamos etiketės 17 masteliui. Pradžioje bandoma suteikti daug taškinių etikečių (t.y. išmėtyti daug taškų vandens telkinio poligone, kuriuose būtų rodomos 28 šrifto dydžio etiketės).

Jei vandens telkinys per mažas, kad jame tilptų tokios etiketės, tada bandoma skaičiuoti centro linijas.

Pastebėtina! Jei mastelyje n nepavyko paskaičiuoti multi-labels, tai jos nebebus skaičiuojamos nei viename mažesniame (smulkesniame) mastelyje.

Jei centro linija netelpa, tada bandoma dėti vieną centro etiketę. Taigi tikrinama, ar vandens telkinio plotis ar aukštis einamajame mastelyje yra daugiau už 50 taškų (ateityje, gal reikėtų atsižvelgti į pavadinimo plotį?), jei taip - dedama viena etiketė telkinio centre (st_pointonsurface).

Pastebėtina! Pabandžius centro liniją, prieš dedant vieną taškinę etiketę, ateityje bus pridėtas sudėtingesnių etikečių skaičiavimas, skirtas įdomių formų vandens telkiniams, tokiems kaip Sartų ar Asvejos ežeras.

Centro linijos skaičiavimas

centerline

Pradžioje bandoma skaičiuoti centro liniją, ant kurios būtų galima nupaišyti 30 dydžio etiketę. Tai reiškia, kad skaičiuojant centro liniją, bus naudojami 30 taškų (paversti į atitinkamo mastelio metrus) dydžio kvadratai. Vandens telkinio geometrija šiek tiek supaprastinama ir padidinama pradžioje darant st_buffer(size/1.3), o tada st_buffer(size/2) (kur size yra šrifto dydis paverstas metrais skaičiuojamame mastelyje, čia klausimas, ar skaičiuojant buferį reikia atsižvelgti į etiketės dydį, ar galimybė „išlįst“ turi būti fiksuota konkrečiam masteliui). Taip pašalinamos vidinės salos ir šiek tiek praplečiamas vandens telkinys, taip dalinai kompensuojant faktą, kad kvadratas gali tik truputį netilpti į vandens telkinį (nors per jį einanti etiketė pilnai tilps).

Paskaičiuotą centro liniją bandoma supaprastinti (ištiesinti). Tiesinama 9 iteracijas, vis patikrinant, ar gauta centro linija su šrifto dydžio buferiu telpa į vandens telkinio geometriją.

Jei centro liniją paskaičiuoti pavyko, tada tikrinama, ar jos ilgis didesnis bent už pusę vandens telkinį apibrėžiančio stačiakampio įstrižainės ilgio. Per trumpos centro linijos išmetamos kaip netinkamos. T.y. bus bandoma skaičiuoti centro liniją mažesniam etiketės dydžiui.

Jei centro linija buvo pakankamo ilgio, tada skaičiuojamas tarpas tarp raidžių etiketėje. Tam naudojamas textSize14 dydis - kuris yra teksto dydis taškais (pikseliais) užrašytas 14 šriftu (šioje vietoje kol kas nelabai suprantu, kodėl teisingesni rezultatai gaunasi dalinant iš 28, o ne iš 14.

Galų gale grubiai pažiūrima, kiek kaladėlių (kaladėlės dydis yra 512 taškų) užima paskaičiuota centro linija. Jei daugiau už 4, tai centro etiketės linija dalinama į gabalus po 1024 taškų. Mintis tokia, kad tokioje centro linijoje reikia braižyti daug etikečių, stengiantis, kad vienu metu matytųsi viena iš jų (tiksliai to paskaičiuoti neįmanoma, nes centro linijos geometrija yra viena, o rodoma ji labai skirtingų dydžių žemėlapiuose: nuo mobilių iki plačiaekranių).

Centro linijos skaičiavimas 2

TODO

paveikslas