Satura rādītājs:

Kā izveidot pielāgotas stilizētas kartes, izmantojot OpenStreetMap: 7 soļi (ar attēliem)
Kā izveidot pielāgotas stilizētas kartes, izmantojot OpenStreetMap: 7 soļi (ar attēliem)

Video: Kā izveidot pielāgotas stilizētas kartes, izmantojot OpenStreetMap: 7 soļi (ar attēliem)

Video: Kā izveidot pielāgotas stilizētas kartes, izmantojot OpenStreetMap: 7 soļi (ar attēliem)
Video: 40 эпических ролевых игр в стиле Souls для ПК всех времен 2024, Jūlijs
Anonim
Kā izveidot pielāgotas stilizētas kartes, izmantojot OpenStreetMap
Kā izveidot pielāgotas stilizētas kartes, izmantojot OpenStreetMap

Šajā pamācībā es aprakstīšu procesu, ar kura palīdzību jūs varat izveidot savas pielāgotas stilizētas kartes. Stilizēta karte ir karte, kurā lietotājs var norādīt, kuri datu slāņi tiek vizualizēti, kā arī definēt stilu, ar kādu katrs slānis tiek vizualizēts. Vispirms es aprakstīšu procesu, ar kura palīdzību jūs varat rakstīt programmatūru, lai stilizētu kartes, un sekošu Python programmatūras paraugam, ko es uzrakstīju, lai veiktu šo uzdevumu.

Šis video parāda, kā es personīgi ģenerēju stilizētas kartes, bet turpinu lasīt intīmās detaļas. Es ļoti priecājos redzēt, ko rada sabiedrība!

Kāda ir mana motivācija šim projektam?

Atklāti sakot, es sāku šo projektu, jo domāju, ka tas būtu jautri. Šī ideja manā galvā virmoja pēdējā gada laikā, un es beidzot veltīju laiku, kas vajadzīgs, lai to īstenotu. Pēc dienas prototipēšanas ar dažiem pamata skriptiem es varēju radīt ārkārtīgi daudzsološus rezultātus - tik daudzsološus, ka zināju, ka man ir jāformalizē savi skripti, lai citi varētu viegli izveidot savus darbus.

Mana motivācija rakstīt šo pamācību ir saistīta ar faktu, ka es atradu ļoti minimālu informāciju par to, kā no jauna izveidot savas stilizētās kartes. Es ceru dalīties ar sabiedrību ar to, ko esmu iemācījies.

Resursi/saites:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Github krātuve

Piegādes

  • Python izplatīšana (es izmantoju Anaconda un Python 3.6)
  • PyQt5 (GUI atkarībām)

1. darbība: I procesa definēšana: OSM faila lejupielāde

I procesa definēšana: OSM faila lejupielāde
I procesa definēšana: OSM faila lejupielāde

Kad es pirmo reizi sāku šo projektu, visspilgtākais jautājums bija "kur es varu iegūt kartes datus". Protams, kā jūs gaidījāt, es uzreiz domāju par Google Maps. Pēc būtiskiem pētījumiem es atklāju, ka Google patiešām nevēlas, lai cilvēki radošā nozīmē vai citādi spēlējas ar saviem datiem. Faktiski tie nepārprotami neatļauj tīmekļa skrāpēšanu no Google Maps.

Par laimi, mans izmisums bija īslaicīgs, atklājot OpenStreetMap (OSM). OSM ir sadarbības projekts, kurā iesaistīti cilvēki visā pasaulē, kas sniedz datus. OSM nepārprotami atļauj savu datu atklātu izmantošanu atvērtā pirmkoda programmatūras vārdā. Tādējādi kartes stilizācijas ceļojums sākas, apmeklējot OSM tīmekļa vietni.

Pēc ierašanās OSM vietnē noklikšķiniet uz cilnes Eksportēt, lai parādītu karšu eksportēšanas rīkus. Tagad tuviniet, lai skatītu reģionu, kurā vēlaties apkopot kartes datus. Atlasiet saiti “Manuāli izvēlēties citu apgabalu”, kas ekrānā parādīs lodziņu. Veidojiet un ievietojiet šo lodziņu virs interesējošā reģiona. Kad esat apmierināts, noklikšķiniet uz pogas Eksportēt, lai lejupielādētu OSM datu failu.

1. piezīme. Ja atlasītajā reģionā ir pārāk daudz datu, tiks parādīts kļūdas ziņojums, ka esat atlasījis pārāk daudz mezglu. Ja tas notiek ar jums, noklikšķiniet uz pogas "Overpass API", lai lejupielādētu lielāku failu.

2. piezīme. Ja lejupielādētais OSM fails ir lielāks par 30 MB, manis rakstītā Python programma ievērojami palēnināsies. Ja esat apņēmies izmantot lielu reģionu, apsveriet iespēju uzrakstīt skriptu, lai izmestu liekos datus, kurus neplānojat zīmēt.

2. darbība. II procesa definēšana: datu izpratne

II procesa definēšana: izpratne par datiem
II procesa definēšana: izpratne par datiem
II procesa definēšana: izpratne par datiem
II procesa definēšana: izpratne par datiem
II procesa definēšana: izpratne par datiem
II procesa definēšana: izpratne par datiem
II procesa definēšana: izpratne par datiem
II procesa definēšana: izpratne par datiem

"Man ir dati … tagad ko?"

Sāciet, atverot lejupielādēto OSM failu savā iecienītākajā teksta rediģēšanas programmatūrā. Vispirms pamanīsit, ka tas ir XML fails, kas ir lieliski! XML ir pietiekami viegli parsējams. Faila sākumam vajadzētu izskatīties gandrīz identiski šī soļa pirmajam attēlam - tiks parādīti daži pamata metadati un ģeogrāfiskās robežas.

Ritinot failu, jūs pamanīsit trīs izmantotos datu elementus:

  1. Mezgli
  2. Veidi
  3. Attiecības

Visvienkāršākais datu elements - mezglam vienkārši ir saistīts unikāls identifikators, platums un garums. Protams, ir papildu metadati, taču mēs varam tos droši izmest.

Veidi ir mezglu kolekcijas. Veidu var attēlot kā slēgtu formu vai kā atvērtu līniju. Veidi sastāv no mezglu kolekcijas, kas identificēti pēc to unikālā identifikatora. Tie ir marķēti ar atslēgām, kas nosaka datu grupu, kurai tie pieder. Piemēram, trešajā attēlā redzamais veids pieder datu grupai "vieta" un tās apakšgrupai "sala". Citiem vārdiem sakot, šis konkrētais veids pieder pie "salas" slāņa zem "vietas" grupas. Veidiem ir arī unikāli identifikatori.

Visbeidzot, attiecības ir veidu kolekcijas. Attiecības var attēlot sarežģītu formu ar caurumiem vai ar vairākiem reģioniem. Attiecībām būs arī unikāls identifikators, un tās tiks marķētas līdzīgi veidiem.

Vairāk par šiem datu elementiem varat lasīt OSM wiki:

  • Mezgli
  • Veidi
  • Attiecības

3. darbība: III procesa definēšana: datu apkopošana

III procesa definēšana: datu apkopošana
III procesa definēšana: datu apkopošana

Tagad jums vajadzētu būt vismaz virspusējai izpratnei par datu elementiem, kas veido OSM failu. Šobrīd mēs esam ieinteresēti lasīt OSM datus, izmantojot jūsu izvēlēto valodu. Lai gan šis solis ir orientēts uz Python, ja nevēlaties izmantot Python, tomēr izlasiet šo daļu, jo tajā ir daži padomi un ieteikumi.

Xml pakotne pēc noklusējuma ir iekļauta lielākajā daļā standarta Python izplatījumu. Mēs izmantosim šo pakotni, lai ļoti viegli parsētu mūsu OSM failu, kā parādīts pirmajā attēlā. Vienā cilpā varat apstrādāt OSM datu apstrādi katram konkrētam datu elementam.

Attēla pēdējā rindā pamanīsit, ka es pārbaudu tagu “robežas”. Šis solis ir vitāli svarīgs, lai ekrāna platuma un garuma vērtības pārvērstu pikseļos. Es ļoti iesaku palaist šo reklāmguvumu laikā, kad ielādējat OSM failu, jo datu masveida pārveidošana ir process.

Runājot par platuma un garuma pārvēršanu ekrāna koordinātās, šeit ir saite uz manis rakstīto skaitļošanas funkciju. Pārvēršot platumu par ekrāna koordinātām, jūs, iespējams, pamanīsit kaut ko mazliet dīvainu. Salīdzinot ar garumu, ir nepieciešams papildu solis! Kā izrādās, OSM dati tiek modelēti, izmantojot Pseudo-Mercator projekcijas metodi. Par laimi, OSM šeit ir fantastiska dokumentācija par šo tēmu, un tie nodrošina platuma konvertēšanas funkcijas ievērojamam skaitam valodu. Satriecošs!

Piezīme. Manā kodā ekrāna koordināta (0, 0) ir ekrāna augšējais kreisais stūris.

4. solis: Python kartes stilizatora ieviešana

Python kartes stilizatora ieviešana
Python kartes stilizatora ieviešana
Python kartes stilizatora ieviešana
Python kartes stilizatora ieviešana
Python kartes stilizatora ieviešana
Python kartes stilizatora ieviešana

Līdz šim esmu apspriedis OSM datu failu - kas tas ir, kā to lasīt un ko ar to darīt. Tagad es apspriedīšu programmatūru, kuru es uzrakstīju, lai risinātu stilistisko karšu vizualizāciju (ievadā sniegtais GitHub repo).

Mana īpašā ieviešana ir vērsta uz to, kā lietotājs kontrolē atveidošanas cauruļvadu. Konkrēti, es atļauju lietotājam izvēlēties slāņus, kurus viņi vēlas redzēt, un kā viņi vēlas, lai šis slānis tiktu vizualizēts. Kā es īsumā minēju iepriekš, ir divas atveidoto elementu klases: aizpildāmie elementi un rindas elementi. Aizpildījumus definē tikai krāsa, bet līnijas nosaka krāsa, līnijas platums, līnijas stils, līnijas vāciņa stils un līnijas savienošanas stils.

Kad lietotājs veic izmaiņas slāņu stilos un redzamībā, izmaiņas tiek atspoguļotas kartes logrīkā pa labi. Kad lietotājs ir izmainījis kartes izskatu, viņš var pielāgot maksimālo kartes izmēru un saglabāt karti kā attēlu savā datorā. Saglabājot attēlu, tiks saglabāts arī lietotāja konfigurācijas fails. Tas nodrošina, ka lietotājs jebkurā laikā var atsaukt un atkārtoti izmantot konfigurāciju, ko viņš izmantoja konkrēta attēla ģenerēšanai.

5. darbība: ieviešanas trūkums + risinājums

Īstenošanas trūkums + risinājums
Īstenošanas trūkums + risinājums
Īstenošanas trūkums + risinājums
Īstenošanas trūkums + risinājums

Kad es pirmo reizi sāku stilizēt karti manuāli, es uzzināju, ka tas ir diezgan garlaicīgs process. Maksimālās kontroles piedāvāšana lietotājam var būt vienkārši satriecoša, jo ir pieejams daudz pieejamo "kloķu". Tomēr ir vienkāršs risinājums, kas ietver nedaudz papildu skriptu.

Sākumā noskaidroju, kuri slāņi mani īpaši interesē. Šajā pamācībā pieņemsim, ka mani visvairāk interesē ēkas (visas), upes, galvenās automaģistrāles un virszemes ielas. Es uzrakstītu skriptu, kurā izveidoju konfigurācijas gadījumu, atbilstoši pārslēdzu slāņu stāvokļus, izmantojot funkciju setItemState () un definētās konstantes, un iestatītu krāsas, pamatojoties uz to, kā es vēlētos, lai mani slāņi tiktu parādīti, izmantojot setValue (). Iegūto konfigurācijas failu, kas tiek saglabāts, var nokopēt mapē configs un lietotājs to ielādēt.

Skripta piemērs ir attēlā iepriekš. Otrais attēls ir paraugs tam, kā izskatītos palīga funkcijas, un, tā kā tās būtībā ir visas identiskas, tikai ar dažādām konstantēm, es iekļāvu tikai viena piemēra attēlu.

6. solis: uzlabošanas jomas

Uzlabošanas jomas
Uzlabošanas jomas

Pēc pārdomām par savu programmatūras ieviešanu esmu identificējis vairākas jomas, kas būtu noderīgi uzlabojumi enerģijas lietotājiem.

  1. Dinamiska slāņa atveidošana. Pašlaik man ir iepriekš noteikts slāņu saraksts, kas tiks atveidots, tas arī viss. Daļa no pamatojuma bija grūtības noteikt, vai slānim jābūt līnijai vai aizpildījumam. Tā rezultātā ar gandrīz katru atvērto OSM failu jūs saņemsit virkni brīdinājumu par slāņiem, kas netiks atveidoti. Bieži vien tie ir tik minimāli, ka tā nav problēma, taču noteikti trūkst kritisku slāņu. Dinamiskā slāņa atveidošana novērstu šīs bažas.
  2. Dinamiskā slāņa piešķiršana. Tas iet roku rokā ar #1; ja vēlaties dinamisko slāņu renderēšanu, jums ir nepieciešams dinamiskā slāņa piešķiršana (t.i., jāidentificē aizpildījuma slānis pret līnijas slāni). To varētu pamatoti paveikt, kā esmu uzzinājis, jo veidi, kuru pirmais un pēdējais mezgls ir vienādi, būs slēgti ceļi un tāpēc aizpildīti.
  3. Krāsu grupas. Stilizētai kartei bieži ir vairāki slāņi ar vienādu stilu, un, ja lietotājs vienlaikus varētu mainīt grupas stilu, tas ievērojami samazinātu lietotāja laiku, kas pavadīts slāņu rediģēšanā pa vienam.

7. solis: domu slēgšana

Noslēguma domas
Noslēguma domas
Noslēguma domas
Noslēguma domas
Noslēguma domas
Noslēguma domas

Paldies visiem, ka veltījāt laiku, lai izlasītu manu pamācību. Šis projekts ir vairāku stundu izpētes, projektēšanas, programmēšanas un atkļūdošanas kulminācija. Es ceru, ka man ir izdevies nodrošināt palaišanas paliktni, no kura jūs varat veidot savu projektu vai balstīties uz jau rakstīto. Es arī ceru, ka mani trūkumi un padomi sniedz daudz punktu, kas jāņem vērā jūsu dizainā. Ja jūs mazāk sliecaties uz programmu un vairāk tiecaties uz mākslas darbu radīšanu, es labprāt redzētu, ko jūs darāt komentāros! Iespējas ir bezgalīgas!

Īpašs paldies OpenStreetMap dalībniekiem! Šādi projekti nebūtu iespējami bez to ievērojamām pūlēm.

Lūdzu, dariet man zināmu, ja jums ir kādi jautājumi komentāros!

Maps izaicinājums
Maps izaicinājums
Maps izaicinājums
Maps izaicinājums

Otrā vieta Maps izaicinājumā

Ieteicams: