Përmbajtje:

Si të krijoni harta të stilizuara me porosi duke përdorur OpenStreetMap: 7 hapa (me fotografi)
Si të krijoni harta të stilizuara me porosi duke përdorur OpenStreetMap: 7 hapa (me fotografi)

Video: Si të krijoni harta të stilizuara me porosi duke përdorur OpenStreetMap: 7 hapa (me fotografi)

Video: Si të krijoni harta të stilizuara me porosi duke përdorur OpenStreetMap: 7 hapa (me fotografi)
Video: ТАКОВ МОЙ ПУТЬ В L4D2 2024, Nëntor
Anonim
Si të krijoni harta të stilizuara me porosi duke përdorur OpenStreetMap
Si të krijoni harta të stilizuara me porosi duke përdorur OpenStreetMap

Në këtë udhëzues, unë do të përshkruaj një proces me të cilin mund të krijoni hartat tuaja të stilizuara të bëra me porosi. Një hartë e stilizuar është një hartë ku përdoruesi mund të specifikojë se cilat shtresa të të dhënave janë vizualizuar, si dhe të përcaktojë stilin me të cilin vizualizohet secila shtresë. Së pari do të përshkruaj procesin përmes të cilit mund të shkruani softuer për të stilizuar hartat, e ndjekur nga një shembull i softuerit Python që kam shkruar për të kryer këtë detyrë.

Videoja e mëposhtme thekson sesi unë personalisht krijoj harta të stilizuara, por vazhdoni të lexoni për detajet intime. Jam shumë i emocionuar të shoh se çfarë krijon komuniteti!

Cili është motivimi im pas këtij projekti?

Sinqerisht, e fillova këtë projekt sepse mendova se do të ishte kënaqësi ta bëja. Kjo ide është tronditur në mendjen time vitin e kaluar dhe më në fund mora kohën që më duhej për ta realizuar atë. Pas një dite të prototipimit me disa skenarë bazë, unë isha në gjendje të gjeneroja rezultate jashtëzakonisht premtuese - aq premtuese saqë e dija që duhej të zyrtarizoja skenaret e mia në mënyrë që të tjerët të mund të krijonin lehtësisht krijimet e tyre.

Motivimi im për të shkruar këtë udhëzues është për faktin se kam gjetur informacion shumë minimal se si të krijoni hartat tuaja të stilizuara nga e para. Shpresoj të ndaj atë që kam mësuar me komunitetin.

Burimet/Lidhjet:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Depo Github

Furnizimet

  • Një shpërndarje Python (kam përdorur Anaconda & Python 3.6)
  • PyQt5 (për varësitë GUI)

Hapi 1: Përcaktimi i Procesit I: Shkarkimi i Skedarit OSM

Përcaktimi i procesit I: Shkarkimi i skedarit OSM
Përcaktimi i procesit I: Shkarkimi i skedarit OSM

Kur fillova për herë të parë këtë projekt, pyetja më e qartë ishte, "ku mund t'i gjej të dhënat e hartës". Natyrisht, siç e prisnit, menjëherë mendova për Google Maps. Pas hulumtimeve të rëndësishme, zbulova se Google me të vërtetë nuk dëshiron që njerëzit të luajnë me të dhënat e tyre, në një kuptim krijues ose ndryshe. Në fakt, ata në mënyrë eksplicite nuk lejojnë fshirjen e uebit nga Google Maps.

Për fat të mirë, dëshpërimi im ishte jetëshkurtër me zbulimin tim të OpenStreetMap (OSM). OSM është një projekt bashkëpunues që përfshin njerëz në të gjithë globin duke kontribuar me të dhëna. OSM lejon në mënyrë eksplicite përdorimin pa afat të të dhënave të tyre në emër të softuerit me burim të hapur. Si e tillë, vizita e uebfaqes së OSM është vendi ku fillon udhëtimi i stilizimit të hartës.

Pasi të keni mbërritur në faqen e internetit të OSM, klikoni në butonin "Eksport" për të treguar mjetet e eksportit të hartës. Tani, zmadhoni për të parë rajonin me të cilin jeni të interesuar në mbledhjen e të dhënave të hartës. Zgjidhni lidhjen "Zgjidhni manualisht një zonë të ndryshme", e cila do të shfaqë një kuti në ekranin tuaj. Formoni dhe vendoseni këtë kuti mbi rajonin e interesit. Pasi të jeni të kënaqur, klikoni butonin "Eksport" për të shkarkuar skedarin tuaj të të dhënave OSM.

Shënim #1: Nëse rajoni juaj i zgjedhur përmban shumë të dhëna, do të merrni një gabim që keni zgjedhur shumë nyje. Nëse ju ndodh kjo, klikoni në butonin "API i Mbikalimit" për të shkarkuar skedarin tuaj më të madh.

Shënim #2: Nëse skedari juaj i shkarkuar OSM është më i madh se 30MB, programi Python që kam shkruar do të ngadalësohet dukshëm. Nëse jeni të vendosur të përdorni një zonë të madhe, merrni parasysh të shkruani një skenar për të hedhur të dhëna të tepërta që nuk planifikoni të vizatoni.

Hapi 2: Përkufizimi i procesit II: Kuptimi i të dhënave

Përcaktimi i Procesit II: Kuptimi i të Dhënave
Përcaktimi i Procesit II: Kuptimi i të Dhënave
Përcaktimi i Procesit II: Kuptimi i të Dhënave
Përcaktimi i Procesit II: Kuptimi i të Dhënave
Përcaktimi i Procesit II: Kuptimi i të Dhënave
Përcaktimi i Procesit II: Kuptimi i të Dhënave
Përcaktimi i Procesit II: Kuptimi i të Dhënave
Përcaktimi i Procesit II: Kuptimi i të Dhënave

"Unë kam të dhëna … tani çfarë?"

Filloni duke hapur skedarin tuaj të shkarkuar OSM në programin tuaj të preferuar të redaktimit të tekstit. Së pari do të vini re se ky është një skedar XML, i cili është i shkëlqyeshëm! XML është mjaft e lehtë për tu analizuar. Fillimi i skedarit tuaj duhet të duket pothuajse identik me fotografinë e parë të këtij hapi - do të listohen disa metadata bazë dhe kufij gjeografikë.

Ndërsa lëvizni skedarin, do të vini re tre elementë të të dhënave të përdorura në të gjithë:

  1. Nyjet
  2. Mënyrat
  3. Marrëdhëniet

Elementi më themelor i të dhënave, një nyje thjesht ka një identifikues unik, gjerësi dhe gjatësi të lidhur me të. Sigurisht, ka meta të dhëna shtesë, por ne mund t'i hedhim me siguri.

Mënyrat janë koleksione të nyjeve. Një mënyrë mund të jepet si një formë e mbyllur ose si një vijë e hapur. Mënyrat përbëhen nga një koleksion nyjesh të identifikuara nga identifikuesi i tyre unik. Ato janë të etiketuara me çelësa që përcaktojnë grupin e të dhënave që i përkasin. Për shembull, mënyra e paraqitur në imazhin e tretë më sipër i përket grupit të të dhënave "vend" dhe nëngrupit të tij, "ishull". Me fjalë të tjera, kjo mënyrë e veçantë i përket shtresës "ishull" nën grupin "vend". Mënyrat gjithashtu kanë identifikues unikë.

Së fundmi, marrëdhëniet janë koleksion mënyrash. Një lidhje mund të përfaqësojë një formë komplekse me vrima ose me rajone të shumta. Marrëdhëniet gjithashtu do të kenë një identifikues unik dhe do të etiketohen në mënyrë të ngjashme me mënyrat.

Mund të lexoni më shumë rreth këtyre elementeve të të dhënave nga wiki OSM:

  • Nyjet
  • Mënyrat
  • Marrëdhëniet

Hapi 3: Përkufizimi i procesit III: Tretja e të dhënave

Përcaktimi i procesit III: Tretja e të dhënave
Përcaktimi i procesit III: Tretja e të dhënave

Tani duhet të keni të paktën një kuptim sipërfaqësor të elementeve të të dhënave që përbëjnë një skedar OSM. Në këtë pikë, ne jemi të interesuar të lexojmë të dhënat e OSM duke përdorur gjuhën tuaj të zgjedhur. Ndërsa ky hap është i përqendruar në Python, nëse nuk doni të përdorni Python, prapëseprapë duhet ta lexoni këtë pjesë pasi përmban disa këshilla dhe truqe.

Paketa xml përfshihet si parazgjedhje me shumicën e shpërndarjeve standarde Python. Ne do ta përdorim këtë paketë për të analizuar shumë lehtë skedarin tonë OSM siç tregohet në imazhin e parë. Në një lak të vetëm për, mund të përpunoni trajtimin e të dhënave OSM për secilin element të veçantë të të dhënave.

Në rreshtin përfundimtar të figurës, do të vini re se unë kontrolloj për etiketën "kufij". Ky hap është me rëndësi jetike në përkthimin e vlerave të gjerësisë dhe gjatësisë në piksele në ekran. Unë rekomandoj që ta ktheni këtë konvertim në kohën kur ngarkoni skedarin OSM, pasi konvertimi masiv i të dhënave është proces intensiv.

Duke folur për shndërrimin e gjerësive dhe gjatësive në koordinatat e ekranit, këtu është një lidhje me funksionin e llogaritjes që kam shkruar. Me shumë mundësi do të vini re diçka pak të çuditshme në shndërrimin e gjerësisë gjeografike në koordinatat e ekranit. Ka një hap shtesë të përfshirë kur krahasohet me gjatësinë gjeografike! Siç rezulton, të dhënat OSM janë modeluar duke përdorur metodën e projeksionit Pseudo-Mercator. Për fat të mirë, OSM ka dokumentacion fantastik në lidhje me këtë temë këtu, dhe ato ofrojnë funksione të konvertimit të gjerësisë për një numër të konsiderueshëm gjuhësh. Mbresëlënës!

Shënim: Në kodin tim, koordinata e ekranit (0, 0) është këndi i sipërm i majtë i ekranit.

Hapi 4: Zbatimi i stilizatorit të hartës Python

Zbatimi i Stilizatorit të Hartave Python
Zbatimi i Stilizatorit të Hartave Python
Zbatimi i Stilizatorit të Hartave Python
Zbatimi i Stilizatorit të Hartave Python
Zbatimi i Stilizatorit të Hartave Python
Zbatimi i Stilizatorit të Hartave Python

Deri në këtë pikë, unë kam diskutuar skedarin e të dhënave OSM - çfarë është, si ta lexoni dhe çfarë të bëni me të. Tani do të diskutoj softuerin që kam shkruar për të trajtuar vizualizimin stilistik të hartës (repoja e GitHub e dhënë në hyrje).

Implementimi im specifik fokusohet në kontrollin e përdoruesit të tubacionit të paraqitjes. Në mënyrë të veçantë, unë lejoj përdoruesin të zgjedhë shtresat që ata duan të duken dhe si duan që ajo shtresë të vizualizohet. Siç e përmenda shkurtimisht më herët, ekzistojnë dy klasa elementësh të dhënë: plotësoni artikujt dhe artikujt e rreshtit. Plotësimet përcaktohen vetëm nga një ngjyrë, ndërsa linjat përcaktohen nga ngjyra, gjerësia e vijës, stili i vijës, stili i kapakut të linjës dhe stili i bashkimit të linjës.

Ndërsa përdoruesi bën modifikime në stilet dhe dukshmërinë e shtresave, ndryshimet reflektohen në widget -in e hartës në të djathtë. Pasi një përdorues të ketë modifikuar pamjen e hartës për kënaqësinë e tij, ai mund të rregullojë dimensionin maksimal të hartës dhe ta ruajë hartën si një imazh në kompjuterin e tij. Në ruajtjen e një imazhi, një skedar konfigurimi i përdoruesit gjithashtu do të ruhet. Kjo siguron që një përdorues të kujtojë dhe ripërdorë konfigurimin që ka përdorur për të gjeneruar një imazh të veçantë në çdo kohë.

Hapi 5: Disavantazhi i Zbatimit + Zgjidhja

Disavantazhi i Zbatimit + Zgjidhja
Disavantazhi i Zbatimit + Zgjidhja
Disavantazhi i Zbatimit + Zgjidhja
Disavantazhi i Zbatimit + Zgjidhja

Kur fillova të stilizoj një hartë me dorë, mësova se ky ishte një proces mjaft i lodhshëm. Ofrimi i kontrollit maksimal të përdoruesit mund të jetë thjesht dërrmues për shkak të numrit të madh të "pullave" të disponueshme. Sidoqoftë, ekziston një zgjidhje e thjeshtë, e cila përfshin një shkrim të vogël shtesë.

Fillova duke identifikuar se cilat shtresa më interesojnë veçanërisht. Për qëllimet e këtij udhëzimi, le të themi se jam më i interesuar për ndërtesat (të gjitha), lumenjtë, autostradat kryesore dhe rrugët sipërfaqësore. Unë do të shkruaja një skenar ku krijoja një shembull të Konfigurimit, ndërroja gjendjet e shtresës në mënyrë të përshtatshme duke përdorur funksionin setItemState () dhe konstantet e përcaktuara, dhe vendosja ngjyra bazuar në mënyrën se si do të doja që shtresat e mia të shfaqeshin duke përdorur setValue (). Skedari i konfigurimit që rezulton që ruhet mund të kopjohet në dosjen e konfigurimeve dhe të ngarkohet nga përdoruesi.

Një skenar shembull është në imazhin e mësipërm. Imazhi i dytë është një shembull i asaj se si do të dukeshin funksionet ndihmëse, dhe meqenëse ato janë në thelb të gjitha identike, vetëm me konstante të ndryshme, unë përfshiva vetëm një fotografi të një shembulli.

Hapi 6: Fushat për Përmirësim

Fushat për Përmirësim
Fushat për Përmirësim

Pas reflektimit mbi zbatimin tim të softuerit, unë kam identifikuar disa fusha që do të ishin përmirësime të dobishme për përdoruesit e energjisë.

  1. Paraqitja dinamike e shtresës. Aktualisht, unë kam një listë të paracaktuar të shtresave që do të jepen, kjo është ajo. Pjesë e arsyetimit ishte vështirësia në përcaktimin nëse një shtresë duhet të jetë një vijë apo një mbushje. Si rezultat, me pothuajse çdo skedar OSM që hapni, do të përshëndeteni me një mori paralajmërimesh për shtresat që nuk do të jepen. Shpesh këto janë aq minimale sa nuk është një çështje, por do të mungojnë shtresa kritike. Paraqitja dinamike e shtresave do t'i eliminonte këto shqetësime.
  2. Caktimi i shtresës dinamike. Kjo shkon dorë për dore me #1; nëse doni paraqitje dinamike të shtresës, keni nevojë për caktimin e shtresës dinamike (d.m.th., identifikimin e një shtrese mbushëse kundrejt një shtrese linje). Kjo mund të arrihet në mënyrë të arsyeshme, siç kam mësuar, sepse Mënyrat, nyja e parë dhe e fundit e të cilave janë të njëjta, do të jenë shtigje të mbyllura dhe për këtë arsye të mbushura.
  3. Grupet e ngjyrave. Një hartë e stilizuar shpesh ka disa shtresa që kanë të njëjtin stil, dhe aftësimi i përdoruesit për të modifikuar stilin e një grupi në të njëjtën kohë do të zvogëlonte shumë kohën e përdoruesit të shpenzuar për redaktimin e shtresave një nga një.

Hapi 7: Mbyllja e Mendimeve

Mbyllja e Mendimeve
Mbyllja e Mendimeve
Mbyllja e Mendimeve
Mbyllja e Mendimeve
Mbyllja e Mendimeve
Mbyllja e Mendimeve

Faleminderit të gjithëve që keni gjetur kohë për të lexuar Udhëzuesin tim. Ky projekt përfaqëson kulmin e shumë orëve të kërkimit, projektimit, programimit dhe korrigjimit. Shpresoj se kam qenë në gjendje të siguroj një platformë nisëse nga e cila mund të ndërtoni projektin tuaj ose të ndërtoni atë që kam shkruar tashmë. Unë gjithashtu shpresoj se mangësitë dhe këshillat e mia japin shumë pika për t'u marrë parasysh në hartimin tuaj. Nëse jeni më pak të prirur për program dhe më shumë të prirur për të krijuar vepra arti, do të doja të shihja atë që bëni në komente! Mundësitë janë të pafundme!

Faleminderit të veçantë për kontribuesit e OpenStreetMap! Projekte të tilla nuk do të ishin të mundshme pa përpjekjet e tyre të rëndësishme.

Ju lutemi më tregoni nëse keni ndonjë pyetje në komente!

Sfida e Hartave
Sfida e Hartave
Sfida e Hartave
Sfida e Hartave

Vendi i dytë në Sfidën e Hartave

Recommended: