Sisällysluettelo:

Omien tyyliteltyjen karttojen luominen OpenStreetMapin avulla: 7 vaihetta (kuvilla)
Omien tyyliteltyjen karttojen luominen OpenStreetMapin avulla: 7 vaihetta (kuvilla)

Video: Omien tyyliteltyjen karttojen luominen OpenStreetMapin avulla: 7 vaihetta (kuvilla)

Video: Omien tyyliteltyjen karttojen luominen OpenStreetMapin avulla: 7 vaihetta (kuvilla)
Video: C-MAP REVEAL karttakortti 2024, Marraskuu
Anonim
Mukautettujen tyyliteltyjen karttojen luominen OpenStreetMapin avulla
Mukautettujen tyyliteltyjen karttojen luominen OpenStreetMapin avulla

Tässä ohjeessa kuvaan prosessia, jolla voit luoda omia räätälöityjä tyyliteltyjä karttoja. Tyylitelty kartta on kartta, jossa käyttäjä voi määrittää, mitkä tietokerrokset visualisoidaan, sekä määrittää tyylin, jolla jokainen kerros visualisoidaan. Kuvailen ensin prosessia, jonka avulla voit kirjoittaa ohjelmistoja tyylitellä karttoja, ja sen jälkeen esimerkkiä Python -ohjelmistosta, jonka kirjoitin tämän tehtävän suorittamiseksi.

Seuraavassa videossa korostetaan, kuinka luon henkilökohtaisesti tyyliteltyjä karttoja, mutta jatka lukemista intiimeistä yksityiskohdista. Odotan innolla, mitä yhteisö luo!

Mikä on motiivini tämän projektin takana?

Suoraan sanottuna aloitin tämän projektin, koska ajattelin, että se olisi hauskaa tehdä. Tämä ajatus on pyörinyt mielessäni viimeisen vuoden ajan, ja vihdoin otin tarvitsemani ajan toteuttaakseni sen. Päivän prototyyppien tekemisen jälkeen, jossa oli joitain perusskriptejä, pystyin tuottamaan erittäin lupaavia tuloksia - niin lupaavia, että tiesin, että minun oli virallistettava skriptini niin, että muut voivat helposti tehdä omia luomuksiaan.

Motivaationi tämän ohjeen kirjoittamisessa johtuu siitä, että löysin hyvin vähän tietoa siitä, miten voit luoda omia tyyliteltyjä karttoja tyhjästä. Toivon, että voin jakaa oppimani yhteisön kanssa.

Resurssit/linkit:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Github -arkisto

Tarvikkeet

  • Python -jakelu (käytin Anaconda & Python 3.6)
  • PyQt5 (GUI -riippuvuuksille)

Vaihe 1: Määrittele prosessi I: OSM -tiedoston lataaminen

Prosessin määrittäminen I: OSM -tiedoston lataaminen
Prosessin määrittäminen I: OSM -tiedoston lataaminen

Kun aloitin tämän projektin, hämmästyttävin kysymys oli "mistä saan karttatietoja". Luonnollisesti, kuten odotit, ajattelin heti Google Mapsia. Merkittävien tutkimusten jälkeen huomasin, että Google ei todellakaan halua ihmisten leikkivän heidän tiedoillaan luovassa mielessä tai muuten. Itse asiassa ne kieltävät nimenomaisesti verkkokartoituksen Google Mapsista.

Onneksi epätoivoni oli lyhytikäinen, kun löysin OpenStreetMapin (OSM). OSM on yhteistyöhanke, johon osallistuvat ihmiset ympäri maailmaa tuottavat dataa. OSM sallii nimenomaisesti tietojensa avoimen käytön avoimen lähdekoodin ohjelmiston nimissä. Sellaisena OSM -verkkosivustolla käynti alkaa kartan tyylitysmatkalla.

Kun olet saapunut OSM -verkkosivustolle, näytä kartan vientityökalut napsauttamalla "Vie" -välilehteä. Lähennä nyt nähdäksesi alueen, jonka kanssa haluat kerätä karttatietoja. Valitse "Valitse toinen alue manuaalisesti" -linkki, joka tuo ruudulle ruudun. Muotoile ja aseta tämä laatikko kiinnostavan alueen päälle. Kun olet tyytyväinen, lataa OSM -datatiedosto napsauttamalla "Vie" -painiketta.

Huomautus 1: Jos valitsemasi alue sisältää liikaa dataa, saat virheilmoituksen, että olet valinnut liian monta solmua. Jos näin käy, lataa suurempi tiedosto napsauttamalla "Overpass API" -painiketta.

Huomautus 2: Jos ladattu OSM -tiedosto on suurempi kuin 30 Mt, kirjoittamani Python -ohjelma hidastuu huomattavasti. Jos olet päättänyt käyttää suurta aluetta, harkitse komentosarjan kirjoittamista heittääksesi pois tarpeettomat tiedot, joita et aio piirtää.

Vaihe 2: Määrittele prosessi II: Tietojen ymmärtäminen

Prosessin määrittäminen II: Tietojen ymmärtäminen
Prosessin määrittäminen II: Tietojen ymmärtäminen
Prosessin määrittäminen II: Tietojen ymmärtäminen
Prosessin määrittäminen II: Tietojen ymmärtäminen
Prosessin määrittäminen II: Tietojen ymmärtäminen
Prosessin määrittäminen II: Tietojen ymmärtäminen
Prosessin määrittäminen II: Tietojen ymmärtäminen
Prosessin määrittäminen II: Tietojen ymmärtäminen

"Minulla on tiedot … mitä nyt?"

Aloita avaamalla ladattu OSM -tiedosto suosikki tekstinkäsittelyohjelmistoosi. Huomaat ensin, että tämä on XML -tiedosto, mikä on hienoa! XML on riittävän helppo jäsentää. Tiedoston alun pitäisi näyttää lähes identtiseltä tämän vaiheen ensimmäisen kuvan kanssa - joitakin perustason metatietoja ja maantieteellisiä rajoja luetellaan.

Kun vierität tiedostoa, huomaat kolme dataelementtiä, joita käytetään kaikkialla:

  1. Solmut
  2. Tapoja
  3. Suhteet

Yksinkertaisin tietoelementti solmussa on yksinkertaisesti yksilöllinen tunniste, leveys- ja pituusaste. Tietenkin on olemassa muita metatietoja, mutta voimme hylätä ne turvallisesti.

Tavat ovat solmukokoelmia. Tapa voidaan tehdä suljetuksi muodoksi tai avoimeksi viivaksi. Tapoja ovat kokoelma solmuja, jotka yksilöidään yksilöllisellä tunnisteellaan. Ne on merkitty avaimilla, jotka määrittävät tietoryhmän, johon he kuuluvat. Esimerkiksi yllä olevassa kolmannessa kuvassa esitetty tapa kuuluu tietoryhmään "paikka" ja sen alaryhmään "saari". Toisin sanoen tämä erityinen tapa kuuluu "saari" -kerrokseen "paikka" -ryhmän alle. Tapoilla on myös yksilöllisiä tunnisteita.

Lopuksi suhteet ovat kokoelmia tapoja. Suhde voi edustaa monimutkaista muotoa, jossa on reikiä tai useita alueita. Suhteilla on myös yksilöllinen tunniste, ja ne merkitään samalla tavalla kuin tavat.

Voit lukea lisää näistä tietoelementeistä OSM -wikistä:

  • Solmut
  • Tapoja
  • Suhteet

Vaihe 3: Määrittele prosessi III: Tietojen käsittely

Prosessin määrittäminen III: tietojen käsittely
Prosessin määrittäminen III: tietojen käsittely

Nyt sinulla pitäisi olla ainakin pinnallinen ymmärrys OSM -tiedoston tietoelementteistä. Tässä vaiheessa olemme kiinnostuneita lukemaan OSM -tiedot valitsemallasi kielellä. Vaikka tämä vaihe on Python-keskeinen, jos et halua käyttää Pythonia, sinun kannattaa silti lukea tämä osa, koska se sisältää muutamia vinkkejä.

Xml -paketti sisältyy oletusarvoisesti useimpiin Python -jakeluihin. Käytämme tätä pakettia jäsentämään helposti OSM -tiedostomme, kuten ensimmäisessä kuvassa. Yhdessä silmukassa voit käsitellä OSM -tietojen käsittelyä kullekin tietylle tietoelementille.

Kuvan viimeisellä rivillä huomaat, että tarkistan 'bounds' -tunnisteen. Tämä vaihe on erittäin tärkeä muunnettaessa leveys- ja pituusasteita näytön pikseleiksi. Suosittelen suorittamaan tämän muunnoksen OSM -tiedoston lataamisen yhteydessä, koska tietojen massamuunnos on prosessiintensiivinen.

Puhutaan leveys- ja pituusasteiden muuntamisesta näytön koordinaateiksi, tässä on linkki kirjoittamaani laskutoimintoon. Huomaat todennäköisesti jotain hieman outoa muuttaessasi leveysasteita näytön koordinaateiksi. Siihen liittyy ylimääräinen vaihe verrattuna pituusasteeseen! Kuten käy ilmi, OSM-tiedot mallinnetaan käyttämällä Pseudo-Mercator-projisointimenetelmää. Onneksi OSM: llä on fantastinen dokumentaatio tästä aiheesta täällä, ja ne tarjoavat leveysasteiden muuntotoimintoja huomattavalle määrälle kieliä. Mahtava!

Huomautus: Koodissani näytön koordinaatti (0, 0) on näytön vasen yläkulma.

Vaihe 4: Python Map Stylizer -toteutus

Python Map Stylizer -toteutus
Python Map Stylizer -toteutus
Python Map Stylizer -toteutus
Python Map Stylizer -toteutus
Python Map Stylizer -toteutus
Python Map Stylizer -toteutus

Tähän asti olen keskustellut OSM -datatiedostosta - mitä se on, miten se luetaan ja mitä sille tehdään. Nyt keskustelen ohjelmistosta, jonka kirjoitin tyylillisen kartan visualisoinnin käsittelemiseksi (GitHub -repo esittelyssä).

Erityinen toteutukseni keskittyy käyttäjien hallintaan renderointiputkessa. Erityisesti annan käyttäjän valita tasot, jotka he haluavat nähdä ja miten he haluavat kyseisen tason visualisoivan. Kuten aiemmin lyhyesti mainitsin, renderöityjä elementtejä on kaksi: täyttö- ja rivikohdat. Täytteet määritellään vain värin mukaan, kun taas viivat määritellään värin, viivan leveyden, viivatyylin, viivan korkityylin ja rivin yhdistämistyylin mukaan.

Kun käyttäjä tekee muutoksia tasotyyleihin ja näkyvyyteen, muutokset näkyvät kartan widgetissä oikealla. Kun käyttäjä on muokannut kartan ulkonäköä tyydyttävällä tavalla, hän voi säätää kartan enimmäismitat ja tallentaa kartan kuvana tietokoneelleen. Kuvaa tallennettaessa tallennetaan myös käyttäjän määritystiedosto. Tämä varmistaa, että käyttäjä voi milloin tahansa muistaa ja käyttää uudelleen kokoonpanoa, jota hän käytti tietyn kuvan luomiseen.

Vaihe 5: Toteutuksen haitta + ratkaisu

Toteutuksen haittapuoli + ratkaisu
Toteutuksen haittapuoli + ratkaisu
Toteutuksen haittapuoli + ratkaisu
Toteutuksen haittapuoli + ratkaisu

Kun aloin kartoittaa karttaa manuaalisesti, opin, että tämä oli melko työläs prosessi. Käyttäjän maksimaalisen hallinnan tarjoaminen voi olla yksinkertaisesti ylivoimaista käytettävissä olevien "nuppien" suuren määrän vuoksi. On kuitenkin olemassa yksinkertainen ratkaisu, joka sisältää hieman ylimääräisiä komentosarjoja.

Aloitin tunnistamalla, mistä kerroksista olen erityisen kiinnostunut. Tässä ohjeessa sanotaan, että minua kiinnostavat eniten rakennukset (kaikki), joet, päätiet ja pintatiet. Kirjoittaisin komentosarjan, jossa luon kokoonpanon ilmentymän, vaihdan kerrostilat asianmukaisesti käyttämällä setItemState () -funktiota ja määritettyjä vakioita ja asetan värit sen mukaan, miten haluaisin kerrosten näkyvän käyttämällä setValue () -toimintoa. Tuloksena oleva tallennettava määritystiedosto voidaan kopioida configs -kansioon ja käyttäjä voi ladata sen.

Esimerkki komentosarjasta on yllä olevassa kuvassa. Toinen kuva on näyte siitä, miltä aputoiminnot näyttäisivät, ja koska ne ovat pohjimmiltaan kaikki identtisiä, vain vaihtelevilla vakioilla, lisäsin vain kuvan yhdestä esimerkistä.

Vaihe 6: Parannettavaa

Parannettavat alueet
Parannettavat alueet

Ohjelmistototeutukseni jälkeen olen tunnistanut useita alueita, jotka olisivat hyödyllisiä parannuksia virrankäyttäjille.

  1. Dynaaminen kerroksen renderointi. Tällä hetkellä minulla on ennalta määritetty luettelo tasoista, jotka renderöidään. Osa perusteluista oli vaikeuksia määrittää, onko kerroksen oltava viiva vai täyttö. Tämän seurauksena lähes jokaisella avaamallasi OSM -tiedostolla saat tervehdyksen joukosta varoituksia kerroksista, joita ei renderöidä. Usein nämä ovat niin vähäisiä, ettei se ole ongelma, mutta kriittisiä tasoja puuttuu varmasti. Dynaaminen kerroksen renderointi poistaisi nämä huolenaiheet.
  2. Dynaaminen kerrosmääritys. Tämä kulkee käsi kädessä #1: n kanssa; jos haluat dynaamisen tason renderöinnin, tarvitset dynaamisen kerroksen määrityksen (ts. täyttökerroksen ja viivakerroksen tunnistaminen). Tämä voitaisiin kohtuudella saavuttaa, kuten olen oppinut, koska tiet, joiden ensimmäinen ja viimeinen solmu ovat samat, on suljettuja polkuja ja siksi täytetty.
  3. Väriryhmät. Tyylitetyssä kartassa on usein useita tasoja, joilla on sama tyyli, ja jos käyttäjä voi muokata ryhmän tyyliä samanaikaisesti, se vähentäisi huomattavasti käyttäjän aikaa kerrosten muokkaamiseen.

Vaihe 7: Ajatuksien sulkeminen

Sulkemisen ajatukset
Sulkemisen ajatukset
Sulkemisen ajatukset
Sulkemisen ajatukset
Sulkemisen ajatukset
Sulkemisen ajatukset

Kiitos kaikille, että käytitte aikaa Instructableni lukemiseen. Tämä projekti edustaa useiden tuntien tutkimusta, suunnittelua, ohjelmointia ja virheenkorjausta. Toivottavasti olen pystynyt tarjoamaan laukaisualustan, josta voit rakentaa oman projektisi tai rakentaa jo kirjoittamani. Toivon myös, että puutteeni ja vinkkini tarjoavat paljon näkökohtia suunnittelussa. Jos olet vähemmän taipuvainen ohjelmoimaan ja enemmän taipuvainen luomaan taideteoksia, haluaisin nähdä, mitä teet kommenteissa! Mahdollisuudet ovat rajattomat!

Erityiset kiitokset OpenStreetMap -avustajille! Tällaiset hankkeet eivät olisi mahdollisia ilman huomattavia ponnisteluja.

Kerro minulle, jos sinulla on kysyttävää kommenteissa!

Maps Challenge
Maps Challenge
Maps Challenge
Maps Challenge

Toinen sija Maps -haasteessa

Suositeltava: