Sadržaj:
- Pribor
- Korak 1: Definiranje procesa I: Preuzimanje OSM datoteke
- Korak 2: Definiranje procesa II: Razumijevanje podataka
- Korak 3: Definiranje procesa III: Digestiranje podataka
- Korak 4: Implementacija Python Map Stylizatora
- Korak 5: Pogreška implementacije + Rješenje
- Korak 6: Područja za poboljšanje
- Korak 7: Zatvaranje misli
Video: Kako izraditi prilagođene stilizirane karte pomoću OpenStreetMap -a: 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:33
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
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
"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:
- Čvorovi
- Načini
- 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
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
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
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
Nakon razmišljanja o implementaciji softvera, identificirao sam nekoliko područja koja bi bila korisna poboljšanja za napredne korisnike.
- 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.
- 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.
- 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
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!
Drugoplasirani u izazovu Maps
Preporučeni:
Izradite prilagođene karte za svoj Garmin GPS: 8 koraka (sa slikama)
Izradite prilagođene karte za svoj Garmin GPS: Ako imate Garmin GPS dizajniran za planinarenje i druge aktivnosti na otvorenom (uključujući niz drugih GPSMAP, eTrex, Colorado, Dakota, Oregon i Montana), ne morate zadovoljiti se kartama golih kostiju koje su na njega bile prethodno učitane. E
Kako izraditi jednostavnu web stranicu pomoću zagrada za početnike: 14 koraka
Kako izraditi jednostavnu web stranicu pomoću zagrada za početnike: Uvod Sljedeće upute pružaju korak po korak smjernice za izradu web stranice pomoću zagrada. Zagrade su uređivač izvornog koda s primarnim fokusom na web razvoj. Izradio ga je Adobe Systems, besplatni je softver otvorenog koda licenciran
Kako izraditi daljinski upravljanog 3D tiskanog samobalansirajućeg robota: 9 koraka (sa slikama)
Kako izraditi daljinski upravljanog 3D tiskanog samobalansirajućeg robota: Ovo je evolucija prethodne verzije B-robota. 100% OTVORENI IZVOR / Arduino robot. KOD, 3D dijelovi i elektronika su otvoreni pa ih slobodno izmijenite ili stvorite ogromnu verziju robota. Ako imate nedoumica, ideja ili vam je potrebna pomoć, napravite
Kako izraditi matricu pomoću Worda .: 7 koraka
Kako izraditi matricu pomoću Worda. Neprestano vidite ove upute kako govore jednostavne šablone pomoću Photoshopa ili pomoću programa za preuzimanje itd., Ali ova uputa će vam, štreberu /štreberu, pokazati kako stvoriti šablone pomoću programa Microsoft Word
Kako izraditi internetski klasificirani oglas: 3 koraka (sa slikama)
Kako izraditi internetski klasificirani oglas: Imate li nešto s čim mislite da se morate rastati? Jedan od načina za promicanje stvari koje želite prodati je objavljivanje tajnog oglasa, a danas je korištenje interneta jednostavan, učinkovit i gotovo uvijek besplatan način za to. U ovom Instructableu, ja ću