Obsah:

Ako vytvoriť vlastné štylizované mapy pomocou OpenStreetMap: 7 krokov (s obrázkami)
Ako vytvoriť vlastné štylizované mapy pomocou OpenStreetMap: 7 krokov (s obrázkami)

Video: Ako vytvoriť vlastné štylizované mapy pomocou OpenStreetMap: 7 krokov (s obrázkami)

Video: Ako vytvoriť vlastné štylizované mapy pomocou OpenStreetMap: 7 krokov (s obrázkami)
Video: ТАКОВ МОЙ ПУТЬ В L4D2 2024, December
Anonim
Ako vytvárať vlastné štylizované mapy pomocou OpenStreetMap
Ako vytvárať vlastné štylizované mapy pomocou OpenStreetMap

V tomto návode popíšem proces, pomocou ktorého môžete generovať svoje vlastné štylizované mapy na mieru. Štylizovaná mapa je mapa, na ktorej môže užívateľ určiť, ktoré dátové vrstvy sú vizualizované, a tiež definovať štýl, v ktorom sú jednotlivé vrstvy vizualizované. Najprv popíšem proces, pomocou ktorého môžete písať softvér na štylizáciu máp, a potom príklad softvéru Python, ktorý som napísal na vykonanie tejto úlohy.

Nasledujúce video poukazuje na to, ako osobne generujem štylizované mapy, ale čítajte ďalej a prečítajte si intímne detaily. Som veľmi nadšený, že vidím, čo komunita vytvára!

Aká je moja motivácia za týmto projektom?

Úprimne povedané, začal som s týmto projektom, pretože som si myslel, že by bolo zábavné to robiť. Táto myšlienka mi v hlave rástla posledný rok a ja som si konečne našiel čas a potreboval som ju zrealizovať. Po dni prototypovania s niektorými základnými skriptami som bol schopný vygenerovať mimoriadne sľubné výsledky - také sľubné, že som vedel, že svoje skripty potrebujem formalizovať tak, aby ostatní mohli ľahko vytvárať vlastné.

Moja motivácia pri písaní tohto návodu je spôsobená tým, že som našiel veľmi málo informácií o tom, ako si od začiatku vytvárať vlastné štylizované mapy. Dúfam, že sa o to, čo som sa naučil, podelím s komunitou.

Zdroje/Odkazy:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Úložisko Github

Zásoby

  • Distribúcia v Pythone (použil som Anacondu a Python 3.6)
  • PyQt5 (pre závislosti od GUI)

Krok 1: Definovanie postupu I: Stiahnutie súboru OSM

Definovanie postupu I: Stiahnutie súboru OSM
Definovanie postupu I: Stiahnutie súboru OSM

Keď som prvýkrát začínal s týmto projektom, najkrikľavejšia otázka bola „kde môžem získať mapové údaje“. Prirodzene, ako by ste očakávali, okamžite mi napadli Mapy Google. Po významnom výskume som zistil, že Google skutočne nechce, aby sa ľudia hrali s jeho údajmi, či už v kreatívnom zmysle alebo inak. V skutočnosti výslovne zakazujú škrabanie webu z Máp Google.

Našťastie moje zúfalstvo trvalo krátko po objavení OpenStreetMap (OSM). OSM je projekt spolupráce, do ktorého sú zapojení ľudia z celého sveta, ktorí prispievajú údajmi. OSM výslovne povoľuje otvorené používanie ich údajov v mene softvéru Open Source. Návšteva webovej stránky OSM je miestom, kde sa začína cesta štylizujúca mapu.

Po príchode na webovú stránku OSM kliknutím na kartu „Exportovať“zobrazíte nástroje na export máp. Teraz priblížením zobrazte región, v ktorom vás zaujíma zbieranie údajov máp. Vyberte odkaz „Ručne vybrať inú oblasť“, čím sa na obrazovke zobrazí pole. Vytvarujte a umiestnite tento box nad oblasť záujmu. Keď ste spokojní, kliknutím na tlačidlo „Exportovať“si stiahnete súbor s údajmi OSM.

Poznámka č. 1: Ak zvolený región obsahuje príliš veľa údajov, zobrazí sa chyba, že ste vybrali príliš veľa uzlov. Ak sa vám to stane, stiahnite si väčší súbor kliknutím na tlačidlo „Overpass API“.

Poznámka č. 2: Ak je váš stiahnutý súbor OSM väčší ako 30 MB, program Python, ktorý som napísal, sa výrazne spomalí. Ak ste sa rozhodli použiť veľký región, zvážte napísanie skriptu na vyhodenie nadbytočných údajov, ktoré neplánujete nakresliť.

Krok 2: Definovanie postupu II: Pochopenie údajov

Definícia procesu II: Pochopenie údajov
Definícia procesu II: Pochopenie údajov
Definícia procesu II: Pochopenie údajov
Definícia procesu II: Pochopenie údajov
Definícia procesu II: Pochopenie údajov
Definícia procesu II: Pochopenie údajov
Definícia procesu II: Pochopenie údajov
Definícia procesu II: Pochopenie údajov

„Mám dáta … a čo teraz?“

Začnite otvorením stiahnutého súboru OSM vo svojom obľúbenom softvéri na úpravu textu. Najprv si všimnete, že sa jedná o súbor XML, čo je skvelé! XML je dostatočne jednoduché na analýzu. Začiatok súboru by mal byť takmer identický s prvým obrázkom tohto kroku - budú uvedené niektoré základné metadáta a geografické hranice.

Pri posúvaní súboru si všimnete tri dátové prvky použité v celom texte:

  1. Uzly
  2. Spôsoby
  3. Vzťahy

Najzákladnejší údajový prvok, uzol má jednoducho jedinečný identifikátor, zemepisnú šírku a dĺžku, s ktorými je spojený. Samozrejme, existujú aj ďalšie metadáta, ale môžeme ich bezpečne zahodiť.

Spôsoby sú zbierky uzlov. Cestu je možné vykresliť ako uzavretý tvar alebo ako otvorenú čiaru. Spôsoby pozostávajú zo súboru uzlov identifikovaných ich jedinečným identifikátorom. Sú označené kľúčmi, ktoré definujú skupinu údajov, do ktorej patria. Napríklad spôsob zobrazený na treťom obrázku vyššie patrí do skupiny údajov „miesto“a jej podskupiny „ostrov“. Inými slovami, tento konkrétny spôsob patrí do „ostrovnej“vrstvy pod skupinou „miesto“. Spôsoby majú tiež jedinečné identifikátory.

Napokon, vzťahy sú zbierkami spôsobov. Vzťah môže predstavovať komplexný tvar s otvormi alebo s viacerými oblasťami. Vzťahy budú mať tiež jedinečný identifikátor a budú označené podobným spôsobom.

Viac o týchto údajových prvkoch si môžete prečítať na wiki OSM:

  • Uzly
  • Spôsoby
  • Vzťahy

Krok 3: Definícia postupu III: Trávenie údajov

Definícia procesu III: Trávenie údajov
Definícia procesu III: Trávenie údajov

Teraz by ste mali mať aspoň povrchné znalosti o údajových prvkoch, ktoré tvoria súbor OSM. V tomto mieste nás zaujíma čítanie údajov OSM pomocou vami zvoleného jazyka. Aj keď je tento krok zameraný na Python, ak nechcete používať Python, mali by ste si túto časť prečítať, pretože obsahuje niekoľko tipov a trikov.

Balík xml je štandardne zahrnutý vo väčšine štandardných distribúcií Pythonu. Tento balík použijeme na veľmi jednoduchú analýzu nášho súboru OSM, ako je to znázornené na prvom obrázku. V jedinej slučke for môžete spracovať spracovanie údajov OSM pre každý konkrétny dátový prvok.

V poslednom riadku obrázku si všimnete, že kontrolujem značku „hranice“. Tento krok je životne dôležitý pri preklade hodnôt zemepisnej šírky a dĺžky do pixelov na obrazovke. Túto konverziu dôrazne odporúčam spustiť pri načítaní súboru OSM, pretože hromadná konverzia údajov je náročná na proces.

Keď už hovoríme o prevode zemepisných šírok a dĺžok na súradnice obrazovky, tu je odkaz na funkciu výpočtu, ktorú som napísal. Pravdepodobne si pri prevode zemepisnej šírky na súradnice obrazovky všimnete niečo trochu zvláštne. V porovnaní s zemepisnou dĺžkou je zahrnutý ďalší krok! Ako sa ukazuje, údaje OSM sú modelované pomocou projekčnej metódy Pseudo-Mercator. Našťastie má OSM k tejto téme fantastickú dokumentáciu a poskytuje funkcie prevodu na šírku pre značný počet jazykov. Úžasné!

Poznámka: V mojom kóde je súradnica obrazovky (0, 0) v ľavom hornom rohu obrazovky.

Krok 4: Implementácia štylizátora Python Map

Implementácia štylizátora mapy Python
Implementácia štylizátora mapy Python
Implementácia štylizátora mapy Python
Implementácia štylizátora mapy Python
Implementácia štylizátora Python Map
Implementácia štylizátora Python Map

Až do tohto bodu som diskutoval o dátovom súbore OSM - čo to je, ako ho čítať a čo s ním robiť. Teraz budem diskutovať o softvéri, ktorý som napísal na riešenie vizualizácie štylistických máp (repo GitHub uvedené v úvode).

Moja konkrétna implementácia sa zameriava na používateľskú kontrolu vykresľovacieho kanála. Konkrétne povoľujem používateľovi vybrať vrstvy, ktoré chce byť viditeľné, a spôsob, akým má byť táto vrstva vizualizovaná. Ako som už stručne spomenul, existujú dve triedy vykreslených prvkov: výplňové položky a riadkové položky. Výplne sú definované iba farbou, zatiaľ čo čiary sú definované farbou, šírkou čiary, štýlom čiary, štýlom čiary a štýlom spájania čiar.

Keď používateľ upravuje štýly a viditeľnosť vrstiev, zmeny sa prejavia v miniaplikácii mapy vpravo. Keď používateľ upraví vzhľad mapy k svojej spokojnosti, môže upraviť maximálny rozmer mapy a uložiť mapu ako obrázok do svojho počítača. Pri ukladaní obrázku sa uloží aj konfiguračný súbor používateľa. To zaisťuje, že používateľ si môže kedykoľvek vyvolať a znova použiť konfiguráciu, ktorú použil na generovanie konkrétneho obrazu.

Krok 5: Implementácia Nevýhoda + riešenie

Implementácia Nevýhoda + riešenie
Implementácia Nevýhoda + riešenie
Implementácia Nevýhoda + riešenie
Implementácia Nevýhoda + riešenie

Keď som prvýkrát začal ručne štylizovať mapu, zistil som, že to bol dosť únavný proces. Ponúknuť používateľovi maximálnu kontrolu môže byť jednoducho ohromujúce kvôli veľkému počtu dostupných „gombíkov“. Existuje však jednoduché riešenie, ktoré vyžaduje trochu skriptovania navyše.

Začal som identifikáciou vrstiev, ktoré ma obzvlášť zaujímajú. Na účely tohto pokynu povedzme, že ma najviac zaujímajú budovy (všetky), rieky, hlavné diaľnice a povrchové ulice. Napísal by som skript, kde vytvorím inštanciu Configuration, vhodne prepnem stavy vrstiev pomocou funkcie setItemState () a definovaných konštánt a nastavím farby podľa toho, ako by som chcel, aby sa moje vrstvy zobrazovali pomocou setValue (). Výsledný uložený konfiguračný súbor je možné skopírovať do priečinka configs a načítať ho používateľ.

Príklad skriptu je na obrázku vyššie. Druhý obrázok je ukážkou toho, ako by pomocné funkcie vyzerali, a pretože sú v zásade všetky identické, iba s rôznymi konštantami, priložil som iba obrázok jedného príkladu.

Krok 6: Oblasti na zlepšenie

Oblasti na zlepšenie
Oblasti na zlepšenie

Po zamyslení sa nad implementáciou softvéru som identifikoval niekoľko oblastí, ktoré by mohli byť nápomocné vylepšenia pre náročných používateľov.

  1. Dynamické vykresľovanie vrstiev. V súčasnej dobe mám preddefinovaný zoznam vrstiev, ktoré budú vykreslené, to je všetko. Súčasťou odôvodnenia boli aj ťažkosti s určením, či má byť vrstva čiarou alebo výplňou. Výsledkom je, že takmer pri každom súbore OSM, ktorý otvoríte, vás privíta množstvo upozornení na vrstvy, ktoré sa nebudú vykresľovať. Často sú také minimálne, že to nie je problém, ale určite budú chýbať kritické vrstvy. Dynamické vykresľovanie vrstiev by tieto obavy odstránilo.
  2. Dynamické priradenie vrstvy. To ide ruka v ruke s #1; Ak chcete dynamické vykresľovanie vrstiev, potrebujete dynamické priradenie vrstvy (t. j. identifikáciu výplňovej vrstvy oproti čiarovej vrstve). To som mohol rozumne dosiahnuť, ako som sa dozvedel, pretože spôsoby, ktorých prvý a posledný uzol sú rovnaké, budú uzavreté cesty, a preto budú vyplnené.
  3. Farebné skupiny. Štylizovaná mapa má často niekoľko vrstiev, ktoré majú rovnaký štýl, a umožnenie používateľovi súčasne zmeniť štýl skupiny by výrazne skrátilo čas strávený úpravou jednotlivých vrstiev používateľa.

Krok 7: Zatváranie myšlienok

Záverečné myšlienky
Záverečné myšlienky
Záverečné myšlienky
Záverečné myšlienky
Záverečné myšlienky
Záverečné myšlienky

Ďakujem vám všetkým, že ste si našli čas na prečítanie môjho Pokynu. Tento projekt predstavuje vyvrcholenie mnohých hodín výskumu, návrhu, programovania a ladenia. Dúfam, že sa mi podarilo poskytnúť štartovaciu rampu, z ktorej môžete postaviť svoj vlastný projekt alebo nadviazať na to, čo som už napísal. Tiež dúfam, že moje nedostatky a tipy poskytnú veľa bodov, ktoré je potrebné vziať do úvahy pri navrhovaní. Ak máte menší záujem o program a viac sa snažíte vytvárať umelecké diela, rád by som v komentároch videl, čo robíte. Možnosti sú nekonečné!

Osobitné poďakovanie patrí prispievateľom OpenStreetMap! Podobné projekty by neboli možné bez ich značného úsilia.

Ak máte akékoľvek otázky v komentároch, dajte mi vedieť!

Mapová výzva
Mapová výzva
Mapová výzva
Mapová výzva

Druhý vo výzve v Mapách

Odporúča: