Turinys:
- Prekės
- 1 žingsnis: I proceso apibrėžimas: OSM failo atsisiuntimas
- 2 žingsnis: II proceso apibrėžimas: duomenų supratimas
- 3 veiksmas: III proceso apibrėžimas: duomenų apdorojimas
- 4 žingsnis: „Python Map Stylizer“diegimas
- 5 žingsnis: diegimo trūkumas + sprendimas
- 6 žingsnis: tobulinimo sritys
- 7 žingsnis: uždarykite mintis
Video: Kaip sukurti pasirinktinius stilizuotus žemėlapius naudojant „OpenStreetMap“: 7 žingsniai (su paveikslėliais)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:45
Šioje pamokoje aprašysiu procesą, kurio metu galite sukurti savo individualius stilizuotus žemėlapius. Stilizuotas žemėlapis yra žemėlapis, kuriame vartotojas gali nurodyti, kurie duomenų sluoksniai yra vizualizuojami, taip pat apibrėžti kiekvieno sluoksnio vizualizavimo stilių. Pirmiausia aprašysiu procesą, per kurį galite parašyti programinę įrangą, skirtą stilizuoti žemėlapius, o po to - „Python“programinės įrangos, kurią parašiau šiai užduočiai atlikti, pavyzdį.
Šiame vaizdo įraše parodyta, kaip aš asmeniškai kuriu stilizuotus žemėlapius, bet toliau skaitykite intymias detales. Labai džiaugiuosi matydamas, ką sukuria bendruomenė!
Kokia mano motyvacija už šio projekto?
Atvirai kalbant, pradėjau šį projektą, nes maniau, kad tai bus smagu. Ši mintis mano galvoje sukosi per pastaruosius metus ir pagaliau skyriau laiko, kurio man prireikė, kad ją įgyvendinčiau. Po dienos prototipų su kai kuriais pagrindiniais scenarijais galėjau pasiekti nepaprastai daug žadančių rezultatų - tokių daug žadančių, kad žinojau, jog turiu įforminti savo scenarijus taip, kad kiti galėtų lengvai sukurti savo kūrinius.
Mano motyvacija rašyti šią pamoką yra dėl to, kad radau labai minimalią informaciją apie tai, kaip nuo pat pradžių sukurti savo stilizuotus žemėlapius. Tikiuosi, kad pasidalysiu su visuomene tuo, ką išmokau.
Ištekliai/nuorodos:
- „OpenStreetMap“
- „OpenStreetMap Legalese“
- „Github“saugykla
Prekės
- „Python“paskirstymas (naudojau „Anaconda“ir „Python 3.6“)
- PyQt5 (GUI priklausomybėms)
1 žingsnis: I proceso apibrėžimas: OSM failo atsisiuntimas
Kai pirmą kartą pradėjau šį projektą, ryškiausias klausimas buvo „kur galiu gauti žemėlapio duomenis“. Žinoma, kaip ir tikėjotės, iškart pagalvojau apie „Google“žemėlapius. Po rimtų tyrimų sužinojau, kad „Google“tikrai nenori, kad žmonės, žaidžiantys su jų duomenimis, kūrybine prasme ar kitaip. Tiesą sakant, jie aiškiai neleidžia naršyti žiniatinklio iš „Google“žemėlapių.
Laimei, mano neviltis buvo trumpalaikė, kai atradau „OpenStreetMap“(OSM). OSM yra bendradarbiavimo projektas, kuriame dalyvauja žmonės iš viso pasaulio ir teikia duomenis. OSM aiškiai leidžia atvirai naudoti savo duomenis atvirojo kodo programinės įrangos vardu. Apsilankymas OSM tinklalapyje prasideda žemėlapio stilizavimo kelione.
Atvykę į OSM svetainę, spustelėkite skirtuką „Eksportuoti“, kad pamatytumėte žemėlapio eksportavimo įrankius. Dabar priartinkite, kad peržiūrėtumėte regioną, kuriame norite rinkti žemėlapio duomenis. Pasirinkite nuorodą „Rankiniu būdu pasirinkti kitą sritį“, kuri ekrane parodys langelį. Suformuokite ir padėkite šį langelį virš dominančio regiono. Kai būsite patenkinti, spustelėkite mygtuką „Eksportuoti“, kad atsisiųstumėte OSM duomenų failą.
1 pastaba: jei pasirinktame regione yra per daug duomenų, gausite klaidą, kad pasirinkote per daug mazgų. Jei taip atsitiks jums, spustelėkite mygtuką „Overpass API“, kad atsisiųstumėte didesnį failą.
2 pastaba: jei atsisiųstas OSM failas yra didesnis nei 30 MB, mano parašyta „Python“programa pastebimai sulėtės. Jei esate pasiryžęs naudoti didelį regioną, apsvarstykite galimybę parašyti scenarijų, kad pašalintumėte nereikalingus duomenis, kurių neplanuojate piešti.
2 žingsnis: II proceso apibrėžimas: duomenų supratimas
"Aš turiu duomenis … o kas dabar?"
Pradėkite atidarę atsisiųstą OSM failą į savo mėgstamą teksto redagavimo programinę įrangą. Pirmiausia pastebėsite, kad tai yra XML failas, o tai puiku! XML yra pakankamai lengva išanalizuoti. Jūsų failo pradžia turėtų atrodyti beveik identiška pirmajam šio veiksmo paveikslėliui - bus išvardyti kai kurie pagrindiniai metaduomenys ir geografinės ribos.
Slinkdami failą pastebėsite tris naudojamus duomenų elementus:
- Mazgai
- Būdai
- Santykiai
Pats paprasčiausias duomenų elementas - mazgas tiesiog turi unikalų identifikatorių, platumą ir ilgumą. Žinoma, yra papildomų metaduomenų, tačiau galime juos saugiai atmesti.
Būdai yra mazgų kolekcijos. Būdas gali būti pateiktas kaip uždara figūra arba kaip atviroji linija. Būdus sudaro mazgų rinkinys, identifikuojamas pagal jų unikalų identifikatorių. Jie pažymėti raktais, kurie apibrėžia duomenų grupę, kuriai jie priklauso. Pavyzdžiui, trečiame paveikslėlyje pavaizduotas būdas priklauso duomenų grupei „vieta“ir jos pogrupiui „sala“. Kitaip tariant, šis ypatingas būdas priklauso „salos“sluoksniui po „vietos“grupe. Būdai taip pat turi unikalius identifikatorius.
Galiausiai, santykiai yra kelių rinkiniai. Ryšys gali būti sudėtinga forma su skylėmis arba su keliais regionais. Santykiai taip pat turės unikalų identifikatorių ir bus pažymėti panašiai kaip būdai.
Daugiau apie šiuos duomenų elementus galite perskaityti OSM wiki:
- Mazgai
- Būdai
- Santykiai
3 veiksmas: III proceso apibrėžimas: duomenų apdorojimas
Dabar turėtumėte bent paviršutiniškai suprasti duomenų elementus, sudarančius OSM failą. Šiuo metu mums įdomu skaityti OSM duomenis jūsų pasirinkta kalba. Nors šis žingsnis yra orientuotas į „Python“, jei nenorite naudoti „Python“, vis tiek turėtumėte perskaityti šią dalį, nes joje yra keletas patarimų ir gudrybių.
„Xml“paketas pagal numatytuosius nustatymus įtrauktas į daugumą standartinių „Python“paskirstymų. Šį paketą naudosime labai lengvai išanalizuoti mūsų OSM failą, kaip parodyta pirmame paveikslėlyje. Viename cikle galite apdoroti kiekvieno konkretaus duomenų elemento OSM duomenų tvarkymą.
Paskutinėje vaizdo eilutėje pastebėsite, kad tikrinu „ribų“žymą. Šis žingsnis yra gyvybiškai svarbus paverčiant platumos ir ilgumos vertes į ekrano pikselius. Aš labai rekomenduoju atlikti šią konversiją tuo metu, kai įkeliate OSM failą, nes masinis duomenų konvertavimas yra daug proceso reikalaujantis procesas.
Kalbant apie platumos ir ilgumos konvertavimą į ekrano koordinates, čia yra nuoroda į mano parašytą skaičiavimo funkciją. Tikriausiai pastebėsite kažką šiek tiek keisto, konvertuodami platumą į ekrano koordinates. Yra dar vienas žingsnis, palyginti su ilguma! Kaip paaiškėja, OSM duomenys modeliuojami naudojant „Pseudo-Mercator“projekcijos metodą. Laimei, OSM turi fantastišką dokumentaciją šia tema ir teikia platumos konvertavimo funkcijas daugeliui kalbų. Nuostabu!
Pastaba: mano kode ekrano koordinatė (0, 0) yra viršutinis kairysis ekrano kampas.
4 žingsnis: „Python Map Stylizer“diegimas
Iki šiol aptariau OSM duomenų failą - kas tai yra, kaip jį skaityti ir ką su juo daryti. Dabar aptarsiu programinę įrangą, kurią parašiau stilistinio žemėlapio vizualizavimui („GitHub“repo pateikta įžangoje).
Mano specifinis diegimas sutelktas į tai, kaip vartotojas valdo atvaizdavimo srautą. Tiksliau, aš leidžiu vartotojui pasirinkti sluoksnius, kuriuos jie nori matyti, ir kaip jie nori, kad tas sluoksnis būtų vizualizuotas. Kaip trumpai minėjau anksčiau, yra dviejų pateiktų elementų klasių: užpildyti elementai ir eilutės elementai. Užpildai apibrėžiami tik spalva, o linijos - spalva, linijos plotis, linijos stilius, linijos dangtelio stilius ir linijos sujungimo stilius.
Kai vartotojas keičia sluoksnių stilius ir matomumą, pakeitimai atsispindi žemėlapio valdiklyje dešinėje. Kai vartotojas patikslino žemėlapio išvaizdą, jis gali koreguoti maksimalų žemėlapio matmenį ir išsaugoti žemėlapį kaip vaizdą savo kompiuteryje. Išsaugojant vaizdą taip pat bus išsaugotas vartotojo konfigūracijos failas. Tai užtikrina, kad vartotojas bet kuriuo metu gali prisiminti ir pakartotinai naudoti konfigūraciją, kurią jis naudojo kurdamas tam tikrą vaizdą.
5 žingsnis: diegimo trūkumas + sprendimas
Kai pirmą kartą pradėjau stilizuoti žemėlapį rankiniu būdu, sužinojau, kad tai gana varginantis procesas. Siūlyti maksimalų valdymą vartotojui gali būti tiesiog nepaprastai daug dėl galimų „rankenėlių“. Tačiau yra paprastas sprendimas, apimantis šiek tiek papildomų scenarijų.
Pradėjau išsiaiškinti, kurie sluoksniai mane ypač domina. Kad tai būtų naudinga, tarkime, mane labiausiai domina pastatai (visi), upės, pagrindiniai greitkeliai ir paviršinės gatvės. Aš parašyčiau scenarijų, kuriame sukurčiau konfigūracijos egzempliorių, tinkamai perjungčiau sluoksnių būsenas, naudodamas funkciją setItemState () ir apibrėžtas konstantas, ir nustatyčiau spalvas pagal tai, kaip norėčiau, kad mano sluoksniai būtų rodomi naudojant setValue (). Gautą išsaugotą konfigūracijos failą galima nukopijuoti į konfigūracijų aplanką ir įkelti vartotojas.
Scenarijaus pavyzdys yra aukščiau esančiame paveikslėlyje. Antrasis vaizdas yra pavyzdys, kaip atrodytų pagalbinės funkcijos, ir kadangi jos iš esmės yra identiškos, tik su skirtingomis konstantomis, įtraukiau tik vieno pavyzdžio paveikslėlį.
6 žingsnis: tobulinimo sritys
Apmąstęs savo programinės įrangos diegimą, nustatiau kelias sritis, kurios būtų naudingos patobulinimams energijos vartotojams.
- Dinaminis sluoksnio atvaizdavimas. Šiuo metu turiu iš anksto apibrėžtą sluoksnių, kurie bus pateikti, sąrašą, viskas. Dalis pateisinimo buvo sunku nustatyti, ar sluoksnis turi būti linija, ar užpildas. Dėl to beveik kiekvieną atidarytą OSM failą gausite įspėjimų apie sluoksnius, kurie nebus perteikti. Dažnai jie yra tokie minimalūs, kad tai nėra problema, tačiau trūksta kritinių sluoksnių. Dinaminis sluoksnio atvaizdavimas pašalintų šias problemas.
- Dinaminio sluoksnio priskyrimas. Tai eina koja kojon su #1; jei norite dinaminio sluoksnio atvaizdavimo, jums reikia dinaminio sluoksnio priskyrimo (t. y. nustatyti užpildymo sluoksnį, palyginti su linijos sluoksniu). Kaip supratau, tai būtų galima pagrįstai įvykdyti, nes būdai, kurių pirmasis ir paskutinis mazgas yra vienodi, bus uždaryti keliai ir todėl užpildyti.
- Spalvų grupės. Stilizuotame žemėlapyje dažnai yra keli to paties stiliaus sluoksniai, o tai, kad vartotojas galėtų vienu metu keisti grupės stilių, žymiai sutrumpintų naudotojo laiką po vieną redaguojant sluoksnius.
7 žingsnis: uždarykite mintis
Dėkoju visiems, kad skyrėte laiko perskaityti mano instrukciją. Šis projektas yra daugelio valandų tyrimų, projektavimo, programavimo ir derinimo kulminacija. Tikiuosi, kad man pavyko pateikti paleidimo planą, iš kurio galėsite kurti savo projektą arba remtis tuo, ką jau parašiau. Taip pat tikiuosi, kad mano trūkumai ir patarimai suteiks daug dalykų, į kuriuos reikia atsižvelgti kuriant dizainą. Jei esate mažiau linkę programuoti ir labiau linkę kurti meno kūrinius, norėčiau pamatyti, ką jūs darote komentaruose! Galimybės beribės!
Ypatingas ačiū „OpenStreetMap“bendradarbiams! Tokie projektai būtų neįmanomi be didelių pastangų.
Praneškite man, jei turite klausimų komentaruose!
Antroji vieta Žemėlapių iššūkyje
Rekomenduojamas:
Kaip padidinti bitų žemėlapius „Eagle“: 8 žingsniai (su paveikslėliais)
Kaip maksimaliai padidinti bitų žemėlapius „Eagle“: Profesionalių plokščių gamybos išlaidos vis pigesnės, atrodo, kad dabar yra puikus laikas pereiti prie PCB dizaino. Internetinės bendruomenės padeda išlyginti stačias programinės įrangos mokymosi kreives ir pateikia daugybę schemų
Kaip sukurti pasirinktinius garsiakalbius: 25 žingsniai (su nuotraukomis)
Kaip sukurti pasirinktinius garsiakalbius: savo individualių garsiakalbių kūrimas turi būti viena iš labiausiai naudingų, paprastų ir ekonomiškai naudingų „pasidaryk pats“veiklų. Esu visiškai sukrėstas, kad jis nebuvo labiau įtrauktas į „Instructables“ir bendruomenę … na
Kaip sukurti pasirinktinius „Xbox“švytėjimo garsiakalbius: 18 žingsnių (su paveikslėliais)
Kaip sukurti pasirinktinius „Xbox“švytėjimo garsiakalbius: „Speaker Build“, kurį teikia „123Toid“- https://www.youtube.com/user/123Toid
Kaip sukurti autonominį krepšinio žaidimo robotą, naudojant „IRobot“, sukurti kaip pagrindą: 7 žingsniai (su paveikslėliais)
Kaip sukurti autonominį krepšinio žaidimo robotą naudojant „IRobot“sukurti kaip pagrindą: tai mano įrašas, skirtas iššūkiui „iRobot Create“. Sunkiausia viso šio proceso dalis buvo nuspręsti, ką robotas ketina daryti. Norėjau pademonstruoti puikias „Create“savybes, kartu pridėdamas šiek tiek robo nuojautos. Visas mano
Kaip sukurti pasirinktinius šriftus: 6 žingsniai
Kaip sukurti pasirinktinius šriftus: sveiki pagrindiniai draugai. Aš tai darau visiems, bet ypač jums. Čia yra keletas šriftų kūrimo instrukcijų, tačiau nė viena iš jų nėra labai kokybiška. Aš turiu galvoje, jie veikia puikiai, bet gatavas produktas yra neramus. aš naudosiu