Kazalo:

Kako ustvariti stilizirane zemljevide po meri z uporabo OpenStreetMap: 7 korakov (s slikami)
Kako ustvariti stilizirane zemljevide po meri z uporabo OpenStreetMap: 7 korakov (s slikami)

Video: Kako ustvariti stilizirane zemljevide po meri z uporabo OpenStreetMap: 7 korakov (s slikami)

Video: Kako ustvariti stilizirane zemljevide po meri z uporabo OpenStreetMap: 7 korakov (s slikami)
Video: CS50 2013 - Week 9, continued 2024, Julij
Anonim
Kako ustvariti stilizirane zemljevide po meri z uporabo OpenStreetMap
Kako ustvariti stilizirane zemljevide po meri z uporabo OpenStreetMap

V tem navodilu bom opisal postopek, s katerim lahko ustvarite lastne po meri izdelane stilizirane zemljevide. Stiliziran zemljevid je zemljevid, kjer lahko uporabnik določi, katere podatkovne plasti se vizualizirajo, in določi slog, s katerim je prikazana vsaka plast. Najprej bom opisal postopek, s katerim lahko napišete programsko opremo za stiliziranje zemljevidov, nato pa še primer programske opreme Python, ki sem jo napisal za izvajanje te naloge.

Naslednji videoposnetek poudarja, kako osebno ustvarjam stilizirane zemljevide, vendar berite za intimne podrobnosti. Zelo sem navdušen, ko vidim, kaj ustvarja skupnost!

Kaj je moja motivacija za ta projekt?

Odkrito povedano, začel sem ta projekt, ker se mi je zdelo zabavno. Ta zamisel mi je v zadnjem letu ropotala po glavi in končno sem si vzel čas, ki mi je bil potreben, da jo uresničim. Po dnevu izdelave prototipov z nekaj osnovnimi skriptami sem lahko ustvaril izjemno obetavne rezultate - tako obetavne, da sem vedel, da moram svoje scenarije formalizirati tako, da bodo drugi zlahka ustvarili svoje lastne stvaritve.

Moja motivacija pri pisanju tega navodila je posledica dejstva, da sem našel zelo malo informacij o tem, kako ustvariti lastne stilizirane zemljevide iz nič. Upam, da bom naučeno delil s skupnostjo.

Viri/povezave:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Skladišče Github

Zaloge

  • Distribucija Python (uporabljal sem Anacondo in Python 3.6)
  • PyQt5 (za odvisnosti od grafičnega vmesnika)

1. korak: Določanje procesa I: Prenos datoteke OSM

Opredelitev procesa I: Prenos datoteke OSM
Opredelitev procesa I: Prenos datoteke OSM

Ko sem prvič začel s tem projektom, je bilo najbolj očitno vprašanje, "kje lahko dobim podatke zemljevida." Seveda sem, kot bi pričakovali, takoj pomislil na Google Zemljevide. Po obsežnih raziskavah sem odkril, da Google res ne želi, da se ljudje igrajo s svojimi podatki, v ustvarjalnem smislu ali drugače. Pravzaprav izrecno onemogočajo strganje spleta z Google Zemljevidov.

Na srečo je moj obup kratko trajal, ko sem odkril OpenStreetMap (OSM). OSM je skupni projekt, ki vključuje podatke po vsem svetu. OSM izrecno dovoljuje odprto uporabo njihovih podatkov v imenu odprtokodne programske opreme. Tako se obisk spletne strani OSM začne s stiliziranjem zemljevida.

Ko prispete na spletno mesto OSM, kliknite zavihek "Izvozi", da prikažete orodja za izvoz zemljevidov. Zdaj povečajte prikaz, da si ogledate regijo, v kateri želite zbirati podatke zemljevida. Izberite povezavo "Ročno izberite drugo območje", ki bo prikazala polje na vašem zaslonu. Oblikujte in postavite to polje na območje, ki vas zanima. Ko ste zadovoljni, kliknite gumb "Izvozi", da prenesete podatkovno datoteko OSM.

Opomba #1: Če izbrana regija vsebuje preveč podatkov, se prikaže napaka, da ste izbrali preveč vozlišč. Če se vam to zgodi, kliknite gumb "Overpass API", da prenesete svojo večjo datoteko.

Opomba #2: Če je vaša prenesena datoteka OSM večja od 30 MB, se bo program Python, ki sem ga napisal, opazno upočasnil. Če ste odločeni uporabiti veliko regijo, razmislite o pisanju skripta, s katerim boste zavrgli odvečne podatke, ki jih ne nameravate črpati.

2. korak: Opredelitev procesa II: Razumevanje podatkov

Opredelitev procesa II: Razumevanje podatkov
Opredelitev procesa II: Razumevanje podatkov
Opredelitev procesa II: Razumevanje podatkov
Opredelitev procesa II: Razumevanje podatkov
Opredelitev procesa II: Razumevanje podatkov
Opredelitev procesa II: Razumevanje podatkov
Opredelitev procesa II: Razumevanje podatkov
Opredelitev procesa II: Razumevanje podatkov

"Imam podatke … kaj pa zdaj?"

Začnite tako, da prenesete preneseno datoteko OSM v svojo najljubšo programsko opremo za urejanje besedila. Najprej boste opazili, da je to datoteka XML, kar je super! XML je dovolj enostaven za razčlenjevanje. Začetek vaše datoteke bi moral biti skoraj enak prvi sliki tega koraka - navedeni bodo nekateri osnovni metapodatki in geografske meje.

Med pomikanjem po datoteki boste opazili tri podatkovne elemente, ki se uporabljajo povsod:

  1. Vozlišča
  2. Načini
  3. Odnosi

Najosnovnejši podatkovni element, vozlišče, ima preprosto povezan edinstven identifikator, zemljepisno širino in dolžino. Seveda obstajajo dodatni metapodatki, vendar jih lahko varno zavržemo.

Načini so zbirke vozlišč. Način je mogoče upodobiti kot zaprto obliko ali kot odprto črto. Načini so sestavljeni iz zbirke vozlišč, ki jih identificira njihov edinstven identifikator. Označeni so s ključi, ki opredeljujejo podatkovno skupino, ki ji pripadajo. Na primer, način, prikazan na tretji zgornji sliki, spada v podatkovno skupino "mesto" in njeno podskupino "otok". Z drugimi besedami, ta poseben način spada v "otoško" plast v skupini "kraj". Načini imajo tudi edinstvene identifikatorje.

Nazadnje, odnosi so zbirk načinov. Relacija lahko predstavlja kompleksno obliko z luknjami ali z več regijami. Odnosi bodo imeli tudi edinstven identifikator in bodo označeni podobno kot načini.

Več o teh podatkovnih elementih lahko preberete iz wikija OSM:

  • Vozlišča
  • Načini
  • Odnosi

3. korak: Določitev procesa III: Prevzem podatkov

Opredelitev procesa III: prebava podatkov
Opredelitev procesa III: prebava podatkov

Zdaj bi morali imeti vsaj površno razumevanje podatkovnih elementov, ki sestavljajo datoteko OSM. Na tej točki nas zanima branje podatkov OSM v izbranem jeziku. Čeprav je ta korak osredotočen na Python, če ne želite uporabljati Pythona, morate še vedno prebrati ta del, saj vsebuje nekaj nasvetov in zvijač.

Paket xml je privzeto vključen v večino standardnih distribucij Python. Ta paket bomo uporabili za zelo enostavno razčlenitev naše datoteke OSM, kot je prikazano na prvi sliki. V eni sami zanki for lahko obdelate obdelavo podatkov OSM za vsak posamezen podatkovni element.

Na zadnji vrstici slike boste opazili, da preverjam oznako "meje". Ta korak je bistvenega pomena pri prevajanju vrednosti zemljepisne širine in dolžine v slikovne pike na zaslonu. Toplo priporočam, da to pretvorbo izvedete, ko naložite datoteko OSM, saj je množično pretvarjanje podatkov intenzivno procesno.

Ko govorimo o pretvorbi zemljepisnih širin in dolžin v koordinate zaslona, tukaj je povezava do računske funkcije, ki sem jo napisal. Pri pretvorbi zemljepisne širine v koordinate zaslona boste verjetno opazili nekaj malce čudnega. V primerjavi z zemljepisno dolžino obstaja dodaten korak! Izkazalo se je, da so podatki OSM modelirani s projekcijsko metodo Pseudo-Mercator. Na srečo ima OSM fantastično dokumentacijo na to temo in ponuja funkcije pretvorbe zemljepisne širine za veliko število jezikov. Odlično!

Opomba: V moji kodi je koordinata zaslona (0, 0) zgornji levi kot zaslona.

4. korak: Izvajanje Python Map Stylizerja

Implementacija Python Map Stylizerja
Implementacija Python Map Stylizerja
Implementacija Python Map Stylizerja
Implementacija Python Map Stylizerja
Implementacija Python Map Stylizerja
Implementacija Python Map Stylizerja

Do te točke sem razpravljal o podatkovni datoteki OSM - kaj je to, kako jo prebrati in kaj storiti z njo. Zdaj bom razpravljal o programski opremi, ki sem jo napisal za spopadanje s stilsko vizualizacijo zemljevida (uvod v GitHub).

Moja posebna izvedba se osredotoča na nadzor uporabnika nad kanalom upodabljanja. Natančneje, uporabniku dovoljujem, da izbere plasti, ki jih želi videti, in kako želi, da se ta plast vizualizira. Kot sem na kratko omenil že prej, obstajata dva razreda upodobljenih elementov: izpolnite postavke in postavke vrstice. Polnila so opredeljena samo z barvo, črte pa z barvo, širino črte, slogom črte, slogom črte črte in slogom združevanja vrstic.

Ko uporabnik spreminja sloge in vidnost plasti, se spremembe odražajo v pripomočku za zemljevid na desni. Ko uporabnik po lastni presoji spremeni videz zemljevida, lahko prilagodi največjo dimenzijo zemljevida in ga shrani kot sliko v svojem računalniku. Pri shranjevanju slike bo shranjena tudi uporabniška konfiguracijska datoteka. Tako uporabnik lahko kadar koli prikliče in znova uporabi konfiguracijo, ki jo je uporabil za ustvarjanje določene slike.

5. korak: Pomanjkljivost implementacije + rešitev

Pomanjkljivost izvajanja + rešitev
Pomanjkljivost izvajanja + rešitev
Pomanjkljivost izvajanja + rešitev
Pomanjkljivost izvajanja + rešitev

Ko sem prvič začel ročno oblikovati zemljevid, sem izvedel, da je to precej dolgočasen proces. Ponujanje največjega nadzora uporabniku je lahko preprosto ogromno zaradi velikega števila razpoložljivih "gumbov". Obstaja pa preprosta rešitev, ki vključuje malo več skriptov.

Začel sem z ugotavljanjem, katere plasti me še posebej zanimajo. Za namene tega pouka me recimo najbolj zanimajo zgradbe (vse), reke, glavne avtoceste in površinske ulice. Napisal bi skript, kjer bi ustvaril primerek konfiguracije, ustrezno preklopil stanja slojev s funkcijo setItemState () in določenimi konstantami ter nastavil barve glede na to, kako želim, da so moje plasti prikazane z uporabo setValue (). Nastalo konfiguracijsko datoteko, ki se shrani, lahko uporabnik kopira v mapo configs in naloži.

Primer skripte je na zgornji sliki. Druga slika je vzorec, kako bi bile videti pomožne funkcije, in ker so v bistvu vse enake, samo z različnimi konstantami, sem vključil le sliko enega primera.

6. korak: Področja za izboljšanje

Področja za izboljšanje
Področja za izboljšanje

Ko sem razmislil o svoji implementaciji programske opreme, sem opredelil več področij, ki bi bila v pomoč uporabnikom za napredne uporabnike.

  1. Dinamično upodabljanje plasti. Trenutno imam vnaprej določen seznam plasti, ki bodo upodobljene, to je to. Del utemeljitve so bile težave pri določanju, ali naj bo plast črta ali polnilo. Posledično boste s skoraj vsako datoteko OSM, ki jo odprete, pozdravili s številnimi opozorili o slojih, ki ne bodo upodobljeni. Pogosto so te tako minimalne, da to ni problem, vendar bodo kritične plasti zagotovo manjkale. Dinamično upodabljanje plasti bi odpravilo te pomisleke.
  2. Dinamična dodelitev plasti. To gre z roko v roki z #1; če želite upodabljanje dinamičnega sloja, potrebujete dodelitev dinamičnega sloja (tj. Prepoznavanje polnilne plasti v primerjavi s plastjo črte). Kot sem izvedel, bi bilo to razumno mogoče doseči, ker bodo načini, katerih prvo in zadnje vozlišče enaki, zaprti in zato zapolnjeni.
  3. Barvne skupine. Stiliziran zemljevid ima pogosto več slojev z istim slogom, če bi uporabniku omogočili, da hkrati spremeni slog skupine, bi se uporabnikov čas, porabljen za urejanje plasti enega po enega, močno skrajšal.

7. korak: Zapiranje misli

Zaključne misli
Zaključne misli
Zaključne misli
Zaključne misli
Zaključne misli
Zaključne misli

Hvala vsem, ki ste si vzeli čas in prebrali moj Instructable. Ta projekt predstavlja vrhunec številnih ur raziskav, oblikovanja, programiranja in odpravljanja napak. Upam, da sem vam lahko zagotovil izhodiščno ploščo, iz katere lahko zgradite svoj projekt ali nadgradite to, kar sem že napisal. Upam tudi, da moje pomanjkljivosti in nasveti prinašajo veliko točk, ki jih morate upoštevati pri oblikovanju. Če ste manj nagnjeni k programiranju in bolj k ustvarjanju umetniških del, bi rad videl, kaj naredite v komentarjih! Možnosti je neskončno!

Posebna zahvala sodelavcem OpenStreetMap! Takšni projekti ne bi bili mogoči brez njihovega truda.

Sporočite mi, če imate kakršna koli vprašanja v komentarjih!

Zemljevidi izziv
Zemljevidi izziv
Zemljevidi izziv
Zemljevidi izziv

Drugo mesto na zemljevidu Challenge

Priporočena: