Мазмұны:

OpenStreetMap көмегімен стильдендірілген карталарды қалай құруға болады: 7 қадам (суреттермен)
OpenStreetMap көмегімен стильдендірілген карталарды қалай құруға болады: 7 қадам (суреттермен)

Бейне: OpenStreetMap көмегімен стильдендірілген карталарды қалай құруға болады: 7 қадам (суреттермен)

Бейне: OpenStreetMap көмегімен стильдендірілген карталарды қалай құруға болады: 7 қадам (суреттермен)
Бейне: ТАКОВ МОЙ ПУТЬ В L4D2 2024, Қараша
Anonim
OpenStreetMap көмегімен стильдендірілген карталарды қалай құруға болады
OpenStreetMap көмегімен стильдендірілген карталарды қалай құруға болады

Бұл нұсқаулықта мен сіз өзіңіздің жеке стильдендірілген карталарыңызды жасай алатын процесті сипаттаймын. Стильдендірілген карта - бұл пайдаланушы қандай деректер қабаттары визуализацияланатынын көрсете алатын, сонымен қатар әр қабат бейнеленетін стильді анықтай алатын карта. Мен алдымен карталарды стильдеу үшін бағдарламалық қамтамасыз етуді жазу процесін сипаттаймын, содан кейін мен бұл тапсырманы орындау үшін жазған Python бағдарламалық жасақтамасының мысалын келтіремін.

Келесі бейнеде мен стильдендірілген карталарды қалай жасайтынымды көрсетемін, бірақ жақынырақ мәліметтер алу үшін оқуды жалғастыра бер. Мен қауымдастықтың не жасайтынын көріп, өте қуаныштымын!

Бұл жобаның артында менің мотивациям қандай?

Шынымды айтсам, мен бұл жобаны бастадым, себебі бұл қызықты болады деп ойладым. Бұл идея менің ойымда соңғы бір жыл болды, мен оны ақырында іске асыру үшін уақыт бөлдім. Кейбір қарапайым сценарийлермен прототиптеу күнінен кейін мен өте перспективалы нәтижелер шығара алдым, сондықтан мен өз сценарийлерімді басқалар оңай жасай алатындай етіп ресімдеу керек екенін білдім.

Бұл нұсқаулықты жазуға менің мотивациям - мен сіздің стильдендірілген карталарды нөлден қалай жасау керектігі туралы өте аз ақпарат таптым. Мен білгенімді қоғаммен бөлісемін деп үміттенемін.

Ресурстар/Сілтемелер:

  • OpenStreetMap
  • OpenStreetMap заңды
  • Github репозиторийі

Жабдықтар

  • Python таратылымы (мен Anaconda & Python 3.6 қолдандым)
  • PyQt5 (GUI тәуелділігі үшін)

1 -қадам: I процесті анықтау: OSM файлын жүктеу

I процесті анықтау: OSM файлын жүктеу
I процесті анықтау: OSM файлын жүктеу

Мен бұл жобаны алғаш бастаған кезде, «карта деректерін қайдан алуға болады?» Деген ең қызықты сұрақ болды. Әрине, сіз күткендей, мен бірден Google Maps туралы ойладым. Маңызды зерттеулерден кейін мен Google -дің шын мәнінде адамдардың өз деректерімен ойнауын қаламайтынын білдім. Шындығында, олар Google карталарынан веб-скрепингке тікелей тыйым салады.

Бақытымызға орай, OpenStreetMap (OSM) ашқаннан кейін менің үмітім қысқа болды. OSM - бұл бүкіл әлем бойынша деректерді қосатын адамдарды қамтитын бірлескен жоба. OSM ашық кодты бағдарламалық жасақтама атынан олардың мәліметтерін ашық пайдалануға рұқсат береді. Осылайша, OSM веб -бетіне кіру картаны сәндеу саяхаты басталады.

OSM веб -сайтына келгеннен кейін картаны экспорттау құралдарын көрсету үшін «Экспорттау» қойындысын нұқыңыз. Енді карта деректерін жинауға мүдделі аймақты көру үшін үлкейтіңіз. «Қолмен басқа аймақты таңдау» сілтемесін таңдаңыз, ол сіздің экранда қорапты көрсетеді. Бұл қорапты қызығушылық аймағына салыңыз және қойыңыз. Қанағаттанғаннан кейін OSM деректер файлын жүктеу үшін «Экспорттау» түймесін басыңыз.

Ескертпе № 1: Егер таңдалған аймақта тым көп деректер болса, сіз тым көп түйінді таңдағаныңыз туралы қате аласыз. Егер сізде бұл орын алса, үлкенірек файлды жүктеу үшін «Overpass API» түймесін басыңыз.

Ескертпе № 2: Егер жүктелген OSM файлы 30 МБ -тан үлкен болса, мен жазған Python бағдарламасы айтарлықтай баяулайды. Егер сіз үлкен аймақты қолдануға бел бусаңыз, сурет салуды жоспарламайтын артық деректерді жою үшін сценарий жазуды қарастырыңыз.

2 -қадам: II процесті анықтау: Деректерді түсіну

II процесті анықтау: Деректерді түсіну
II процесті анықтау: Деректерді түсіну
II процесті анықтау: Деректерді түсіну
II процесті анықтау: Деректерді түсіну
II процесті анықтау: Деректерді түсіну
II процесті анықтау: Деректерді түсіну
II процесті анықтау: Деректерді түсіну
II процесті анықтау: Деректерді түсіну

«Менде деректер бар … енді не?»

Жүктелген OSM файлын сүйікті мәтінді өңдеу бағдарламасына ашудан бастаңыз. Сіз алдымен бұл XML файлы екенін байқайсыз, бұл өте жақсы! XML талдау оңай. Файлдың басы осы қадамның бірінші суретіне ұқсас болуы керек - кейбір негізгі метадеректер мен географиялық шекаралар тізімделеді.

Файлды айналдыра отырып, сіз үш дерек элементін көресіз:

  1. Түйіндер
  2. Жолдары
  3. Қарым-қатынастар

Деректердің ең негізгі элементі, түйін тек бірегей идентификаторға, ендікке және бойлыққа байланысты. Әрине, қосымша метадеректер бар, бірақ біз оны қауіпсіз түрде тастай аламыз.

Жолдар - бұл түйіндердің жиынтығы. Жолды жабық фигура немесе ашық сызық түрінде көрсетуге болады. Жолдар олардың бірегей идентификаторымен анықталған түйіндер жиынынан тұрады. Олар тиесілі деректер тобын анықтайтын кілттермен белгіленеді. Мысалы, жоғарыдағы үшінші суретте бейнеленген әдіс «орын» деректер тобына және оның «арал» топшасына жатады. Басқаша айтқанда, бұл ерекше әдіс «орын» тобындағы «арал» қабатына жатады. Жолдардың да бірегей идентификаторлары болады.

Ақырында, қарым -қатынас - бұл әдістер жиынтығы. Қарым -қатынас тесіктері бар немесе бірнеше аймақтары бар күрделі пішінді білдіруі мүмкін. Қарым -қатынастардың бірегей идентификаторы болады және олар ұқсас жолдармен белгіленеді.

Бұл деректер элементтері туралы толығырақ OSM викиден оқи аласыз:

  • Түйіндер
  • Жолдары
  • Қарым-қатынастар

3 -қадам: III процесті анықтау: Деректерді қорыту

III процесті анықтау: мәліметтерді қорыту
III процесті анықтау: мәліметтерді қорыту

Енді сіз OSM файлын құрайтын деректер элементтері туралы кем дегенде үстірт түсінуіңіз керек. Осы сәтте біз OSM деректерін сіздің таңдаған тіліңізбен оқуға қызығушылық танытамыз. Бұл қадам Python-центрлік болғанымен, егер сіз Python-ды қолданғыңыз келмесе, сіз әлі де бұл бөлімді оқуыңыз керек, себебі онда бірнеше кеңестер мен амалдар бар.

Xml бумасы стандартты Python таратуларының көпшілігімен әдепкі бойынша енгізілген. Біз бұл буманы OSM файлын бірінші суретте көрсетілгендей оңай талдау үшін қолданамыз. Жалғыз for циклінде сіз әрбір нақты деректер элементі үшін OSM деректерін өңдеуді өңдей аласыз.

Кескіннің соңғы жолында сіз «шекаралар» белгісін тексеретінімді байқайсыз. Бұл қадам ендік пен бойлық мәндерін экрандағы пиксельге аударуда өте маңызды. Мен бұл түрлендіруді OSM файлын жүктеу кезінде іске қосуды ұсынамын, себебі деректерді жаппай түрлендіру процесі қарқынды.

Ендіктер мен бойлықтарды экран координаттарына түрлендіру туралы айтатын болсақ, мен жазған есептеу функциясының сілтемесі осында. Сіз ендікті экран координаттарына түрлендіруде біртүрлі нәрсені байқайсыз. Бойлықпен салыстырғанда қосымша қадам бар! Белгілі болғандай, OSM деректері Pseudo-Mercator проекциялау әдісі арқылы модельденеді. Бақытымызға орай, OSM мұнда осы тақырып бойынша керемет құжаттарға ие және олар көптеген тілдер үшін ендік түрлендіру функцияларын ұсынады. Тамаша!

Ескерту: Менің кодымда экран координаты (0, 0)-экранның сол жақ жоғарғы бұрышы.

4 -қадам: Python картасының стилизаторын енгізу

Python картасының стилизаторын енгізу
Python картасының стилизаторын енгізу
Python картасының стилизаторын енгізу
Python картасының стилизаторын енгізу
Python картасының стилизаторын енгізу
Python картасының стилизаторын енгізу

Осы уақытқа дейін мен OSM деректер файлын талқыладым - бұл не, оны қалай оқу керек және онымен не істеу керек. Енді мен картаның стилистикалық визуализациясын шешу үшін жазған бағдарламалық жасақтаманы талқылаймын (кіріспеде GitHub репо).

Менің нақты іске асыруым рендеринг құбырын пайдаланушыны басқаруға бағытталған. Атап айтқанда, мен пайдаланушыға көрінетін қабаттарды таңдауға мүмкіндік беремін және бұл қабат қалай визуализацияланатынын қалаймын. Мен қысқаша айтып өткендей, көрсетілген элементтердің екі класы бар: элементтерді толтыру және жол элементтері. Толтырулар тек түспен анықталады, ал сызықтар түсі, жол ені, сызық стилі, жолдың қақпағы стилі және жолды біріктіру стилі бойынша анықталады.

Пайдаланушы қабаттардың стильдері мен көрінуіне өзгерістер енгізгенде, өзгерістер оң жақтағы карта виджетінде көрсетіледі. Пайдаланушы картаның келбетін қанағаттандыратындай етіп өзгерткеннен кейін, картаның максималды өлшемін реттей алады және картаны компьютерде сурет ретінде сақтай алады. Кескінді сақтау кезінде пайдаланушының конфигурация файлы да сақталады. Бұл пайдаланушыға кез келген уақытта белгілі бір суретті жасау үшін пайдаланған конфигурациясын еске түсіріп, қайта пайдалануға мүмкіндік береді.

5 -қадам: Кемшіліктерді енгізу + Шешім

Қолданудың кемшілігі + Шешімі
Қолданудың кемшілігі + Шешімі
Қолданудың кемшілігі + Шешімі
Қолданудың кемшілігі + Шешімі

Мен картаны қолмен сәндеуді алғаш рет бастаған кезде, бұл өте қиын процесс екенін білдім. Пайдаланушыға максималды бақылауды ұсыну қол жетімді «тұтқалардың» көп болуына байланысты өте ауыр болуы мүмкін. Дегенмен, сәл қосымша сценарийді қамтитын қарапайым шешім бар.

Мен қай қабаттарды ерекше қызықтыратынымды анықтаудан бастадым. Бұл нұсқаулық үшін мені ғимараттар (барлығы), өзендер, негізгі магистральдар мен жер үсті көшелері қызықтырады делік. Мен сценарий жазатын едім, онда мен конфигурация данасын жасаймын, setItemState () функциясы мен анықталған тұрақтыларды қолдана отырып, қабаттардың күйлерін сәйкес түрде ауыстырып, қабаттарымды setValue () көмегімен қалай пайда болатынын негізге ала отырып, түстерді қоятын едім. Сақталатын конфигурация файлын configs қалтасына көшіріп, пайдаланушы жүктей алады.

Мысал сценарийі жоғарыдағы суретте. Екінші сурет - бұл көмекші функциялардың үлгісі, және олардың барлығы бірдей болғандықтан, әр түрлі тұрақтылықпен, мен тек бір мысалдың суретін ғана енгіздім.

6 -қадам: жақсарту аймақтары

Жақсартуға арналған аймақтар
Жақсартуға арналған аймақтар

Бағдарламалық қамтамасыз етуді енгізу туралы ойланғаннан кейін, мен қуатты пайдаланушыларға жақсартуға көмектесетін бірнеше бағыттарды анықтадым.

  1. Қабатты динамикалық көрсету. Қазіргі уақытта менде көрсетілетін қабаттардың алдын ала анықталған тізімі бар. Ақтаудың бір бөлігі қабаттың сызық немесе толтыру екенін анықтаудың қиындығы болды. Нәтижесінде, әрбір OSM файлын ашқанда, сіз көрсетілмейтін қабаттар туралы көптеген ескертулер аласыз. Көбінесе бұл өте аз, бұл мәселе емес, бірақ міндетті түрде маңызды қабаттар жетіспейді. Қабатты динамикалық көрсету бұл мәселелерді жояды.
  2. Динамикалық қабатты тағайындау. Бұл #1-мен бірге жүреді; егер сіз динамикалық деңгей көрсетуді қажет етсеңіз, сізге динамикалық деңгей тағайындауы қажет (яғни, толтыру қабатын және сызық қабатын анықтау). Мен білгенімдей, бұл ақылға қонымды түрде орындалуы мүмкін, себебі бірінші және соңғы түйіндері бірдей болатын жолдар жабық жолдар болады, сондықтан толтырылады.
  3. Түс топтары. Стильдендірілген картада көбінесе бірнеше стильдері бар бірнеше қабаттар болады және олар бір уақытта топтың стилін өзгертуге мүмкіндік береді, бұл пайдаланушының қабаттарды бір-бірлеп өңдеуге кететін уақытын едәуір қысқартады.

7 -қадам: Қорытынды ойлар

Қорытынды ойлар
Қорытынды ойлар
Қорытынды ойлар
Қорытынды ойлар
Қорытынды ойлар
Қорытынды ойлар

Баршаңызға менің нұсқаулықты оқуға уақыт бөлгеніңіз үшін рахмет. Бұл жоба көптеген сағаттық зерттеулердің, жобалаудың, бағдарламалаудың және жөндеудің шыңы болып табылады. Мен сізге өз жобаңызды құруға немесе менің жазғандарыма негізделетін іске қосу алаңын бере алдым деп үміттенемін. Сондай -ақ, менің кемшіліктерім мен кеңестерім сіздің дизайныңызда ескерілуі керек көптеген нәрселер береді деп үміттенемін. Егер сіз бағдарламаға бейімсіз болсаңыз және өнер туындыларын жасауға бейім болсаңыз, мен сіздің түсініктемелерде не жасағаныңызды көргім келеді! Мүмкіндіктер шексіз!

OpenStreetMap қатысушыларына ерекше алғыс! Мұндай жобалар олардың елеулі күш -жігерінсіз мүмкін емес еді.

Түсініктемелерде сұрақтарыңыз болса, маған хабарлаңыз!

Maps Challenge
Maps Challenge
Maps Challenge
Maps Challenge

Карталар сайысында екінші орын

Ұсынылған: