
Բովանդակություն:
2025 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2025-01-23 14:48

Այս ուսանելի դասում ես նկարագրելու եմ մի գործընթաց, որի միջոցով դուք կարող եք ստեղծել ձեր սեփական պատվերով պատրաստված ոճավորված քարտեզները: Ոճավորված քարտեզը այն քարտեզն է, որտեղ օգտագործողը կարող է նշել, թե տվյալների որ շերտերն են պատկերված, ինչպես նաև սահմանել այն ոճը, որով յուրաքանչյուր շերտը պատկերված է: Սկզբում ես կներկայացնեմ այն գործընթացը, որի միջոցով կարող եք ծրագրաշար գրել քարտեզները ոճավորելու համար, որին հաջորդելու է Python ծրագրաշարի օրինակը, որը ես գրել եմ այս առաջադրանքը կատարելու համար:
Հետևյալ տեսանյութը ցույց է տալիս, թե ինչպես եմ ես անձամբ ձևավորում ոճավորված քարտեզներ, բայց շարունակում եմ կարդալ ինտիմ մանրամասների համար: Ես շատ ոգևորված եմ տեսնել, թե ինչ է ստեղծում համայնքը:
Ո՞րն է իմ մոտիվացիան այս նախագծի հետևում:
Անկեղծ ասած, ես սկսեցի այս նախագիծը, քանի որ կարծում էի, որ դա հաճելի կլինի անել: Այս միտքը պտտվում էր իմ մտքում վերջին մեկ տարվա ընթացքում, և ես վերջապես վերցրեցի այն ժամանակը, որն անհրաժեշտ էր այն կյանքի կոչելու համար: Հիմնական սցենարների նախատիպերից հետո ես կարողացա չափազանց խոստումնալից արդյունքներ տալ, այնքան խոստումնալից, որ գիտեի, որ պետք է ձևակերպեմ իմ սցենարները այնպես, որ մյուսները հեշտությամբ կարողանան ինքնուրույն ստեղծագործություններ կատարել:
Այս հրահանգը գրելու իմ մոտիվացիան պայմանավորված է նրանով, որ ես գտա շատ նվազագույն տեղեկատվություն այն մասին, թե ինչպես ստեղծել ձեր սեփական ոճավորված քարտեզները զրոյից: Հուսով եմ, որ իմ սովորածը կկիսեմ համայնքի հետ:
Ռեսուրսներ/հղումներ
- OpenStreetMap
- OpenStreetMap Legalese
- Github շտեմարան
Պարագաներ
- Python բաշխում (ես օգտագործել եմ Anaconda և Python 3.6)
- PyQt5 (GUI- ի կախվածության համար)
Քայլ 1. Գործընթացը սահմանելը. Ներբեռնել OSM ֆայլը

Երբ ես առաջին անգամ սկսեցի այս նախագիծը, ամենացայտուն հարցն էր ՝ «որտեղի՞ց կարող եմ քարտեզի տվյալներ ստանալ»: Բնականաբար, ինչպես և կսպասեիք, ես անմիջապես մտածեցի Google Քարտեզների մասին: Significantգալի հետազոտություններից հետո ես պարզեցի, որ Google- ն իսկապես չի ցանկանում, որ մարդիկ խաղան իրենց տվյալների հետ ՝ ստեղծագործական իմաստով կամ այլ կերպ: Փաստորեն, նրանք բացահայտորեն արգելում են Google Քարտեզներից վեբ գրառումները:
Բարեբախտաբար, իմ հուսահատությունը կարճ տևեց, երբ հայտնաբերեցի OpenStreetMap (OSM): OSM- ը համատեղ ծրագիր է, որը ներառում է աշխարհի տարբեր ծայրերում գտնվող մարդկանց տվյալները: OSM- ը հստակորեն թույլ է տալիս իրենց տվյալների բաց օգտագործումը բաց կոդով ծրագրակազմի անունով: Որպես այդպիսին, OSM- ի վեբ էջ այցելելը հենց այնտեղ է սկսվում քարտեզի ոճավորման ճանապարհորդությունը:
OSM- ի կայք ժամանելուց հետո կտտացրեք «Արտահանել» ներդիրին ՝ քարտեզի արտահանման գործիքները ցուցադրելու համար: Այժմ, մեծացրեք ՝ դիտելու այն տարածաշրջանը, որով հետաքրքրված եք քարտեզի տվյալների հավաքագրմամբ: Ընտրեք «Ձեռքով ընտրեք այլ տարածք» հղումը, որը ձեր էկրանին կհայտնվի տուփ: Ձևավորեք և տեղադրեք այս տուփը հետաքրքրության տարածաշրջանի վրա: Բավարարվելուց հետո կտտացրեք «Արտահանել» կոճակին ՝ ձեր OSM տվյալների ֆայլը ներբեռնելու համար:
Նշում #1. Եթե ձեր ընտրած շրջանը պարունակում է չափազանց շատ տվյալներ, դուք կստանաք սխալ, որ դուք ընտրել եք շատ հանգույցներ: Եթե դա ձեզ հետ պատահի, կտտացրեք «Overpass API» կոճակին ՝ ձեր ավելի մեծ ֆայլը ներբեռնելու համար:
Նշում #2. Եթե ձեր ներբեռնված OSM ֆայլը 30 ՄԲ -ից մեծ է, իմ գրած Python ծրագիրը նկատելիորեն կդանդաղի: Եթե դուք վճռական եք օգտագործել մեծ տարածաշրջան, մտածեք սցենար գրել ավելորդ տվյալները դեն նետելու համար, որոնք դուք չեք պատրաստվում նկարել:
Քայլ 2. Գործընթացը սահմանելը. Տվյալների իմացություն




«Տվյալներ ունեմ … հիմա ի՞նչ»:
Սկսեք ձեր ներբեռնված OSM ֆայլը բացելով ձեր նախընտրած տեքստի խմբագրման ծրագրաշարի մեջ: Նախևառաջ կնկատեք, որ սա XML ֆայլ է, ինչը հիանալի է: XML- ը բավականին հեշտ է վերլուծել: Ձեր ֆայլի սկիզբը պետք է համարյա նույնական լինի այս քայլի առաջին նկարի հետ. Կցուցադրվեն որոշ հիմնական մետատվյալներ և աշխարհագրական սահմաններ:
Ֆայլը ոլորելիս կնկատեք տվյալների երեք տարր, որոնք օգտագործվում են ամբողջ ընթացքում.
- Հանգույցներ
- Եղանակներ
- Հարաբերություններ
Տվյալների ամենահիմնական տարրը, հանգույցը պարզապես ունի դրա հետ կապված եզակի նույնացուցիչ, լայնություն և երկայնություն: Իհարկե, կան լրացուցիչ մետատվյալներ, բայց մենք կարող ենք ապահով կերպով հրաժարվել դրանից:
Wանապարհները հանգույցների հավաքածու են: Wayանապարհը կարող է ներկայացվել որպես փակ ձև կամ բաց եզրագիծ: Wանապարհները բաղկացած են հանգույցների հավաքածուից, որոնք նույնականացվում են իրենց եզակի նույնացուցիչով: Դրանք պիտակավորված են բանալիներով, որոնք սահմանում են այն տվյալների խումբը, որին նրանք պատկանում են: Օրինակ, վերը նշված երրորդ պատկերում պատկերված ձևը պատկանում է տվյալների խմբին ՝ «տեղ», և նրա ենթախմբին ՝ «կղզի»: Այլ կերպ ասած, այս կոնկրետ ճանապարհը պատկանում է «տեղ» խմբի տակ գտնվող «կղզի» շերտին: Ուղիներն ունեն նաև յուրահատուկ նույնացուցիչներ:
Ի վերջո, հարաբերությունները ուղիների հավաքածու են: Հարաբերությունը կարող է ներկայացնել բարդ ձև ՝ անցքերով կամ բազմաթիվ շրջաններով: Հարաբերությունները կունենան նաև եզակի նույնացուցիչ և կպիտակավորվեն եղանակների նման:
Այս տվյալների տարրերի մասին ավելին կարող եք կարդալ OSM վիքիից:
- Հանգույցներ
- Եղանակներ
- Հարաբերություններ
Քայլ 3. III գործընթացի սահմանում. Տվյալների մարսում

Այժմ դուք պետք է առնվազն մակերեսային պատկերացում ունենաք OSM ֆայլ կազմող տվյալների տարրերի մասին: Այս պահին մենք շահագրգռված ենք կարդալ OSM- ի տվյալները `օգտագործելով ձեր նախընտրած լեզուն: Թեև այս քայլը Python- ի վրա հիմնված է, եթե չեք ցանկանում օգտագործել Python- ը, դեռ պետք է կարդաք այս մասը, քանի որ այն պարունակում է մի քանի խորհուրդ և հնարք:
Xml փաթեթը լռելյայն ներառված է Python- ի ստանդարտ բաշխումների մեծ մասի հետ: Մենք կօգտագործենք այս փաթեթը ՝ շատ հեշտությամբ վերլուծելու մեր OSM ֆայլը, ինչպես ցույց է տրված առաջին նկարում: Loop for single- ում կարող եք մշակել OSM տվյալների մշակումը տվյալների յուրաքանչյուր առանձին տարրի համար:
Պատկերի վերջին տողում դուք կնկատեք, որ ես ստուգում եմ «սահմաններ» պիտակը: Այս քայլը կենսականորեն կարևոր է լայնության և երկայնության արժեքները էկրանին պիքսելների թարգմանելու համար: Ես խորհուրդ եմ տալիս այս փոխարկումը գործարկել OSM ֆայլը բեռնելիս, քանի որ տվյալների զանգվածային փոխակերպումը ինտենսիվ գործընթաց է:
Խոսելով լայնություններ և երկայնություններ էկրանի կոորդինատների վերածելու մասին, ահա իմ գրած հաշվարկային գործառույթի հղումը: Դուք, ամենայն հավանականությամբ, մի փոքր տարօրինակ բան կնկատեք ՝ լայնությունը էկրանի կոորդինատներ փոխարկելու ժամանակ: Երկայնության հետ համեմատած կա լրացուցիչ քայլ: Ինչպես պարզվում է, OSM- ի տվյալները մոդելավորվում են Pseudo-Mercator պրոյեկցիոն մեթոդով: Բարեբախտաբար, OSM- ն այստեղ ունի այս թեմայի վերաբերյալ ֆանտաստիկ փաստաթղթեր, և դրանք ապահովում են զգալի թվով լեզուների լայնության փոխակերպման գործառույթներ: Հիանալի!
Նշում. Իմ ծածկագրում էկրանի կոորդինատը (0, 0) էկրանի վերին ձախ անկյունն է:
Քայլ 4. Python Map Stylizer- ի ներդրում



Մինչև այս պահը ես քննարկեցի OSM տվյալների ֆայլը `ինչ է դա, ինչպես կարդալ այն և ինչ անել դրա հետ: Այժմ ես կքննարկեմ իմ գրած ծրագրակազմը `ոճական քարտեզի վիզուալիզացիայի համար (GitHub repo- ն ներկայացված է ներածության մեջ):
Իմ կոնկրետ իրականացումը կենտրոնանում է մատուցման խողովակաշարի օգտագործողի վերահսկողության վրա: Մասնավորապես, ես թույլ եմ տալիս օգտվողին ընտրել այն շերտերը, որոնք նրանք ցանկանում են տեսանելի լինել և ինչպես են նրանք ցանկանում, որ այդ շերտը տեսանելի լինի: Ինչպես համառոտ նշեցի ավելի վաղ, մատուցվող տարրերի երկու դաս կա. Լրացնել տարրերը և տողերը: Լրացումները սահմանվում են միայն գույնով, իսկ տողերը `գույնով, գծի լայնությամբ, գծի ոճով, գծի գլխարկի ոճով և գծին միանալու ոճով:
Քանի որ օգտվողը փոփոխություններ է կատարում շերտերի ոճերի և տեսանելիության մեջ, փոփոխությունները արտացոլվում են աջ կողմում գտնվող քարտեզի վիջեթում: Երբ օգտվողը փոխում է քարտեզի արտաքին տեսքը `ըստ իր գոհունակության, նա կարող է հարմարեցնել քարտեզի առավելագույն չափը և քարտեզը պահել որպես պատկեր իր համակարգչում: Պատկերը պահելու դեպքում օգտագործողի կազմաձևման ֆայլը նույնպես կպահվի: Սա ապահովում է, որ օգտագործողը կարողանա ցանկացած պահի հետ կանչել և նորից օգտագործել այն կոնֆիգուրացիան, որն օգտագործել է որոշակի պատկեր ստեղծելու համար:
Քայլ 5. Իրականացման թերություն + լուծում


Երբ ես առաջին անգամ սկսեցի ձեռքով ոճավորել քարտեզը, ես իմացա, որ սա բավականին հոգնեցուցիչ գործընթաց էր: Օգտվողին առավելագույն վերահսկողություն առաջարկելը կարող է պարզապես ճնշող լինել `հասանելի« կոճակների »մեծ քանակի պատճառով: Այնուամենայնիվ, կա մի պարզ լուծում, որը ենթադրում է մի փոքր լրացուցիչ սցենարագրում:
Ես սկսեցի ՝ պարզելով, թե որ շերտերն են ինձ հատկապես հետաքրքրում: Այս ուսանելի, նպատակների համար, ենթադրենք, ինձ ամենաշատը հետաքրքրում են շենքերը (բոլորը), գետերը, հիմնական մայրուղիները և մակերեսային փողոցները: Ես կգրեի մի սցենար, որտեղ ես ստեղծում եմ կազմաձևման օրինակ, շեղում եմ շերտերի վիճակները համապատասխանաբար ՝ օգտագործելով setItemState () գործառույթը և սահմանված հաստատունները, և գույներ սահմանում ՝ հիմնվելով այն բանի վրա, թե ինչպես կցանկանայի, որ իմ շերտերը հայտնվեին setValue () - ի միջոցով: Ստացված կազմաձևման ֆայլը, որը պահվում է, կարող է պատճենվել կազմաձևերի թղթապանակում և բեռնվել օգտվողի կողմից:
Օրինակ սցենարը վերևի պատկերում է: Երկրորդ պատկերը նմուշ է, թե ինչպիսին կլինեին օգնականի գործառույթները, և քանի որ դրանք հիմնականում բոլորը նույնական են, պարզապես տարբեր հաստատուններով, ես ներառեցի միայն մեկ օրինակի նկար:
Քայլ 6. Բարելավման ոլորտներ

Իմ ծրագրային ապահովման իրագործմանն անդրադառնալուց հետո ես առանձնացրել եմ մի քանի ոլորտներ, որոնք օգտակար բարելավումներ կլինեն էներգիայի օգտագործողների համար:
- Շերտերի դինամիկ մատուցում: Ներկայումս ես ունեմ շերտերի կանխորոշված ցուցակ, որոնք մատուցվելու են, վերջ: Հիմնավորման մի մասը դժվարությունն էր `որոշելու, թե արդյոք շերտը պետք է լինի գիծ կամ լրացում: Արդյունքում, գրեթե յուրաքանչյուր OSM ֆայլ, որը բացում եք, ձեզ կդիմավորեն մի շարք նախազգուշացումներով շերտերի մասին, որոնք չեն մատուցվի: Հաճախ դրանք այնքան նվազագույն են, որ դա խնդիր չէ, բայց, հավանաբար, բացակայում են կրիտիկական շերտերը: Շերտերի դինամիկ մատուցումը կվերացնի այդ մտահոգությունները:
- Դինամիկ շերտի նշանակում: Սա գնում է ձեռք ձեռքի տված #1; եթե ցանկանում եք դինամիկ շերտի մատուցում, ձեզ հարկավոր է դինամիկ շերտի նշանակում (այսինքն ՝ լրացման շերտի նույնացում ընդդեմ գծի շերտի): Սա, ինչպես ես եմ սովորել, ողջամիտ կերպով կարող էր իրականացվել, քանի որ այն ուղիները, որոնց առաջին և վերջին հանգույցը նույնն են, փակ ճանապարհներ կլինեն և, հետևաբար, կլցվեն:
- Գունավոր խմբեր: Ոճավորված քարտեզը հաճախ ունի մի քանի շերտեր, որոնք ունեն նույն ոճը, և օգտվողին հնարավորություն տալը միաժամանակ փոփոխել խմբի ոճը, զգալիորեն կնվազեցնի օգտագործողների ծախսած ժամանակը մեկ առ մեկ:
Քայլ 7: Մտքերի փակումը



Շնորհակալ եմ բոլորին ժամանակ տրամադրելու համար ՝ կարդալու իմ Instructable- ը: Այս նախագիծը ներկայացնում է բազմաթիվ ժամերի հետազոտությունների, նախագծման, ծրագրավորման և կարգաբերման գագաթնակետը: Հուսով եմ, որ ես կարողացել եմ տրամադրել մեկնարկի հարթակ, որից դուք կարող եք կառուցել ձեր սեփական նախագիծը կամ կառուցել այն, ինչ արդեն գրել եմ: Նաև հույս ունեմ, որ իմ թերություններն ու խորհուրդները բազմաթիվ կետեր են տալիս, որոնք պետք է հաշվի առնել ձեր նախագծում: Եթե դուք ավելի քիչ եք հակված ծրագրավորման և ավելի շատ հակված եք արվեստի գործեր ստեղծելու, ես կցանկանայի տեսնել, թե ինչ եք պատրաստում մեկնաբանություններում: Հնարավորություններն անսպառ են:
Հատուկ շնորհակալություն OpenStreetMap- ի ներդրողներին: Նման նախագծերը հնարավոր չէին իրականացնել առանց նրանց զգալի ջանքերի:
Խնդրում եմ ինձ տեղյակ պահեք, եթե մեկնաբանության մեջ հարցեր ունեք:


Երկրորդ տեղը գրավեց Քարտեզների մարտահրավերը
Խորհուրդ ենք տալիս:
Ստեղծեք հարմարեցված քարտեզներ ձեր Garmin GPS- ի համար. 8 քայլ (նկարներով)

Ստեղծեք հարմարեցված քարտեզներ ձեր Garmin GPS- ի համար. Եթե ունեք Garmin GPS, որը նախատեսված է արշավի և այլ բացօթյա գործունեության համար (ներառյալ GPSMAP, eTrex, Colorado, Dakota, Oregon և Montana շարքերը, ի թիվս մի քանի ուրիշների), ապա պարտադիր չէ բավարարվեք մերկ ոսկորների քարտեզներով, որոնք նախապես բեռնված էին դրա վրա: Ե
Ինչպես ստեղծել Arduino Shield շատ հեշտ (EasyEDA- ի միջոցով) ՝ 4 քայլ

Ինչպես ստեղծել Arduino Shield շատ հեշտ (EasyEDA- ի օգտագործմամբ). Այս հրահանգում ես ձեզ կսովորեցնեմ, թե ինչպես ստեղծել Arduino Uno Shield շատ հեշտ: Ես շատ մանրամասների մեջ չեմ մտնի, բայց ես ներառեցի մի տեսանյութ, որտեղ ես մի փոքր ավելի խորացեք, թե ինչպես օգտագործել ծրագրաշարը: Ես օգտագործում եմ EasyEDA վեբ ծրագիրը, քանի որ ես
Arduino ձեռնարկ - BLYNK ոճավորված կոճակ և ESP -01 փոխանցման մոդուլ. 3 քայլ (նկարներով)

Arduino Tutorial - BLYNK Styled Button և ESP -01 ռելեի մոդուլ. Բարի գալուստ մեր ալիքի մեկ այլ ձեռնարկ, սա այս սեզոնի առաջին ձեռնարկն է, որը նվիրված կլինի IoT համակարգերին, այստեղ մենք նկարագրելու ենք սարքերի որոշ առանձնահատկություններ և գործառույթներ: օգտագործվում է այս տիպի համակարգերում: Սրանք ստեղծելու համար
Ինչպես ստեղծել կեղծ մեքենայի ահազանգ 555 ժամաչափի միջոցով `5 քայլ

Ինչպես ստեղծել կեղծ մեքենայի ահազանգ 555 ժմչփի միջոցով. Այս նախագիծը ցույց է տալիս, թե ինչպես կարելի է հինգ վայրկյան ուշացումով լուսադիոդային լուսադիոդ պատրաստել ՝ օգտագործելով NE555: Սա կարող է ծառայել որպես մեքենայի կեղծ ահազանգ, քանի որ նմանակում է մեքենայի ազդանշանային համակարգին `վառ կարմիր առկայծող LED- ով: Բարդության մակարդակ Շրջանն ինքնին դժվար չէ
Ինչպես ստեղծել «rmարթուցիչ» Arduino Mega- ի միջոցով. 9 քայլ

Ինչպես ստեղծել «Տագնապի գորգ» Arduino Mega- ի հետ. Մենք բոլորս ունենում ենք այն առավոտները, որտեղ մենք դժվարանում ենք անկողնուց վեր կենալ: Alarmարթուցիչը շարունակվում է Մենք բաց ենք թողել հանդիպումը, կամ դասը արդեն սկսվել է: Այս խնդրի դեմ պայքարելու համար մենք ստեղծել ենք