Tartu ehitusprojektide interaktiivne kaart

See töövoog loodi HUM häkatoni käigus ja keskendub Tartu ehitusprojektide andmebaasil põhineva interaktiivse kaardirakenduse loomisele. Projekti peamine eesmärk oli visualiseerida Tartu ehitusprojekte aastatel 1870–1920. Töövoog kirjeldab andmetöötlust ja kaardirakenduse loomist.

Töövoo sammud

Märksõnad: analüüsimine, arutamine, uurimine

Enne kaardi loomist tutvusime meile antud andmetega. Analüüsisime andmestiku atribuute ja väärtusi ning konsulteerisime andmeeksperdiga, et paremini mõista, mida soovisime lõpptootena kaardil visualiseerida. Andmestikust parema ülevaate saamiseks uurisime etteantud atribuute: millist tüüpi andmeid oli antud, millised olid andmebaasis esinevad ebaühtlused ning kui palju puuduvaid väärtusi oli olulisematel tunnustel. Analüüs tehti peamiselt NumPy teegi abil.

Lõpuks otsustasime, millised atribuudid sisaldasid kaardi jaoks väärtuslikke andmeid. Valitud atribuudid olid: pildid, aadress, omanikud, kasutusotstarve, linn ja kvartal, ehitusmaterjalid, korruste ja korterite arv enne ja pärast ehitusprojekti, veesüsteemi ja kuivkäimlate olemasolu, projekti number ja krundi number.

Märksõnad: loomine, andmete puhastamine, arutamine, geoviitamine, eemaldamine

Pärast andmeanalüüsi oli järgmine loogiline samm luua andmete põhjal andmebaas. Enne andmebaasi loomist tuli andmed aga NumPy teegi abil puhastada, et neid oleks lihtne kasutada. Andmeid uurides leidsime palju kirjeid, kus puudusid mõned olulised aspektid, näiteks aadressid ja fotod. Pärast põhjalikku kaalumist otsustasime need kirjed projekti lihtsuse huvides välja filtreerida.

Alguses oli meil umbes 6000 Tartu ehitusprojekti kirjet, kuid pärast põhjalikku andmepuhastust jäi alles umbes 3700 kirjet. Lisaks kasutasime Pythoni teeki GeoPy, et geolokaliseerida kõik alles jäänud kirjed ning määrata igaühele laius- ja pikkuskraad. Kuna paljud aadressid ei olnud standardsel kujul — näiteks nurgamajad ja muutunud tänavanimed —, jäi meil pärast geolokaliseerimist alles 1900 kirjet. See on muidugi suur andmekadu, kuid arvestades projekti aega, tööjõudu ja lihtsust, ei olnud see probleem. Lõpuks olime valmis looma andmebaasi meie projekti jaoks sobivate andmetega.

Märksõnad: loomine, programmeerimine

Taustarakendus loodi osaliselt vibe-coding’u ja osaliselt meie enda oskuste abil. Täpsustuseks: taustarakendus ei olnud selle projekti peamine rõhuasetus. Taustarakendus on üldjoontes lihtne ja sisaldab peamiselt mõningaid API-päringuid andmebaaside jaoks. See sisaldab ka serveriloogikat, mistõttu on projekt praegu nähtav ainult lokaalses arvutis koos kõigi andmetega, sealhulgas ehitusplaanide ja muude fotodega. Lisaks loodi taustarakendus Pythonis, kasutades FastAPI teeki.

Märksõnad: loomine, disain, programmeerimine

Töötasime häkatoni ajal paralleelsetes tiimides, mistõttu alustasime kasutajaliidese loomist näidisandmete põhjal. Esialgu rakendasime lihtsa filtreerimissüsteemi ja integreerisime rakendusse Leafleti teegi abil kaardi. Näidisandmeid kasutades paigutasime nööpnõelad õigetele aadressidele ning neile klõpsates avanes väike hüpikaken lisainfoga.

Arenduse edenedes kohandasime kõik pärisandmetega töötama, lisades täpsemaid filtreid ja lihtsat statistikat, näiteks majade koguarvu võrreldes nendega, mis on parasjagu kaardil kuvatud. Lisasime ka legendi eri tüüpi maju tähistavate ikoonidega. Lisaks avab majasümbolile klõpsamine nüüd külgpaneeli detailsema infoga, mis täiustab varasemat hüpikakna vaadet. Kui taustarakenduse andmebaas oli valmis, asendasime näidisandmed ja ühendasime kõik komponendid täielikult toimivaks süsteemiks.

Otsustasime rakenduse luua eesti keeles, kuna meie algandmestik oli juba eesti keeles ning peamine sihtrühm on Eesti kasutajad ja muuseumid.

Märksõnad: loomine, disain, arutamine, programmeerimine

Kui kasutajaliides ja taustarakendus olid integreeritud, hakkasime uurima lisafunktsioone ja liikuma edasi algsest eesmärgist luua interaktiivne kaart. Lisasime teise kaardikihi, milleks oli Tartu ajalooline kaart aastast 1927 Maa- ja Ruumiametilt, et pakkuda lisakonteksti. Samuti rakendasime kohandatud ikoone eri tüüpi asukohtade tähistamiseks — näiteks poed on märgitud ostukoti ikooniga.

Täiustasime oma filtreerimissüsteemi, asendades käsitsi koodi kirjutatud valikud andmebaasist pärit dünaamiliste väärtustega. See tagab, et kõik hiljem lisatavad andmed kajastuvad automaatselt ka saadaolevates filtrites. Lisaks viimistlesime külgpaneeli nii, et info oleks esitatud selgemalt ja kasutajasõbralikumalt.

Märksõnad: loomine, disain

Pärast omavahelisi ja mentoritega peetud arutelusid otsustasime projekti laiendada, lisades tehisaru abil loodud 3D-mudelid, mis põhinevad ehitusjoonistel. Näiteks valisime hoone, mille kohta oli mitu visandit ja korruseplaani, palusime Claude’i tehisarul hoone rekonstrueerida ning lisasime selle funktsioonina, mis kuvatakse nööpnõelale klõpsates lisainfo vaatamisel. 3D-mudel loodi ühe hoone kohta: Riia mnt 53.