Turinys:

Kaip sukurti pasirinktinius stilizuotus žemėlapius naudojant „OpenStreetMap“: 7 žingsniai (su paveikslėliais)
Kaip sukurti pasirinktinius stilizuotus žemėlapius naudojant „OpenStreetMap“: 7 žingsniai (su paveikslėliais)

Video: Kaip sukurti pasirinktinius stilizuotus žemėlapius naudojant „OpenStreetMap“: 7 žingsniai (su paveikslėliais)

Video: Kaip sukurti pasirinktinius stilizuotus žemėlapius naudojant „OpenStreetMap“: 7 žingsniai (su paveikslėliais)
Video: Kaip sukurti internetinę svetainę nemokamai 2024, Birželis
Anonim
Kaip sukurti pasirinktinius stilizuotus žemėlapius naudojant „OpenStreetMap“
Kaip sukurti pasirinktinius stilizuotus žemėlapius naudojant „OpenStreetMap“

Š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

I proceso apibrėžimas: OSM failo atsisiuntimas
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

II proceso apibrėžimas: duomenų supratimas
II proceso apibrėžimas: duomenų supratimas
II proceso apibrėžimas: duomenų supratimas
II proceso apibrėžimas: duomenų supratimas
II proceso apibrėžimas: duomenų supratimas
II proceso apibrėžimas: duomenų supratimas
II proceso apibrėžimas: duomenų supratimas
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:

  1. Mazgai
  2. Būdai
  3. 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

III proceso apibrėžimas: duomenų apdorojimas
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

„Python Map Stylizer“diegimas
„Python Map Stylizer“diegimas
„Python Map Stylizer“diegimas
„Python Map Stylizer“diegimas
„Python Map Stylizer“diegimas
„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

Įgyvendinimo trūkumas + sprendimas
Įgyvendinimo trūkumas + sprendimas
Įgyvendinimo trūkumas + sprendimas
Įgyvendinimo 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

Tobulinimo sritys
Tobulinimo sritys

Apmąstęs savo programinės įrangos diegimą, nustatiau kelias sritis, kurios būtų naudingos patobulinimams energijos vartotojams.

  1. 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.
  2. 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.
  3. 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

Uždarymo mintys
Uždarymo mintys
Uždarymo mintys
Uždarymo mintys
Uždarymo mintys
Uždarymo mintys

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!

Žemėlapių iššūkis
Žemėlapių iššūkis
Žemėlapių iššūkis
Žemėlapių iššūkis

Antroji vieta Žemėlapių iššūkyje

Rekomenduojamas: