Sadržaj:

Kako izraditi prilagođene stilizirane karte pomoću OpenStreetMap -a: 7 koraka (sa slikama)
Kako izraditi prilagođene stilizirane karte pomoću OpenStreetMap -a: 7 koraka (sa slikama)

Video: Kako izraditi prilagođene stilizirane karte pomoću OpenStreetMap -a: 7 koraka (sa slikama)

Video: Kako izraditi prilagođene stilizirane karte pomoću OpenStreetMap -a: 7 koraka (sa slikama)
Video: Полный курс по Next js - Изучи Nextjs за 2 часа! | React SSR +таймкоды 2024, Srpanj
Anonim
Kako izraditi prilagođene stilizirane karte pomoću OpenStreetMap -a
Kako izraditi prilagođene stilizirane karte pomoću OpenStreetMap -a

U ovom uputstvu opisat ću postupak pomoću kojeg možete generirati vlastite prilagođene stilizirane karte. Stilizirana karta je karta na kojoj korisnik može odrediti koji se slojevi podataka vizualiziraju, kao i definirati stil kojim se svaki sloj vizualizira. Prvo ću opisati postupak kroz koji možete pisati softver za stiliziranje karata, a zatim slijedi primjer softvera Python koji sam napisao za izvršavanje ovog zadatka.

Sljedeći video naglašava kako ja osobno generiram stilizirane karte, ali nastavite čitati radi intimnih detalja. Jako sam uzbuđen što vidim što zajednica stvara!

Koja je moja motivacija iza ovog projekta?

Iskreno, započeo sam ovaj projekt jer sam mislio da bi to bilo zabavno. Ova ideja mi se vrzmala po glavi posljednjih godinu dana i konačno sam odvojio potrebno vrijeme da je ostvarim. Nakon dana prototipiranja s nekim osnovnim skriptama, uspio sam generirati izuzetno obećavajuće rezultate - toliko obećavajuće da sam znao da moram formalizirati svoje skripte tako da drugi lako mogu stvarati vlastite kreacije.

Moja motivacija za pisanje ovog uputstva je činjenica da sam pronašao vrlo minimalne informacije o tome kako stvoriti vlastite stilizirane karte od nule. Nadam se da ću naučeno podijeliti sa zajednicom.

Resursi/veze:

  • OpenStreetMap
  • OpenStreetMap Legalezijski
  • Github spremište

Pribor

  • Python distribucija (koristio sam Anacondu i Python 3.6)
  • PyQt5 (za ovisnosti o grafičkom sučelju)

Korak 1: Definiranje procesa I: Preuzimanje OSM datoteke

Definiranje procesa I: Preuzimanje OSM datoteke
Definiranje procesa I: Preuzimanje OSM datoteke

Kad sam tek započeo ovaj projekt, najočitije pitanje bilo je "gdje mogu dobiti podatke s karte". Naravno, kao što ste očekivali, odmah sam pomislio na Google karte. Nakon značajnog istraživanja, otkrio sam da Google doista ne želi da se ljudi igraju s njihovim podacima, u kreativnom smislu ili na neki drugi način. Zapravo, izričito zabranjuju struganje weba s Google karata.

Srećom, moj očaj je kratko trajao nakon što sam otkrio OpenStreetMap (OSM). OSM je suradnički projekt koji uključuje ljude iz cijelog svijeta koji dostavljaju podatke. OSM izričito dopušta otvorenu upotrebu njihovih podataka u ime softvera otvorenog koda. Stoga posjetom OSM web stranici počinje putovanje stiliziranja karte.

Nakon dolaska na web mjesto OSM -a kliknite karticu "Izvoz" za prikaz alata za izvoz karata. Sada povećajte prikaz kako biste vidjeli regiju s kojom ste zainteresirani za prikupljanje kartografskih podataka. Odaberite vezu "Ručno odaberite drugo područje" koja će otvoriti okvir na vašem zaslonu. Oblikujte i postavite ovu kutiju iznad područja interesa. Nakon što ste zadovoljni, kliknite gumb "Izvezi" za preuzimanje svoje OSM podatkovne datoteke.

Napomena #1: Ako odabrana regija sadrži previše podataka, dobit ćete pogrešku da ste odabrali previše čvorova. Ako vam se to dogodi, kliknite gumb "Overpass API" za preuzimanje veće datoteke.

Napomena #2: Ako je vaša preuzeta OSM datoteka veća od 30 MB, program Python koji sam napisao primjetno će se usporiti. Ako ste odlučni koristiti veliku regiju, razmislite o pisanju skripte za bacanje suvišnih podataka koje ne planirate crtati.

Korak 2: Definiranje procesa II: Razumijevanje podataka

Definiranje procesa II: Razumijevanje podataka
Definiranje procesa II: Razumijevanje podataka
Definiranje procesa II: Razumijevanje podataka
Definiranje procesa II: Razumijevanje podataka
Definiranje procesa II: Razumijevanje podataka
Definiranje procesa II: Razumijevanje podataka
Definiranje procesa II: Razumijevanje podataka
Definiranje procesa II: Razumijevanje podataka

"Imam podatke … što sad?"

Počnite otvaranjem preuzete OSM datoteke u svoj omiljeni softver za uređivanje teksta. Prvo ćete primijetiti da je ovo XML datoteka, što je sjajno! XML je dovoljno lako raščlaniti. Početak vaše datoteke trebao bi izgledati gotovo identično prvoj slici ovog koraka - bit će navedeni neki osnovni metapodaci i geografske granice.

Dok pomičete datoteku, primijetit ćete tri podatkovna elementa koji se koriste u cijelom:

  1. Čvorovi
  2. Načini
  3. Odnosi

Najosnovniji element podataka, čvor jednostavno ima jedinstveni identifikator, zemljopisnu širinu i dužinu. Naravno, postoje dodatni metapodaci, ali ih možemo sigurno odbaciti.

Načini su zbirke čvorova. Način se može prikazati kao zatvoreni oblik ili kao otvorena linija. Načini se sastoje od zbirke čvorova identificiranih njihovim jedinstvenim identifikatorom. Označeni su ključevima koji definiraju skupinu podataka kojoj pripadaju. Na primjer, način prikazan na trećoj gornjoj slici pripada grupi podataka "mjesto" i njezinoj podgrupi "otok". Drugim riječima, ovaj određeni način pripada sloju "otoka" u skupini "mjesto". Načini također imaju jedinstvene identifikatore.

Na kraju, odnosi su skup načina. Relacija može predstavljati složeni oblik s rupama ili s više regija. Odnosi će također imati jedinstveni identifikator i bit će označeni slično načinima.

Više o ovim elementima podataka možete pročitati na OSM wiki:

  • Čvorovi
  • Načini
  • Odnosi

Korak 3: Definiranje procesa III: Digestiranje podataka

Definiranje procesa III: Sažimanje podataka
Definiranje procesa III: Sažimanje podataka

Sada biste trebali barem površno razumjeti elemente podataka koji čine OSM datoteku. U ovom smo trenutku zainteresirani za čitanje OSM podataka koristeći jezik koji odaberete. Iako je ovaj korak usmjeren na Python, ako ne želite koristiti Python, ipak biste trebali pročitati ovaj dio jer sadrži nekoliko savjeta i trikova.

Paket xml zadano je uključen u većinu standardnih distribucija Pythona. Ovaj ćemo paket koristiti za vrlo jednostavno raščlanjivanje naše OSM datoteke kako je prikazano na prvoj slici. U jednoj for petlji možete obraditi rukovanje OSM podacima za svaki pojedini element podataka.

Na posljednjem retku slike primijetit ćete da provjeravam ima li oznake "granica". Ovaj korak je od vitalnog značaja za prevođenje vrijednosti zemljopisne širine i dužine u piksele na ekranu. Toplo preporučujem pokretanje ove pretvorbe u vrijeme učitavanja OSM datoteke jer je masovna pretvorba podataka intenzivna u procesu.

Govoreći o pretvaranju zemljopisnih širina i dužina u koordinate zaslona, ovdje je veza do računske funkcije koju sam napisao. Vjerojatno ćete primijetiti nešto malo čudno u pretvaranju zemljopisne širine u koordinate zaslona. U usporedbi s zemljopisnom dužinom postoji dodatni korak! Kako se pokazalo, OSM podaci modelirani su metodom projekcije Pseudo-Mercator. Srećom, OSM ovdje ima fantastičnu dokumentaciju o ovoj temi i pruža značajke pretvorbe zemljopisne širine za značajan broj jezika. Super!

Napomena: U mom kodu, koordinata zaslona (0, 0) je gornji lijevi kut zaslona.

Korak 4: Implementacija Python Map Stylizatora

Implementacija Python Map Stylizatora
Implementacija Python Map Stylizatora
Implementacija Python Map Stylizatora
Implementacija Python Map Stylizatora
Implementacija Python Map Stylizatora
Implementacija Python Map Stylizatora

Do sada sam raspravljao o OSM datoteci s podacima - što je to, kako je pročitati i što s njom učiniti. Sada ću razgovarati o softveru koji sam napisao za rješavanje stilske vizualizacije karte (GitHub repo naveden u uvodu).

Moja specifična implementacija fokusira se na korisničku kontrolu nad kanalom za iscrtavanje. Konkretno, dopuštam korisniku da odabere slojeve koje želi vidjeti i kako želi da se taj sloj vizualizira. Kao što sam ukratko spomenuo ranije, postoje dvije klase prikazanih elemenata: ispunite stavke i stavke retka. Ispune su definirane samo bojom, dok su linije definirane bojom, širinom linije, stilom linije, stilom kapice linije i stilom spajanja linija.

