Sisukord:

Kohandatud stiliseeritud kaartide loomine OpenStreetMapi abil: 7 sammu (piltidega)
Kohandatud stiliseeritud kaartide loomine OpenStreetMapi abil: 7 sammu (piltidega)

Video: Kohandatud stiliseeritud kaartide loomine OpenStreetMapi abil: 7 sammu (piltidega)

Video: Kohandatud stiliseeritud kaartide loomine OpenStreetMapi abil: 7 sammu (piltidega)
Video: Generate Studio Quality Realistic Photos By Kohya LoRA Stable Diffusion Training - Full Tutorial 2024, Juuli
Anonim
Kuidas luua kohandatud stiliseeritud kaarte OpenStreetMapi abil
Kuidas luua kohandatud stiliseeritud kaarte OpenStreetMapi abil

Selles juhendis kirjeldan protsessi, mille abil saate luua oma kohandatud stiliseeritud kaarte. Stiliseeritud kaart on kaart, kus kasutaja saab määrata, millised andmekihid visualiseeritakse, samuti määratleda stiil, millega iga kiht visualiseeritakse. Esmalt kirjeldan protsessi, mille kaudu saate kaartide stiliseerimiseks tarkvara kirjutada, millele järgneb näide Pythoni tarkvarast, mille ma selle ülesande täitmiseks kirjutasin.

Järgmine video toob esile, kuidas ma isiklikult stiliseeritud kaarte genereerin, kuid jätkake intiimsete detailide lugemist. Mul on väga hea meel näha, mida kogukond loob!

Mis on minu motivatsioon selle projekti taga?

Ausalt öeldes alustasin selle projektiga, sest arvasin, et seda oleks tore teha. See mõte on mul viimased aastad peas möllanud ja lõpuks võtsin selle teostamiseks vajaliku aja. Pärast päevast prototüüpimist mõne põhilise skriptimisega suutsin luua äärmiselt paljutõotavaid tulemusi - nii paljutõotavaid, et teadsin, et pean oma skriptid vormistama nii, et teised saaksid hõlpsasti oma loomingut teha.

Minu motivatsioon selle juhendi kirjutamisel on tingitud asjaolust, et leidsin väga minimaalset teavet selle kohta, kuidas nullist oma stiliseeritud kaarte luua. Loodan jagada õpitut kogukonnaga.

Ressursid/lingid:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Githubi hoidla

Tarvikud

  • Pythoni jaotus (kasutasin Anaconda ja Python 3.6)
  • PyQt5 (GUI sõltuvuste jaoks)

Samm: protsessi määratlemine I: OSM -faili allalaadimine

Protsessi määratlemine I: OSM -faili allalaadimine
Protsessi määratlemine I: OSM -faili allalaadimine

Kui ma seda projekti esimest korda alustasin, oli kõige silmatorkavam küsimus: "kust ma saan kaardiandmeid saada?" Loomulikult, nagu arvata võis, mõtlesin kohe Google Mapsi peale. Pärast olulist uurimistööd avastasin, et Google tõesti ei taha, et inimesed mängiksid oma andmetega loomingulises mõttes või muul viisil. Tegelikult keelavad nad selgesõnaliselt Google Mapsis veebi kraapimise.

Õnneks oli mu meeleheide pärast OpenStreetMapi (OSM) avastamist lühiajaline. OSM on koostööprojekt, millesse kaasatakse andmeid üle kogu maailma. OSM lubab selgesõnaliselt kasutada oma andmeid avatud lähtekoodiga tarkvara nimel. Sellisena algab OSM -i veebisaidi külastamine kaardi stiliseerimise teekond.

Pärast OSM -i veebisaidile jõudmist klõpsake kaardi eksportimise tööriistade kuvamiseks vahekaarti „Eksport”. Nüüd suurendage, et vaadata piirkonda, millega soovite kaardiandmeid koguda. Valige link "Valige käsitsi teine piirkond", mis avab teie ekraanil kasti. Kuju ja asetage see kast huvipakkuva piirkonna kohale. Kui olete rahul, klõpsake OSM -andmefaili allalaadimiseks nuppu "Ekspordi".

Märkus 1: Kui teie valitud piirkond sisaldab liiga palju andmeid, kuvatakse tõrge, et olete valinud liiga palju sõlme. Kui see juhtub teiega, klõpsake suurema faili allalaadimiseks nuppu "Overpass API".

Märkus nr 2: Kui teie allalaaditud OSM -fail on suurem kui 30 MB, aeglustub minu kirjutatud Pythoni programm märgatavalt. Kui olete otsustanud kasutada suurt piirkonda, kaaluge skripti kirjutamist, et visata ära üleliigsed andmed, mida te ei plaani joonistada.

2. etapp: protsessi määratlemine II: andmete mõistmine

Protsessi määratlemine II: andmete mõistmine
Protsessi määratlemine II: andmete mõistmine
Protsessi määratlemine II: andmete mõistmine
Protsessi määratlemine II: andmete mõistmine
Protsessi määratlemine II: andmete mõistmine
Protsessi määratlemine II: andmete mõistmine
Protsessi määratlemine II: andmete mõistmine
Protsessi määratlemine II: andmete mõistmine

"Mul on andmed … mis nüüd?"

Alustuseks avage allalaaditud OSM -fail oma lemmikteksti redigeerimistarkvarasse. Esmalt märkate, et see on XML -fail, mis on suurepärane! XML -i on piisavalt lihtne analüüsida. Faili algus peaks välja nägema peaaegu identne selle sammu esimese pildiga - loetletakse mõned põhilised metaandmed ja geograafilised piirid.

Faili kerides märkate kolme kasutatud andmeelementi:

  1. Sõlmed
  2. Viisid
  3. Suhted

Kõige elementaarsem andmeelement, sõlmega on lihtsalt seotud kordumatu identifikaator, laius- ja pikkuskraadid. Loomulikult on täiendavaid metaandmeid, kuid saame need ohutult ära visata.

Viisid on sõlmede kogumid. Tee saab renderdada suletud kujundina või lahtise joonena. Viisid koosnevad sõlmede kogumist, mis on identifitseeritud nende kordumatu identifikaatori abil. Need on märgistatud võtmetega, mis määravad andmerühma, kuhu nad kuuluvad. Näiteks ülaltoodud kolmandal pildil kujutatud viis kuulub andmerühma "koht" ja selle alamrühma "saar". Teisisõnu, see konkreetne viis kuulub "saare" kihti "koha" rühma alla. Võimalustel on ka unikaalsed identifikaatorid.

Lõpuks on suhted viiside kogumid. Seos võib kujutada keerulist kuju, millel on augud või mitu piirkonda. Suhetel on ka kordumatu identifikaator ja need märgitakse sarnaselt viisidele.

Nende andmeelementide kohta saate rohkem lugeda OSM -i wikist:

  • Sõlmed
  • Viisid
  • Suhted

3. samm: protsessi määratlemine III: andmete kokkuvõtmine

Protsessi määratlemine III: andmete kokkuvõtmine
Protsessi määratlemine III: andmete kokkuvõtmine

Nüüd peaks teil olema vähemalt pealiskaudne arusaam OSM -faili moodustavatest andmeelementidest. Praegu oleme huvitatud OSM -i andmete lugemisest teie valitud keelt kasutades. Kuigi see samm on Pythoni-keskne, peaksite Pythonit mitte kasutama, kuid siiski lugege seda osa läbi, kuna see sisaldab mõningaid näpunäiteid.

Pakett xml on vaikimisi kaasas enamiku standardsete Pythoni distributsioonidega. Kasutame seda paketti meie OSM -faili väga lihtsaks parsimiseks, nagu on näidatud esimesel pildil. Ühe silmuse jaoks saate töödelda iga konkreetse andmeelemendi OSM -i andmete töötlemist.

Pildi viimasel real märkate, et kontrollin märgendit „piirid”. See samm on laius- ja pikkuskraadi väärtuste teisendamisel ekraanil piksliteks ülioluline. Soovitan tungivalt seda konversiooni käivitada OSM -faili laadimise ajal, kuna andmete massmuundamine on protsessimahukas.

Rääkides laius- ja pikkuskraadide teisendamisest ekraani koordinaatideks, siis siin on link minu kirjutatud arvutusfunktsioonile. Tõenäoliselt märkate laiuskraadi ekraani koordinaatideks teisendamisel midagi veidrat. Pikkuskraadiga võrreldes on sellega kaasas veel üks samm! Nagu selgub, modelleeritakse OSM-i andmed Pseudo-Mercatori projektsioonimeetodi abil. Õnneks on OSM -il siin selle teema kohta fantastiline dokumentatsioon ja need pakuvad laiuskraadide teisendamise funktsioone märkimisväärse arvu keelte jaoks. Vinge!

Märkus. Minu koodis on ekraani ülemine vasakpoolne nurk ekraani koordinaat (0, 0).

4. samm: Pythoni kaardi stiliseerija juurutamine

Python Map Stylizer rakendamine
Python Map Stylizer rakendamine
Python Map Stylizer rakendamine
Python Map Stylizer rakendamine
Python Map Stylizer rakendamine
Python Map Stylizer rakendamine

Siiani olen arutanud OSM -i andmefaili - mis see on, kuidas seda lugeda ja mida sellega teha. Nüüd arutlen tarkvara, mille kirjutasin stiililise kaardi visualiseerimisega tegelemiseks (GitHubi repo on sissejuhatuses).

Minu konkreetne rakendus keskendub renderdusvoo kasutaja kontrollile. Täpsemalt luban kasutajal valida kihid, mida nad tahavad näha ja kuidas nad soovivad seda kihti visualiseerida. Nagu ma varem lühidalt mainisin, on renderdatud kahte tüüpi elemente: täitmisüksused ja reaüksused. Täidised on määratletud ainult värviga, jooned aga värvi, joone laiuse, joone stiili, joone korgi stiili ja joone liitumisstiili järgi.

Kui kasutaja muudab kihtide stiile ja nähtavust, kajastuvad muudatused paremal asuval kaardividinal. Kui kasutaja on kaardi välimust enda jaoks rahuldavaks muutnud, saab ta kohandada kaardi maksimaalset mõõdet ja salvestada kaardi pildina oma arvutisse. Pildi salvestamisel salvestatakse ka kasutaja konfiguratsioonifail. See tagab, et kasutaja saab igal ajal konkreetse pildi loomiseks kasutatud konfiguratsiooni meelde tuletada ja uuesti kasutada.

5. samm: rakendamise puudused + lahendus

Rakenduse puudus + lahendus
Rakenduse puudus + lahendus
Rakenduse puudus + lahendus
Rakenduse puudus + lahendus

Kui ma esimest korda kaardi käsitsi stiliseerima hakkasin, sain aru, et see oli üsna tüütu protsess. Kasutajale maksimaalse kontrolli pakkumine võib saadaolevate "nuppude" suure arvu tõttu olla lihtsalt üle jõu käiv. Siiski on lihtne lahendus, mis hõlmab natuke täiendavat skriptimist.

Alustasin sellest, et teha kindlaks, millised kihid mind eriti huvitavad. Selle juhendamise eesmärgil oletame, et mind huvitavad kõige rohkem hooned (kõik), jõed, peamised maanteed ja pinnatänavad. Kirjutan skripti, kus loon konfiguratsiooni eksemplari, vahetan kihtide olekuid vastavalt funktsiooni setItemState () ja määratletud konstantide abil ning määran värvid vastavalt sellele, kuidas soovin, et minu kihid ilmuksid, kasutades setValue (). Saadud salvestatud konfiguratsioonifaili saab kopeerida konfiguratsioonikausta ja kasutaja laadida.

Skripti näide on ülaltoodud pildil. Teine pilt on näide sellest, kuidas abistaja funktsioonid välja näeksid, ja kuna need on põhimõtteliselt kõik identsed, lihtsalt erinevate konstantidega, lisasin ainult ühe näite pildi.

6. samm: parandamisvaldkonnad

Parandamise valdkonnad
Parandamise valdkonnad

Pärast oma tarkvara juurutamise üle mõtisklemist olen tuvastanud mitu valdkonda, mis oleksid energiatarbijatele kasulikud.

  1. Kihtide dünaamiline renderdamine. Praegu on mul etteantud kihtide loend, mis renderdatakse, see selleks. Osa põhjendustest oli raskused selle kindlaksmääramisel, kas kiht peaks olema joon või täitmine. Selle tulemusel tervitatakse teid peaaegu iga avatud OSM -faili korral hoiatustega kihtide kohta, mida ei renderdata. Sageli on need nii minimaalsed, et see pole probleem, kuid kindlasti puuduvad kriitilised kihid. Kihtide dünaamiline renderdamine kaotaks need probleemid.
  2. Dünaamilise kihi määramine. See käib käsikäes #1-ga; kui soovite dünaamilise kihi renderdamist, vajate dünaamilise kihi määramist (st täitekihi ja joone kihi tuvastamist). Seda on mõistlikult võimalik saavutada, nagu olen õppinud, sest teed, mille esimene ja viimane sõlm on samad, on suletud teed ja seetõttu täidetakse.
  3. Värvirühmad. Stiliseeritud kaardil on sageli mitu sama stiiliga kihti ja kui kasutajal oleks võimalik korraga muuta grupi stiili, väheneks tunduvalt kasutaja aeg ükshaaval redigeerimiseks.

7. samm: mõtete sulgemine

Lõppmõtted
Lõppmõtted
Lõppmõtted
Lõppmõtted
Lõppmõtted
Lõppmõtted

Tänan kõiki, kes leidsid aega minu juhendamise lugemiseks. See projekt kujutab endast mitmetunnise uurimistöö, projekteerimise, programmeerimise ja silumise kulminatsiooni. Loodan, et olen suutnud pakkuda stardiplatvormi, millest saate oma projekti üles ehitada või juba kirjutatule tugineda. Loodan ka, et minu puudused ja näpunäited pakuvad teie kujundamisel palju punkte. Kui teil on vähem kavatsusi programmeerida ja rohkem kunstiteoseid luua, siis tahaksin näha, mida te kommentaarides teete! Võimalusi on lõputult!

Eriline tänu OpenStreetMapi toetajatele! Sellised projektid poleks võimalikud ilma nende oluliste pingutusteta.

Palun andke mulle teada, kui teil on kommentaarides küsimusi!

Kaartide väljakutse
Kaartide väljakutse
Kaartide väljakutse
Kaartide väljakutse

Kaardiväljakutse teine koht

Soovitan: