Sisällysluettelo:
- Tarvikkeet
- Vaihe 1: Määrittele prosessi I: OSM -tiedoston lataaminen
- Vaihe 2: Määrittele prosessi II: Tietojen ymmärtäminen
- Vaihe 3: Määrittele prosessi III: Tietojen käsittely
- Vaihe 4: Python Map Stylizer -toteutus
- Vaihe 5: Toteutuksen haitta + ratkaisu
- Vaihe 6: Parannettavaa
- Vaihe 7: Ajatuksien sulkeminen
Video: Omien tyyliteltyjen karttojen luominen OpenStreetMapin avulla: 7 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
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
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
"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:
- Solmut
- Tapoja
- 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
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
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
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
Ohjelmistototeutukseni jälkeen olen tunnistanut useita alueita, jotka olisivat hyödyllisiä parannuksia virrankäyttäjille.
- 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.
- 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.
- 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
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!
Toinen sija Maps -haasteessa
Suositeltava:
Kannettavan älypeilin luominen/meikkilaatikkoyhdistelmän luominen: 8 vaihetta
Kannettavan älypeilin luominen/meikkilaatikkoyhdistelmän luominen: Viimeisenä projektina Davisin & Elkinsin yliopisto, päätin suunnitella ja luoda meikkimatkalaukun sekä suuremman peilin ja käyttää vadelmapiä ja taikuuspeiliohjelmistoa, joka toimisi porttina
Garmin -karttojen tekeminen Openstreetmapin avulla: 4 vaihetta
Garmin -karttojen tekeminen Openstreetmapin avulla: Rakastan vaellusta, mutta en käytä karttojen lukemista. Siksi ostin itselleni Garmin GPSMAP64 GPS: n. Karttahaasteessa näin ohjeen kuinka tehdä karttoja Garmin GPS: lle, tämä on erittäin hyvin kirjoitettu ohje ja se sai minut ajattelemaan kirjoittaa
Omien kuulokkeiden liittäminen matkapuhelimeen: 7 vaihetta
Kuinka kytkeä omat kuulokkeet matkapuhelimeen: Useimmissa matkapuhelimissa/matkapuhelimissa on roskasoviteltu sovitin, johon ne toimittavat kauheita kuulokkeita, jotka on kytketty kiinteästi handsfree-sarjaan. Tämän ohjeen avulla voit muuttaa nämä kuulokkeet kuulokeliitäntään, jotta voit
Omien ympäristön värivalopalkkien rakentaminen: 7 vaihetta (kuvilla)
Omien ympäröivien värivalopalkkien rakentaminen: Tämä ohje sisältää ohjeet LED -valopalkkien rakentamiseen, asentamiseen ja ohjaamiseen, jotta saadaan aikaan ympäröivän huoneen täysvärinen valaistus ja " ambilight " tyylinen videotehoste. Huomaa, että ledien välkkyminen ei ole niin havaittavissa tosielämässä kuin se
Bookhuddle.comin, verkkosivuston luominen kirjan tietojen löytämiseen, järjestämiseen ja jakamiseen, luominen: 10 vaihetta
Bookhuddle.comin, verkkosivuston luominen kirjan tietojen löytämiseen, järjestämiseen ja jakamiseen, luominen: Tässä viestissä kuvataan vaiheet, jotka liittyvät luomaan ja käynnistämään Bookhuddle.com -verkkosivusto, jonka tarkoituksena on auttaa lukijoita löytämään, järjestämään ja jakamaan kirjan tietoja. koskisi muiden verkkosivustojen kehittämistä