Kako korisnik mijenja stilove slojeva i vidljivost, promjene se odražavaju u widgetu karte s desne strane. Nakon što je korisnik izmijenio izgled karte na svoje zadovoljstvo, može prilagoditi maksimalnu dimenziju karte i spremiti kartu kao sliku na svom računalu. Prilikom spremanja slike bit će spremljena i korisnička konfiguracijska datoteka. To osigurava da se korisnik u bilo kojem trenutku može prisjetiti i ponovno koristiti konfiguraciju koju je koristio za generiranje određene slike.

Korak 5: Pogreška implementacije + Rješenje

Nedostaci provedbe + rješenje
Nedostaci provedbe + rješenje
Nedostaci provedbe + rješenje
Nedostaci provedbe + rješenje

Kad sam prvi put počeo ručno stilizirati kartu, naučio sam da je to prilično dosadan proces. Nuđenje maksimalne kontrole korisniku može biti jednostavno neodoljivo zbog velikog broja dostupnih "gumba". Međutim, postoji jednostavno rješenje koje uključuje malo dodatnog skriptiranja.

Počeo sam identificirajući slojeve koji me posebno zanimaju. U svrhu ovog uputstva, recimo da me najviše zanimaju zgrade (sve one), rijeke, glavne autoceste i površinske ulice. Napisao bih skriptu u kojoj kreiram instancu konfiguracije, na odgovarajući način mijenjam stanja slojeva koristeći funkciju setItemState () i definirane konstante te postavljam boje ovisno o tome kako bih želio da se moji slojevi pojavljuju pomoću setValue (). Rezultirajuća konfiguracijska datoteka koja se sprema može se kopirati u mapu configs i učitati od strane korisnika.

Primjer skripte nalazi se na gornjoj slici. Druga slika je uzorak kako bi pomoćne funkcije izgledale, a budući da su u osnovi sve identične, samo s različitim konstantama, uključio sam samo sliku jednog primjera.

Korak 6: Područja za poboljšanje

Područja za poboljšanje
Područja za poboljšanje

Nakon razmišljanja o implementaciji softvera, identificirao sam nekoliko područja koja bi bila korisna poboljšanja za napredne korisnike.

  1. Dinamičko iscrtavanje slojeva. Trenutno imam unaprijed definiran popis slojeva koji će se iscrtati, to je to. Dio opravdanja bile su poteškoće u određivanju treba li sloj biti linija ili ispuna. Kao rezultat toga, sa gotovo svakom OSM datotekom koju otvorite, dočekat ćete mnoštvo upozorenja o slojevima koji se neće prikazati. Često su oni tako minimalni da to nije problem, ali zasigurno nedostaju kritični slojevi. Dinamičko iscrtavanje sloja otklonilo bi ove nedoumice.
  2. Dinamičko dodjeljivanje sloja. Ovo ide ruku pod ruku s #1; ako želite dinamičko iscrtavanje sloja, trebate dodjelu dinamičkog sloja (tj. identificiranje sloja ispune u odnosu na linijski sloj). To bi se razumno moglo postići, kako sam naučio, jer će načini čiji su prvi i posljednji čvor isti biti zatvoreni putovi i stoga ispunjeni.
  3. Grupe boja. Stilizirana karta često ima nekoliko slojeva koji imaju isti stil, a omogućavanje korisniku da istodobno mijenja stil grupe značajno bi smanjilo korisnikovo vrijeme utrošeno na uređivanje slojeva.

Korak 7: Zatvaranje misli

Završne misli
Završne misli
Završne misli
Završne misli
Završne misli
Završne misli

Hvala svima što ste odvojili vrijeme da pročitate moj Instructable. Ovaj projekt predstavlja vrhunac višesatnog istraživanja, dizajna, programiranja i otklanjanja pogrešaka. Nadam se da sam uspio pružiti lansirnu ploču s koje možete izgraditi vlastiti projekt ili nadograditi ono što sam već napisao. Također se nadam da će moji nedostaci i savjeti pružiti obilje bodova za razmatranje u vašem dizajnu. Ako ste manje skloni programiranju, a više stvaranju umjetničkih djela, volio bih vidjeti što radite u komentarima! Mogućnosti su beskrajne!

Posebno hvala suradnicima OpenStreetMap -a! Ovakvi projekti ne bi bili mogući bez njihovih značajnih napora.

Javite mi ako imate pitanja u komentarima!

Maps Challenge
Maps Challenge
Maps Challenge
Maps Challenge

Drugoplasirani u izazovu Maps

Preporučeni: