Мазмуну:
- Жабдуулар
- 1 -кадам: I процессин аныктоо: OSM файлын жүктөө
- 2 -кадам: II процессти аныктоо: маалыматтарды түшүнүү
- 3 -кадам: III процессти аныктоо: маалыматтарды сиңирүү
- 4 -кадам: Python карта стилизаторун ишке ашыруу
- 5 -кадам: Ишке ашыруу кемчилиги + Чечим
- 6 -кадам: жакшыртуу үчүн аймактар
- 7 -кадам: Жыйынтыктоочу ойлор
Video: OpenStreetMapти колдонуп стилдештирилген карталарды кантип түзүү керек: 7 кадам (сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:39
Бул көрсөтмөдө, мен сиз өзүңүздүн жеке стильденген карталарыңызды түзө турган процессти сүрөттөп берем. Стилдештирилген карта - бул колдонуучу кайсы маалымат катмарлары көрсөтүлөрүн, ошондой эле ар бир катмар визуалдаштырылган стилди аныктай ала турган карта. Мен адегенде карталарды стилдештирүү үчүн программалык камсыздоону жазуу процессин сүрөттөп берем, андан кийин мен бул тапшырманы аткаруу үчүн жазган Python программасынын мисалы.
Төмөнкү видео менин стилдештирилген карталарды кантип түзөөрүмдү баса белгилейт, бирок интимдүү деталдар үчүн окууну улантыңыз. Коомчулук жараткан нерселерди көрүп абдан толкунданып жатам!
Бул долбоордун артында менин мотивациям эмне?
Чынын айтканда, мен бул долбоорду баштагам, анткени бул кызыктуу болот деп ойлогом. Бул идея акыркы бир жылдан бери мээмде чайпалып келе жатат, акыры аны ишке ашыруу үчүн керектүү убакытты алдым. Кээ бир негизги сценарийлер менен прототиптештирилген бир күндөн кийин, мен абдан келечектүү жыйынтыктарды чыгара алдым - ушунчалык келечектүү болгондуктан, мен сценарийлеримди формализациялоо керектигин билчүмүн, ошондуктан башкалар өзүлөрүнүн чыгармаларын оңой эле жасашат.
Бул инструктивдүү жазууга менин мотивациям, мен өзүмдүн стилдештирилген карталарды нөлдөн кантип түзүү керектиги жөнүндө эң аз маалыматты тапканымдан улам. Мен үйрөнгөндөрүмдү коомчулук менен бөлүшөм деп үмүттөнөм.
Ресурстар/Шилтемелер:
- OpenStreetMap
- OpenStreetMap мыйзамдуу
- Github репозиторийи
Жабдуулар
- Python бөлүштүрүүсү (мен Anaconda & Python 3.6 колдондум)
- PyQt5 (GUI көз карандылыгы үчүн)
1 -кадам: I процессин аныктоо: OSM файлын жүктөө
Мен бул долбоорду биринчи баштаганда, эң караңгы суроо "картанын маалыматын кайдан алсам болот" болчу. Албетте, сиз күткөндөй, мен дароо Google Карталарды ойлодум. Маанилүү изилдөөлөрдөн кийин, мен Google чынында эле адамдардын чыгармачылык мааниде же башкача түрдө алардын маалыматтары менен ойноону каалабасын аныктадым. Чынында, алар Google Карталардан веб-кыркууга ачык түрдө тыюу салышат.
Бактыга жараша, менин OpenStreetMap (OSM) ачылышы менен үмүтүм үзүлдү. OSM - бул дүйнө жүзү боюнча маалыматтарды камтыган адамдарды камтыган биргелешкен долбоор. OSM ачык булак программалык камсыздоонун атынан өз маалыматтарын ачык пайдаланууга уруксат берет. Ошентип, OSM веб -баракчасына баруу картанын стилдештирүү сапары башталат.
OSM веб -сайтына келгенден кийин, картаны экспорттоо куралдарын көрсөтүү үчүн "Экспорт" өтмөгүн басыңыз. Эми карта маалыматын чогултууга кызыкдар болгон аймакты көрүү үчүн кичирейтүү. "Кол менен башка аймакты тандоо" шилтемесин тандап, экраныңызда кутуча пайда болот. Бул кутуну калыптандырыңыз жана кызыктырган аймакка коюңуз. Канааттангандан кийин, OSM маалымат файлыңызды жүктөө үчүн "Экспорт" баскычын чыкылдатыңыз.
Эскертүү #1: Эгерде сиз тандаган аймак өтө көп маалыматтарды камтыса, сиз өтө көп түйүндөрдү тандап алдыңыз деген ката аласыз. Эгер сизде ушундай болсо, чоңураак файлыңызды жүктөө үчүн "Overpass API" баскычын басыңыз.
Эскертүү #2: Эгерде сиз жүктөп алган OSM файлы 30МБдан чоң болсо, мен жазган Python программасы байкаларлык жай болот. Эгерде сиз чоң аймакты колдонууга чечкиндүү болсоңуз, анда тартууну пландап жаткан ашыкча маалыматтарды жок кылуу үчүн сценарий жазып көрүңүз.
2 -кадам: II процессти аныктоо: маалыматтарды түшүнүү
"Менде маалыматтар бар … эми эмне?"
Жүктөлгөн OSM файлыңызды сүйүктүү текстти түзөтүү программасына ачуудан баштаңыз. Сиз адегенде бул XML файлы экенин байкайсыз, бул сонун! XML анализдөө үчүн жетиштүү оңой. Файлыңыздын башталышы бул кадамдын биринчи сүрөтүнө окшош болушу керек - кээ бир негизги метадайындар жана географиялык чектер тизмеленет.
Файлды жылдырып жатканда, сиз колдонулган үч маалымат элементин байкайсыз:
- Түйүндөр
- Жолдору
- Мамилелер
Эң негизги маалымат элементи, түйүн жөн гана уникалдуу идентификаторго, кеңдикке жана узундукка ээ. Албетте, кошумча метадайындар бар, бирок биз аны коопсуз түрдө жок кыла алабыз.
Жолдор - түйүндөрдүн жыйнагы. Жол жабык форма же ачык линия катары көрсөтүлүшү мүмкүн. Жолдор уникалдуу идентификатору менен аныкталган түйүндөрдүн жыйындысынан турат. Алар таандык маалымат тобун аныктоочу ачкычтар менен белгиленет. Мисалы, үчүнчү сүрөттө сүрөттөлгөн ыкма "жер" маалымат тобуна жана анын "арал" тобуна таандык. Башкача айтканда, бул өзгөчө жол "орун" тобунун астындагы "арал" катмарына таандык. Жолдордун да уникалдуу идентификаторлору бар.
Акырында, мамилелер - бул жолдордун жыйындысы. Мамиле тешиктери бар же бир нече региондор менен татаал форманы билдириши мүмкүн. Байланыштар да уникалдуу идентификаторго ээ болот жана жолдорго окшош белгиленет.
OSM викиден бул маалымат элементтери жөнүндө көбүрөөк окуй аласыз:
- Түйүндөр
- Жолдору
- Мамилелер
3 -кадам: III процессти аныктоо: маалыматтарды сиңирүү
Эми сиз OSM файлын түзгөн маалымат элементтери жөнүндө жок дегенде үстүрт түшүнүккө ээ болушуңуз керек. Бул жерде биз OSM маалыматын сиз тандаган тилди колдонуп окууга кызыкдарбыз. Бул кадам Python борборунда болсо да, эгер сиз Pythonду колдонууну каалабасаңыз, анда дагы эле бул бөлүктү окуп чыгыңыз, анткени анда бир нече кеңештер жана амалдар бар.
Xml пакети көпчүлүк стандарттык Python бөлүштүрүүлөрү менен демейки боюнча камтылган. Бул пакетти OSM файлды биринчи сүрөттө көрсөтүлгөндөй оңой талдоо үчүн колдонобуз. Бирдиктүү циклде, сиз ар бир белгилүү бир элемент үчүн OSM маалыматын иштете аласыз.
Сүрөттүн акыркы сабында сиз "чек" тегин текшерип жатканымды байкайсыз. Бул кадам экранда пикселге кеңдик жана узундук маанилерин которууда өтө маанилүү. Мен бул конверсияны OSM файлын жүктөө учурунда иштетүүнү сунуштайм, анткени маалыматтарды массалык түрдө кайра иштетүү процесси интенсивдүү.
Узундуктарды жана кеңдиктерди экран координаттарына айландыруу жөнүндө айтсам, бул жерде мен жазган эсептөө функциясына шилтеме бар. Сиз кеңдикти экран координаттарына которууда бир аз кызыктай нерсени байкайсыз. Узундукка салыштырмалуу кошумча кадам бар! Белгилүү болгондой, OSM маалыматы Pseudo-Mercator проекциялоо методу менен моделденген. Бактыга жараша, OSM бул жерде бул темада фантастикалык документтерге ээ жана алар көптөгөн тилдер үчүн кеңдикти өзгөртүү функцияларын камсыз кылат. Керемет!
Эскертүү: Менин кодумда, экран координаты (0, 0) экрандын жогорку сол бурчу.
4 -кадам: Python карта стилизаторун ишке ашыруу
Ушул убакка чейин мен OSM маалымат файлын талкууладым - бул эмне, аны кантип окуу керек жана аны менен эмне кылуу керек. Эми мен стилистикалык карта визуализациясын чечүү үчүн жазган программаны талкуулайм (GitHub репо киришмеде берилген).
Менин конкреттүү ишке ашыруум рендеринг түтүкчөсүн колдонуучуну көзөмөлдөөгө багытталган. Тактап айтканда, мен колдонуучуга алар көрүнгүсү келген катмарларды жана ал катмарды кантип элестетүүнү каалашын тандоого уруксат берем. Мен кыскача айтып өткөндөй, көрсөтүлгөн элементтердин эки классы бар: элементтерди толтуруу жана сап элементтери. Толтуруу бир гана түс менен аныкталат, ал эми саптар түс, сызык туурасы, сызык стили, сап капкак стили жана сап кошулуу стили менен аныкталат.
Колдонуучу катмар стилдерине жана көрүнүүчүлүккө өзгөртүүлөрдү киргизген сайын, өзгөртүүлөр оң жактагы карта виджетинде чагылдырылат. Колдонуучу картанын көрүнүшүн канааттандырарлык кылып өзгөрткөндөн кийин, картанын максималдуу өлчөмүн тууралап, картаны компьютеринде сүрөт катары сактай алат. Сүрөттү сактоодо колдонуучунун конфигурация файлы да сакталат. Бул колдонуучу каалаган убакта белгилүү бир сүрөттү түзүү үчүн колдонгон конфигурациясын кайра чакырып, кайра колдоно алат.
5 -кадам: Ишке ашыруу кемчилиги + Чечим
Мен картаны кол менен стилдештире баштаганда, бул абдан түйшүктүү процесс экенин билдим. Колдонуучуга максималдуу көзөмөлдү сунуштоо, жеткиликтүү "топчолордун" көптүгүнөн улам, жөн эле басымдуу болушу мүмкүн. Бирок, бир аз кошумча сценарийди камтыган жөнөкөй чечим бар.
Мен кайсы катмарга өзгөчө кызыгып жатканымды аныктоо менен баштадым. Бул көрсөтмө үчүн мен имараттарга (баарына), дарыяларга, магистралдык магистралдарга жана жер үстүндөгү көчөлөргө көбүрөөк кызыгам дейли. Мен сценарий жазмакмын, анда мен конфигурациянын мисалын түзөм, катмардын абалын setItemState () функциясын жана аныкталган константаларды туура колдонуп алмаштырам жана катмарларымдын setValue () аркылуу кантип пайда болушун каалайм. Сакталган конфигурация файлы configs папкасына көчүрүлүп, колдонуучу тарабынан жүктөлөт.
Мисал скрипти жогорудагы сүрөттө. Экинчи сүрөт - бул жардамчы функциялардын кандай болоорунун үлгүсү, жана алар негизинен баары окшош болгондуктан, ар кандай туруктуулук менен, мен бир гана мисалдын сүрөтүн коштум.
6 -кадам: жакшыртуу үчүн аймактар
Менин программалык камсыздоомду ишке ашыруунун үстүнөн ой жүгүрткөндөн кийин, мен бийликти колдонуучулар үчүн жакшыртууга жардам бере турган бир нече тармактарды аныктадым.
- Динамикалык катмарды көрсөтүү. Учурда, менде көрсөтүлө турган катмарлардын тизмеси бар. Актануунун бир бөлүгү катмар сызык же толтуруу болорун аныктоодогу кыйынчылык болчу. Натыйжада, дээрлик бардык OSM файлдарын ачканыңызда, сиз көрсөтүлбөгөн катмарлар жөнүндө көптөгөн эскертүүлөргө туш болосуз. Көбүнчө бул ушунчалык аз, бул маселе эмес, бирок критикалык катмарлар жок болуп кетиши мүмкүн. Динамикалык катмарды көрсөтүү бул көйгөйлөрдү жок кылат.
- Динамикалык катмар дайындоо. Бул #1 менен кол кармашып барат; эгер сиз динамикалык катмарды көрсөтүүнү кааласаңыз, сизге динамикалык катмар дайындоосу керек (б.а. толтуруу катмарын сызык катмарына каршы аныктоо). Мен билгендей, бул акылга сыярлык түрдө аткарылышы мүмкүн, анткени биринчи жана акыркы түйүнү бирдей болгон жолдор жабык жолдор болот, ошондуктан толтурулат.
- Түс топтору. Стилдештирилген карта көбүнчө бирдей стилге ээ болгон бир нече катмарга ээ жана колдонуучуга бир эле учурда топтун стилин өзгөртүүгө мүмкүндүк берүү, колдонуучунун катмарларды бир-бирден түзөтүүгө кетирген убактысын абдан азайтат.
7 -кадам: Жыйынтыктоочу ойлор
Убактыңызды бөлүп, менин Насааттаманы окуп чыкканыңыз үчүн баарыңыздарга рахмат. Бул долбоор көптөгөн сааттардын изилдөө, дизайн, программалоо жана мүчүлүштүктөрдүн туу чокусун билдирет. Мен сиз өзүңүздүн долбооруңузду түзө турган же мен жазгандардын негизинде кура турган старттык аянтча бере алдым деп үмүттөнөм. Мен дагы менин кемчиликтерим жана кеңештерим сиздин дизайныңызда көп ойлорду камсыз кылат деп үмүттөнөм. Эгерде сиз программага азыраак жана көркөм чыгармаларды жаратууга көбүрөөк ыктай турган болсоңуз, анда мен сиздин комментарийлерде эмне кылганыңызды көргүм келет! Мүмкүнчүлүктөр чексиз!
OpenStreetMap катышуучуларына өзгөчө рахмат! Мындай долбоорлор алардын олуттуу аракеттери болбосо ишке ашмак эмес.
Сураныч, эгерде кандайдыр бир суроолор болсо, комментарийлерде мага билдириңиз!
Карталар чакырыгында экинчи орун
Сунушталууда:
Linux жүктөө дискин кантип түзүү керек (жана аны кантип колдонуу керек): 10 кадам
Linux жүктөө дискин кантип түзүү керек (жана аны кантип колдонуу керек): Бул Linuxту кантип баштоо керектиги жөнүндө жөнөкөй маалымат, тактап айтканда Ubuntu
Android Studio менен Android тиркемесин кантип түзүү керек: 8 кадам (сүрөттөр менен)
Android Studio менен Android тиркемесин кантип түзүү керек: Бул окуу куралы сизге Android Studio иштеп чыгуу чөйрөсүн колдонуп, Android колдонмосун кантип куруунун негиздерин үйрөтөт. Android түзмөктөрү барган сайын кеңири тарала баштаганда, жаңы колдонмолорго болгон суроо -талап көбөйөт. Android Studio колдонууга оңой (жана
Фритизингди колдонуу менен кантип схеманы түзүү керек: 19 кадам (сүрөттөр менен)
Фритизингди кантип колдонуу менен:
IRobotтун жардамы менен автономдуу баскетбол ойноочу роботту кантип түзүү керек: 7 кадам (сүрөттөр менен)
IRobotтун жардамы менен автономдуу баскетбол ойноочу роботту кантип түзүү керек: Бул iRobot Create чакырыгына менин киришим. Мен үчүн бул процесстин эң оор бөлүгү - роботтун эмне кылаарын чечүү. Мен Robo жөндөмүн кошуп, Createтин сонун өзгөчөлүктөрүн көрсөткүм келди. Менин бардык
Чоң ата жана чоң эненин календарын кантип түзүү керек & Scrapbook (скрепбукту кантип жасоону билбесеңиз да): 8 кадам (сүрөттөрү менен)
Чоң ата жана чоң эненин календарын кантип түзүү керек & Scrapbook (Скрепбукту кантип жасоону билбесеңиз дагы): Бул чоң энелер үчүн абдан үнөмдүү (жана абдан бааланган!) Майрамдык белек. Мен бул жылы ар бири 7 доллардан төмөн 5 календар жасадым. Материалдар: Сиздин балаңыздын, балдарыңыздын, жээндериңиздин, жээндериңиздин, иттериңиздин, мышыктарыңыздын же башка туугандарыңыздын 12 сонун сүрөтү