Talaan ng mga Nilalaman:

Paano Lumikha ng Mga Custom na Stylized na Mapa Gamit ang OpenStreetMap: 7 Mga Hakbang (na may Mga Larawan)
Paano Lumikha ng Mga Custom na Stylized na Mapa Gamit ang OpenStreetMap: 7 Mga Hakbang (na may Mga Larawan)

Video: Paano Lumikha ng Mga Custom na Stylized na Mapa Gamit ang OpenStreetMap: 7 Mga Hakbang (na may Mga Larawan)

Video: Paano Lumikha ng Mga Custom na Stylized na Mapa Gamit ang OpenStreetMap: 7 Mga Hakbang (na may Mga Larawan)
Video: ТАКОВ МОЙ ПУТЬ В L4D2 2024, Nobyembre
Anonim
Paano Lumikha ng Mga Custom na Stylized na Mapa Gamit ang OpenStreetMap
Paano Lumikha ng Mga Custom na Stylized na Mapa Gamit ang OpenStreetMap

Sa itinuturo na ito, ilalarawan ko ang isang proseso kung saan makakagawa ka ng iyong sariling mga naka-istilong mapa na mapa. Ang isang naka-istilong mapa ay isang mapa kung saan maaaring tukuyin ng gumagamit kung aling mga layer ng data ang isinalarawan, pati na rin tukuyin ang istilo kung saan ang visual na layer ay isinalarawan. Ilalarawan ko muna ang proseso kung saan maaari kang magsulat ng software upang mabago ang istilo ng mga mapa, na sinusundan ng isang halimbawa ng software na Python na isinulat ko upang maisagawa ang gawaing ito.

Ang sumusunod na video ay nagha-highlight kung paano ako personal na bumuo ng mga naka-istilong mapa, ngunit patuloy na basahin ang mga malapit na detalye. Tuwang tuwa ako na makita kung ano ang nilikha ng komunidad!

Ano ang aking motibasyon sa likod ng proyektong ito?

Sa totoo lang, sinimulan ko ang proyektong ito dahil naisip kong magiging kasiya-siya itong gawin. Ang ideyang ito ay gumagalaw sa aking isipan para sa nakaraang taon, at sa wakas ay kinuha ko ang oras na kailangan ko upang maisakatuparan ito. Matapos ang isang araw ng prototyping sa ilang pangunahing pag-script, nagawa kong makabuo ng labis na nangangako na mga resulta - napakahusay na alam kong kailangan kong gawing pormal ang aking mga script na ang iba ay madaling makakagawa ng kanilang mga likha.

Ang aking pagganyak sa pagsusulat ng itinuturo na ito ay dahil sa ang katunayan na natagpuan ko ang napakaliit na impormasyon sa kung paano lumikha ng iyong sariling mga inilarawan sa istilo na mga mapa mula sa simula. Inaasahan kong ibahagi ang natutunan ko sa komunidad.

Mga mapagkukunan / Link:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Repository ng Github

Mga gamit

  • Isang pamamahagi ng Python (ginamit ko ang Anaconda & Python 3.6)
  • PyQt5 (para sa mga dependency ng GUI)

Hakbang 1: Pagtukoy sa Proseso I: Pag-download ng OSM File

Pagtukoy sa Proseso I: Pag-download ng OSM File
Pagtukoy sa Proseso I: Pag-download ng OSM File

Nang una kong sinimulan ang proyektong ito, ang pinaka-nakasisilaw na tanong ay, "saan ako makakakuha ng data ng mapa." Naturally, tulad ng aasahan mo, naisip ko agad ang Google Maps. Pagkatapos ng makabuluhang pagsasaliksik, natuklasan ko na talagang ayaw ng Google ang mga taong naglalaro sa kanilang data, sa isang malikhaing kahulugan o kung hindi man. Sa katunayan, tahasang hindi pinapayagan ang web-scraping mula sa Google Maps.

Sa kabutihang palad, ang aking kawalan ng pag-asa ay panandalian sa aking pagtuklas ng OpenStreetMap (OSM). Ang OSM ay isang nakikipagtulungan na proyekto na kinasasangkutan ng mga tao sa buong mundo na nagbibigay ng data. Tahasang pinahihintulutan ng OSM ang bukas na paggamit ng kanilang data sa pangalan ng Open Source software. Tulad ng naturan, ang pagbisita sa OSM webpage ay kung saan nagsisimula ang paglalakbay sa stylizing ng mapa.

Pagdating sa website ng OSM, mag-click sa tab na "I-export" upang maipakita ang mga tool sa pag-export ng mapa. Ngayon, mag-zoom in upang matingnan ang rehiyon kung saan ka interesado sa pagkolekta ng data ng mapa. Piliin ang link na "Manu-manong pumili ng ibang lugar", na magdadala ng isang kahon sa iyong screen. Ihugis at ilagay ang kahon na ito sa rehiyon ng interes. Kapag nasiyahan, i-click ang pindutang "I-export" upang i-download ang iyong file ng data ng OSM.

Tandaan # 1: Kung ang iyong napiling rehiyon ay naglalaman ng labis na data, makakakuha ka ng isang error na napili mo ang masyadong maraming mga node. Kung nangyari ito sa iyo, i-click ang pindutang "Overpass API" upang i-download ang iyong mas malaking file.

Tandaan # 2: Kung ang iyong na-download na file ng OSM ay mas malaki sa 30MB, ang programang Python na aking isinulat ay kapansin-pansin na mabagal. Kung determinado kang gumamit ng isang malaking rehiyon, isaalang-alang ang pagsusulat ng isang script upang itapon ang labis na data na hindi mo pinaplano na iguhit.

Hakbang 2: Pagtukoy sa Proseso II: Pag-unawa sa Data

Pagtukoy sa Proseso II: Pag-unawa sa Data
Pagtukoy sa Proseso II: Pag-unawa sa Data
Pagtukoy sa Proseso II: Pag-unawa sa Data
Pagtukoy sa Proseso II: Pag-unawa sa Data
Pagtukoy sa Proseso II: Pag-unawa sa Data
Pagtukoy sa Proseso II: Pag-unawa sa Data
Pagtukoy sa Proseso II: Pag-unawa sa Data
Pagtukoy sa Proseso II: Pag-unawa sa Data

"Nasa akin ang data … ngayon ano?"

Magsimula sa pamamagitan ng pagbubukas ng iyong na-download na OSM file sa iyong paboritong software sa pag-edit ng teksto. Mapapansin mo muna na ito ay isang XML file, na mahusay! Ang XML ay madaling sapat upang mai-parse. Ang simula ng iyong file ay dapat magmukhang halos magkapareho sa unang larawan ng hakbang na ito - ang ilang pangunahing mga metadata at heograpikong hangganan ay nakalista.

Sa pag-scroll mo ng file, mapapansin mo ang tatlong elemento ng data na ginamit sa buong:

  1. Mga node
  2. Mga paraan
  3. Relasyon

Ang pinaka-pangunahing elemento ng data, ang isang node ay may kakaibang pagkakakilanlan, latitude, at longitude na nauugnay dito. Siyempre, may karagdagang metadata, ngunit maaari naming ligtas na itapon ito.

Ang mga paraan ay mga koleksyon ng mga node. Ang isang paraan ay maaaring mai-render bilang isang nakapaloob na hugis o bilang isang bukas na linya na linya. Ang mga paraan ay binubuo ng isang koleksyon ng mga node na kinilala ng kanilang natatanging pagkakakilanlan. Naka-tag ang mga ito ng mga susi na tumutukoy sa pangkat ng data na kinabibilangan nila. Halimbawa, ang paraang nakalarawan sa pangatlong imaheng nasa itaas ay kabilang sa pangkat ng data na "lugar," at ang subgroup na "isla." Sa madaling salita, ang partikular na paraan na ito ay kabilang sa layer ng "isla" sa ilalim ng pangkat na "lugar". Ang mga paraan ay mayroon ding mga natatanging pagkakakilanlan.

Panghuli, ang mga ugnayan ay mga koleksyon ng mga paraan. Ang isang ugnayan ay maaaring kumatawan sa isang kumplikadong hugis na may mga butas o may maraming mga rehiyon. Ang mga relasyon ay magkakaroon din ng isang natatanging pagkakakilanlan at mai-tag nang katulad sa mga paraan.

Maaari kang magbasa nang higit pa tungkol sa mga elementong ito ng data mula sa OSM wiki:

  • Mga node
  • Mga paraan
  • Relasyon

Hakbang 3: Pagtukoy sa Proseso III: Pag-digest ng Data

Pagtukoy sa Proseso III: Pag-digest ng Data
Pagtukoy sa Proseso III: Pag-digest ng Data

Ngayon ay dapat magkaroon ka ng kahit isang mababaw na pag-unawa sa mga elemento ng data na bumubuo sa isang OSM file. Sa puntong ito, interesado kaming basahin ang data ng OSM gamit ang iyong piniling wika. Habang ang hakbang na ito ay nakasentro sa Python, kung ayaw mong gumamit ng Python, dapat mo pa ring basahin ang bahaging ito dahil naglalaman ito ng ilang mga tip at trick.

Ang xml package ay isinama bilang default sa karamihan ng karaniwang pamamahagi ng Python. Gagamitin namin ang package na ito upang mas madaling ma-parse ang aming OSM file tulad ng ipinakita sa unang imahe. Sa isang solong para sa loop, maaari mong iproseso ang paghawak ng data ng OSM para sa bawat partikular na elemento ng data.

Sa huling linya ng imahe, mapapansin mong sinusuri ko ang tag na 'hangganan'. Ang hakbang na ito ay napakahalaga sa pagsasalin ng mga halagang latitude at longitude sa mga pixel sa screen. Masidhi kong inirerekumenda ang pagpapatakbo ng conversion na ito sa oras na na-load mo ang OSM file, dahil ang masinsinang pag-convert ng data ay masinsinang proseso.

Pinag-uusapan ang pag-convert ng mga latitude at longitude sa mga coordinate sa screen, narito ang isang link sa pagsulat na pagpapaandar na isinulat ko. Malamang mapapansin mo ang isang bagay na medyo kakaiba sa pag-convert ng latitude sa mga coordinate sa screen. Mayroong dagdag na hakbang na kasangkot kung ihahambing sa longitude! Bilang ito ay lumiliko, ang data ng OSM ay naka-modelo gamit ang pamamaraang Pseudo-Mercator projection. Sa kasamaang palad, ang OSM ay may kamangha-manghang dokumentasyon tungkol sa paksang ito dito, at ibinibigay nila ang mga pagpapaandar ng conversion ng latitude para sa isang makabuluhang bilang ng mga wika. Galing!

Tandaan: Sa aking code, ang coordinate ng screen (0, 0) ay ang itaas na kaliwang sulok ng screen.

Hakbang 4: Pagpapatupad ng Python Map Stylizer

Pagpapatupad ng Python Map Stylizer
Pagpapatupad ng Python Map Stylizer
Pagpapatupad ng Python Map Stylizer
Pagpapatupad ng Python Map Stylizer
Pagpapatupad ng Python Map Stylizer
Pagpapatupad ng Python Map Stylizer

Hanggang sa puntong ito, tinalakay ko ang file ng data ng OSM - kung ano ito, kung paano ito basahin, at kung ano ang gagawin dito. Ngayon ay tatalakayin ko ang software na isinulat ko upang talakayin ang pangkakanyahan sa visualization ng mapa (GitHub repo na ibinigay sa pagpapakilala).

Ang aking tukoy na pagpapatupad ay nakatuon sa kontrol ng gumagamit sa pag-render ng pipeline. Partikular, pinapayagan ko ang gumagamit na piliin ang mga layer na nais nilang makita at kung paano nila nais na mailarawan ang layer na iyon. Tulad ng maikling sabi ko kanina, mayroong dalawang klase ng mga elemento na na-render: punan ang mga item at mga item sa linya. Ang mga pagpuno ay tinukoy lamang ng isang kulay, habang ang mga linya ay tinukoy ng kulay, lapad ng linya, istilo ng linya, istilo ng cap ng linya, at istilo ng pagsali sa linya.

Habang gumagawa ng mga pagbabago ang gumagamit sa mga istilo ng layer at kakayahang makita, ang mga pagbabago ay makikita sa mapa widget sa kanan. Kapag nabago ng isang gumagamit ang hitsura ng mapa sa kanilang kasiyahan, maaari niyang ayusin ang maximum na sukat ng mapa at i-save ang mapa bilang isang imahe sa kanyang computer. Sa pag-save ng isang imahe, isang file ng pagsasaayos ng gumagamit ay nai-save din. Tinitiyak nito na maaalala ng isang gumagamit at muling magagamit ang pagsasaayos na ginamit niya upang makabuo ng isang partikular na imahe anumang oras.

Hakbang 5: Kakulangan sa Pagpapatupad + Solusyon

Pagpapanatili ng drawback + Solusyon
Pagpapanatili ng drawback + Solusyon
Pagpapanatili ng drawback + Solusyon
Pagpapanatili ng drawback + Solusyon

Nang una akong magsimulang mag-istilo ng isang mapa nang manu-mano, natutunan ko na ito ay isang nakakapagod na proseso. Ang pag-aalok ng maximum na kontrol ng gumagamit ay maaaring maging napakalaki dahil sa maraming bilang ng mga magagamit na "mga knobs." Gayunpaman, mayroong isang simpleng solusyon, na nagsasangkot ng kaunting dagdag na scripting.

Nagsimula ako sa pamamagitan ng pagkilala kung aling mga layer ang partikular na interesado ako. Para sa layunin ng pagtuturo na ito, sabihin nating mas interesado ako sa mga gusali (lahat ng mga ito), mga ilog, pangunahing mga haywey, at mga kalye sa ibabaw. Magsusulat ako ng isang script kung saan lumilikha ako ng isang halimbawa ng Configuration, ang toggle layer ay nagsasaad nang naaangkop gamit ang setItemState () function at tinukoy na mga pare-pareho, at nagtatakda ng mga kulay batay sa kung paano ko nais lumitaw ang aking mga layer gamit ang setValue (). Ang nagresultang file ng pagsasaayos na nai-save ay maaaring makopya sa folder ng mga config at mai-load ng gumagamit.

Ang isang halimbawa ng iskrip ay nasa imahe sa itaas. Ang pangalawang imahe ay isang sample ng kung ano ang magiging hitsura ng mga pagpapaandar ng helper, at dahil lahat sila ay magkapareho, kasama lamang ang iba't ibang mga pare-pareho, isinama ko lamang ang isang larawan ng isang halimbawa.

Hakbang 6: Mga Lugar para sa Pagpapabuti

Mga Lugar para sa Pagpapabuti
Mga Lugar para sa Pagpapabuti

Matapos sumalamin sa aking pagpapatupad ng software, nakilala ko ang maraming mga lugar na magiging kapaki-pakinabang na mga pagpapabuti para sa mga gumagamit ng kuryente.

  1. Pag-render ng Dynamic na layer. Sa kasalukuyan, mayroon akong isang paunang natukoy na listahan ng mga layer na ibibigay, iyon lang. Bahagi ng pagbibigay-katwiran ay ang kahirapan sa pagtukoy kung ang isang layer ay dapat na isang linya o isang pagpunan. Bilang isang resulta, sa halos bawat file na OSM na iyong binubuksan, sasalubungin ka ng isang babala tungkol sa mga layer na hindi maibigay. Kadalasan ang mga ito ay napakaliit na ito ay hindi isang isyu, ngunit dapat may mga kritikal na layer na nawawala. Aalisin ng pag-render ng Dynamic na layer ang mga alalahanin na ito.
  2. Pagtatalaga ng Dynamic na layer. Magkakasabay ito sa # 1; kung nais mo ang pag-render ng pabago-bagong layer, kailangan mo ng pagtatalaga ng pabago-bagong layer (ibig sabihin, pagkilala sa isang layer ng pagpuno kumpara sa isang layer ng linya). Makatuwirang magagawa ito, tulad ng natutunan ko, dahil Ang mga Paraan na ang una at huling node ay pareho ay nakapaloob na mga landas at samakatuwid ay napunan.
  3. Mga Pangkat ng Kulay. Ang isang naka-istilong mapa ay madalas na may maraming mga layer na may parehong estilo, at ang pagpapagana sa gumagamit na baguhin ang istilo ng isang pangkat nang sabay-sabay ay lubos na mabawasan ang oras ng gumagamit na ginugol sa pag-edit ng mga layer nang paisa-isa.

Hakbang 7: Mga Saloobin sa Pagsara

Isinasara ang Mga Saloobin
Isinasara ang Mga Saloobin
Isinasara ang Mga Saloobin
Isinasara ang Mga Saloobin
Isinasara ang Mga Saloobin
Isinasara ang Mga Saloobin

Salamat sa lahat sa paglalaan ng oras upang basahin ang aking Instructable. Ang proyektong ito ay kumakatawan sa paghantong ng maraming oras ng pagsasaliksik, disenyo, programa, at pag-debug. Inaasahan kong nakapagbigay ako ng isang launch pad kung saan maaari kang bumuo ng iyong sariling proyekto o bumuo sa kung ano ang naisulat ko na. Inaasahan ko rin na ang aking mga pagkukulang at tip ay nagbibigay ng maraming mga puntos upang isaalang-alang sa iyong disenyo. Kung hindi ka gawi sa programa at higit na may hilig na lumikha ng mga likhang sining, nais kong makita kung ano ang iyong ginagawa sa mga komento! Ang mga posibilidad ay walang katapusan!

Espesyal na salamat sa mga nag-ambag ng OpenStreetMap! Ang mga proyektong tulad nito ay hindi magiging posible kung wala ang kanilang makabuluhang pagsisikap.

Mangyaring ipaalam sa akin kung mayroon kang anumang mga katanungan sa mga komento!

Hamon sa Maps
Hamon sa Maps
Hamon sa Maps
Hamon sa Maps

Runner Up sa Hamon sa Maps

Inirerekumendang: