Агуулгын хүснэгт:

OpenStreetMap -ийг ашиглан загварчилсан газрын зургийг хэрхэн үүсгэх вэ: 7 алхам (зурагтай)
OpenStreetMap -ийг ашиглан загварчилсан газрын зургийг хэрхэн үүсгэх вэ: 7 алхам (зурагтай)

Видео: OpenStreetMap -ийг ашиглан загварчилсан газрын зургийг хэрхэн үүсгэх вэ: 7 алхам (зурагтай)

Видео: OpenStreetMap -ийг ашиглан загварчилсан газрын зургийг хэрхэн үүсгэх вэ: 7 алхам (зурагтай)
Видео: How Not To Die: The Role of Diet in Preventing, Arresting, and Reversing Our Top 15 Killers 2024, Долдугаар сарын
Anonim
OpenStreetMap ашиглан захиалгат загварчилсан газрын зургийг хэрхэн үүсгэх вэ
OpenStreetMap ашиглан захиалгат загварчилсан газрын зургийг хэрхэн үүсгэх вэ

Энэхүү зааварчилгаанд би та өөрийн захиалгаар хиймэл загвартай газрын зургийг бүтээх үйл явцыг тайлбарлах болно. Загварчилсан газрын зураг нь хэрэглэгч ямар өгөгдлийн давхаргыг дүрслэхийг зааж өгөхөөс гадна давхарга бүрийг дүрслэх хэв маягийг тодорхойлох боломжтой газрын зураг юм. Би эхлээд газрын зургийг загварчлах програм хангамж бичих процессыг тайлбарлах болно, дараа нь энэ ажлыг гүйцэтгэхийн тулд бичсэн Python програм хангамжийн жишээг тайлбарлах болно.

Дараах видеон дээр би хэрхэн загварчилсан газрын зураг бүтээдэг болохыг онцлон харуулсан боловч дотно мэдээллийг нь үргэлжлүүлэн уншаарай. Нийгэмлэг юу бүтээж байгааг хараад би маш их баяртай байна!

Энэ төслийн цаана миний сэдэл юу вэ?

Шулуухан хэлэхэд би үүнийг хийх нь хөгжилтэй байх болно гэж бодсон учраас энэ төслийг эхлүүлсэн. Энэ санаа өнгөрсөн нэг жилийн хугацаанд миний толгойд эргэлдэж байсан бөгөөд эцэст нь би үүнийг хэрэгжүүлэхэд шаардлагатай цаг заваа зарцуулсан. Анхдагч скрипт ашиглан нэг өдрийн турш прототип хийсний дараа би маш ирээдүйтэй үр дүнг гаргаж чадсан юм. Иймээс би өөрийнхөө скриптийг албан ёсны болгох хэрэгтэйг бусад хүмүүс өөрсдөө хялбархан хийх боломжтой болно гэдгийг мэдэж байсан.

Энэхүү зааварчилгааг бичих миний сэдэл бол өөрийн загварчилсан газрын зургийг эхнээс нь хэрхэн бүтээх талаар маш бага мэдээлэл олж авсантай холбоотой юм. Би сурч мэдсэн зүйлээ олон нийтэд хуваалцана гэж найдаж байна.

Нөөц/линк:

  • OpenStreetMap
  • OpenStreetMap хууль ёсны
  • Github репозитор

Хангамж

  • Python түгээлт (би Anaconda & Python 3.6 ашигласан)
  • PyQt5 (GUI хамаарлын хувьд)

Алхам 1: Процессыг тодорхойлох I: OSM файлыг татаж авах

Процессыг тодорхойлох I: OSM файлыг татаж авах
Процессыг тодорхойлох I: OSM файлыг татаж авах

Намайг энэ төслийг анх эхлүүлэх үед хамгийн их анхаарал татсан асуулт бол "газрын зургийн мэдээллийг хаанаас авах вэ?" Мэдээжийн хэрэг, таны хүлээж байсан шиг би тэр даруй Google газрын зургийн талаар бодлоо. Чухал судалгаа хийсний дараа Google үнэхээр бүтээлч утгаараа эсвэл өөр хэлбэрээр хүмүүс өөрсдийн өгөгдлөөрөө тоглохыг хүсдэггүй болохыг олж мэдсэн. Үнэндээ тэд Google газрын зургаас вэб хусахыг шууд хориглодог.

Аз болоход, OpenStreetMap (OSM) -ийг нээснээр миний цөхрөл богино хугацаанд үргэлжилсэн юм. OSM бол дэлхийн өнцөг булан бүрээс өгөгдөл оруулж буй хүмүүсийг хамарсан хамтарсан төсөл юм. OSM нь нээлттэй эхийн програм хангамжийн нэрээр өгөгдлөө нээлттэй ашиглахыг шууд зөвшөөрдөг. Тиймээс, OSM вэб хуудсанд зочлох нь газрын зургийг загварчлах аялал эхэлдэг.

OSM вэбсайтад орсны дараа "Экспорт" таб дээр дарж газрын зургийн экспортын хэрэгслүүдийг харуулна уу. Одоо газрын зургийн мэдээлэл цуглуулах сонирхолтой бүс нутгаа харахын тулд томруулаарай. "Өөр газар нутгийг гараар сонгох" холбоосыг сонгоод дэлгэцэн дээр хайрцаг гарч ирнэ. Энэ хайрцгийг сонирхож буй бүс дээрээ хэлбэржүүлж байрлуул. Сэтгэл хангалуун болмогц "Экспортлох" товчийг дарж OSM мэдээллийн файлаа татаж аваарай.

Тэмдэглэл №1: Хэрэв таны сонгосон бүс хэт их өгөгдөл агуулсан бол та хэт олон зангилаа сонгосон гэсэн алдаа гарах болно. Хэрэв танд ийм зүйл тохиолдвол "Overpass API" товчийг дарж илүү том файлаа татаж аваарай.

Тэмдэглэл #2: Хэрэв таны татаж авсан OSM файл 30MB -аас том бол миний бичсэн 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 файлыг хялбархан задлан шинжлэх болно. Ганц давталтад та тодорхой өгөгдлийн элемент бүрийн OSM өгөгдлийг боловсруулах боломжтой.

Зургийн сүүлчийн мөрөнд би 'хил хязгаар' хаягийг шалгаж байгааг анзаарах болно. Энэ алхам нь өргөрөг ба уртрагийн утгыг дэлгэцэн дээр пиксел болгон хөрвүүлэхэд чухал ач холбогдолтой юм. Өгөгдлийг бөөнөөр нь хөрвүүлэх үйл явц эрчимтэй явагддаг тул OSM файлыг ачаалах үед энэ хөрвүүлэлтийг хийхийг зөвлөж байна.

Өргөрөг ба уртрагийг дэлгэцийн координат болгон хөрвүүлэх талаар ярихдаа энд миний бичсэн тооцооллын функцын холбоос байна. Өргөрөгийг дэлгэцийн координат болгон хөрвүүлэхэд жаахан сонин зүйл ажиглагдах байх. Уртрагтай харьцуулахад нэмэлт алхам шаардлагатай болно! Эндээс харахад OSM өгөгдлийг Псевдо-Меркатор проекцийн аргыг ашиглан загварчилсан болно. Аз болоход OSM нь энэ сэдвээр гайхалтай баримт бичигтэй бөгөөд тэдгээр нь нэлээд олон хэлний өргөргийн хөрвүүлэлтийн функцийг хангадаг. Гайхалтай!

Тэмдэглэл: Миний кодонд дэлгэцийн координат (0, 0) нь дэлгэцийн зүүн дээд буланд байрладаг.

Алхам 4: Python Map Stylizer -ийн хэрэгжилт

Python Map Stylizer -ийн хэрэгжилт
Python Map Stylizer -ийн хэрэгжилт
Python Map Stylizer -ийн хэрэгжилт
Python Map Stylizer -ийн хэрэгжилт
Python Map Stylizer -ийн хэрэгжилт
Python Map Stylizer -ийн хэрэгжилт

Энэ хүртэл би OSM өгөгдлийн файлын талаар ярилцсан - энэ нь юу вэ, хэрхэн унших, юу хийх вэ. Одоо би стилист газрын зургийн дүрслэлийг шийдвэрлэхийн тулд бичсэн програм хангамжийн талаар ярилцах болно (GitHub репо танилцуулгад өгсөн болно).

Миний тодорхой хэрэгжилт нь дамжуулах хоолойн хэрэглэгчийн хяналтад чиглэгддэг. Тодруулбал, би хэрэглэгчдэд харагдахыг хүсч буй давхаргуудаа сонгохыг хүсч байгаа бөгөөд энэ давхаргыг хэрхэн дүрслэхийг хүсч байна. Өмнө дурьдсанчлан, элементүүдийг бөглөх ба мөрийн элементүүд гэсэн хоёр ангилдаг. Дүүргэлтийг зөвхөн өнгөөр тодорхойлдог бол мөрийг өнгө, шугамын өргөн, шугамын хэв маяг, шугамын тагны хэв маяг, нэгдэх хэв маягаар тодорхойлдог.

Хэрэглэгч давхаргын хэв маяг, харагдах байдлыг өөрчлөх үед өөрчлөлтийг газрын зургийн виджет дээр баруун талд тусгасан болно. Хэрэглэгч газрын зургийн төрхийг сэтгэл ханамжтайгаар өөрчилсний дараа тэрээр газрын зургийн хамгийн дээд хэмжээг тохируулж, зургийг компьютер дээрээ дүрс болгон хадгалах боломжтой. Зургийг хадгалахад хэрэглэгчийн тохиргооны файл мөн хадгалагдах болно. Энэ нь хэрэглэгч ямар ч үед тодорхой дүрс үүсгэхэд ашигласан тохиргоогоо эргэн санаж, дахин ашиглах боломжийг олгодог.

Алхам 5: Хэрэгжилтийн сул тал + шийдэл

Хэрэгжилтийн сул тал + шийдэл
Хэрэгжилтийн сул тал + шийдэл
Хэрэгжилтийн сул тал + шийдэл
Хэрэгжилтийн сул тал + шийдэл

Би анх удаа газрын зургийг гараар загварчилж эхлэхдээ энэ нь нэлээд уйтгартай үйл явц гэдгийг олж мэдсэн. Хэрэглэгчдэд хамгийн их хяналтыг санал болгох нь олон тооны "товчлуурууд" -аас шалтгаалан асар их байж болно. Гэсэн хэдий ч жаахан нэмэлт скрипт оруулах энгийн шийдэл байдаг.

Би аль давхаргыг илүү сонирхож байгаагаа тодорхойлж эхэллээ. Энэхүү зааварчилгааны үүднээс би барилга (бүгдээрээ), гол мөрөн, гол хурдны зам, гадаргуугийн гудамжийг хамгийн их сонирхдог гэж бодъё. Би Тохиргооны жишээ үүсгэж, setItemState () функц болон тодорхойлогдсон тогтмолуудыг ашиглан давхаргын төлөвийг зохих ёсоор сольж, setValue () ашиглан миний давхаргыг хэрхэн харуулахыг хүсч буйгаа үндэслэн өнгө тохируулах скрипт бичих болно. Хадгалагдсан тохиргооны файлыг configs фолдерт хуулж хэрэглэгчээр ачаалж болно.

Жишээ скрипт нь дээрх зураг дээр байна. Хоёрдахь зураг бол туслах функцуудын харагдах байдлын жишээ бөгөөд тэдгээр нь үндсэндээ бүгд адилхан, өөр өөр тогтмолуудтай тул би зөвхөн нэг жишээний зургийг оруулсан болно.

Алхам 6: Сайжруулах чиглэлүүд

Сайжруулах чиглэлүүд
Сайжруулах чиглэлүүд

Програм хангамжийн хэрэгжилтийн талаар эргэцүүлэн бодсоны дараа би эрчим хүч хэрэглэгчдэд сайжруулахад тустай хэд хэдэн чиглэлийг олж мэдсэн.

  1. Давхаргын динамик дүрслэл. Одоогийн байдлаар надад үзүүлэх давхаргуудын урьдчилан тодорхойлсон жагсаалт байна, энэ л боллоо. Үндэслэлийн нэг хэсэг нь давхарга нь шугам эсвэл дүүргэгч байх ёстой эсэхийг тодорхойлоход бэрхшээлтэй байсан. Үүний үр дүнд, бараг бүх OSM файлыг нээхэд танд үзүүлэхгүй байгаа давхаргын талаар олон анхааруулга ирэх болно. Ихэнхдээ эдгээр нь маш бага тул энэ нь асуудал биш боловч чухал давхаргууд дутагдах нь гарцаагүй. Давхар динамик рэндэрлэх нь эдгээр бэрхшээлийг арилгах болно.
  2. Динамик давхаргын хуваарилалт. Энэ нь #1-тэй зэрэгцэн явагддаг; Хэрэв та динамик давхарга үзүүлэхийг хүсч байвал танд динамик давхаргын хуваарилалт хэрэгтэй болно (өөрөөр хэлбэл дүүргэх давхаргыг тодорхойлох ба шугамын давхарга). Эхний болон сүүлчийн зангилаа нь ижил байх арга замууд нь хаалттай байх тул бөглөх болно.
  3. Өнгөний бүлгүүд. Загварчилсан газрын зураг нь ихэвчлэн ижил хэв маягтай хэд хэдэн давхаргатай байдаг бөгөөд хэрэглэгчид бүлгийн хэв маягийг нэгэн зэрэг өөрчлөх боломжийг олгодог бөгөөд энэ нь хэрэглэгчийн давхаргыг нэг нэгээр нь засварлахад зарцуулах хугацааг эрс багасгадаг.

Алхам 7: Хаалтын бодол

Хаалтын бодол
Хаалтын бодол
Хаалтын бодол
Хаалтын бодол
Хаалтын бодол
Хаалтын бодол

Цаг гарган миний зааврыг уншсан бүх хүмүүст баярлалаа. Энэхүү төсөл нь олон цагийн судалгаа, дизайн, програмчлал, дибаг хийх ажлын оргил үеийг илэрхийлж байна. Та өөрийн төслийг бүтээх эсвэл миний бичсэн зүйлийг үндэслэх боломжтой эхлүүлэх самбарыг өгч чадсан гэж найдаж байна. Миний дутагдал, зөвлөмжүүд нь таны дизайныг анхаарч үзэх олон зүйлийг өгөх болно гэж найдаж байна. Хэрэв та програмчлах сонирхол багатай, урлагийн бүтээл туурвих хандлагатай байгаа бол сэтгэгдлээс юу хийж байгаагаа харах дуртай! Боломжууд хязгааргүй юм!

OpenStreetMap -ийн оролцогчдод онцгой талархал илэрхийлье! Ийм төслүүдийг ихээхэн хүчин чармайлтгүйгээр хийх боломжгүй юм.

Хэрэв танд ямар нэгэн асуулт байвал сэтгэгдэл дээр надад хэлээрэй!

Газрын зургийн сорилт
Газрын зургийн сорилт
Газрын зургийн сорилт
Газрын зургийн сорилт

Газрын зургийн сорилтын тэмцээнд 2 -р байр эзэлсэн

Зөвлөмж болгож буй: