Სარჩევი:

როგორ შევქმნათ პერსონალური სტილიზებული რუქები OpenStreetMap– ის გამოყენებით: 7 ნაბიჯი (სურათებით)
როგორ შევქმნათ პერსონალური სტილიზებული რუქები OpenStreetMap– ის გამოყენებით: 7 ნაბიჯი (სურათებით)

ვიდეო: როგორ შევქმნათ პერსონალური სტილიზებული რუქები OpenStreetMap– ის გამოყენებით: 7 ნაბიჯი (სურათებით)

ვიდეო: როგორ შევქმნათ პერსონალური სტილიზებული რუქები OpenStreetMap– ის გამოყენებით: 7 ნაბიჯი (სურათებით)
ვიდეო: როგორ შევქმნათ ოცნების კარიერა - ცხოვრებისეული მოწოდების კურსი 2024, ივლისი
Anonim
როგორ შევქმნათ პერსონალური სტილიზებული რუქები OpenStreetMap გამოყენებით
როგორ შევქმნათ პერსონალური სტილიზებული რუქები OpenStreetMap გამოყენებით

ამ სასწავლო ინსტრუქციაში მე აღვწერ პროცესს, რომლის საშუალებითაც შეგიძლიათ შექმნათ თქვენი საკუთარი ხელით სტილიზებული რუქები. სტილიზებული რუკა არის რუქა, სადაც მომხმარებელს შეუძლია განსაზღვროს მონაცემთა რომელი ფენების ვიზუალიზაცია ხდება, ასევე განსაზღვროს სტილი, რომლითაც თითოეული ფენა ვიზუალიზდება. მე პირველად აღვწერ პროცესს, რომლის საშუალებითაც შეგიძლიათ დაწეროთ პროგრამები რუქების სტილიზაციისთვის, რასაც მოჰყვება პითონის პროგრამული უზრუნველყოფის მაგალითი, რომელიც მე დავწერე ამ ამოცანის შესასრულებლად.

შემდეგი ვიდეო ხაზს უსვამს იმას, თუ როგორ ვქმნი მე პირადად სტილიზებულ რუქებს, მაგრამ განაგრძეთ კითხვა ინტიმური დეტალებისთვის. მე ძალიან აღელვებული ვხედავ რას ქმნის საზოგადოება!

რა არის ჩემი მოტივაცია ამ პროექტის უკან?

გულწრფელად გითხრათ, მე დავიწყე ეს პროექტი, რადგან ვფიქრობდი, რომ ამის გაკეთება სახალისო იქნებოდა. ეს იდეა ტრიალებდა ჩემს გონებაში ბოლო ერთი წლის განმავლობაში და მე საბოლოოდ გამოვნახე დრო, რომელიც მე მჭირდებოდა მისი განსახორციელებლად. ერთდღიანი პროტოტიპირების შემდეგ რამდენიმე ძირითადი სკრიპტი, მე შევძელი უკიდურესად პერსპექტიული შედეგების გამომუშავება - იმდენად დამაიმედებელი, რომ ვიცოდი, რომ მჭირდებოდა ჩემი სკრიპტების ფორმალიზაცია ისე, რომ სხვებმა ადვილად შეძლონ საკუთარი შემოქმედება.

ამ ინსტრუქციის წერის ჩემი მოტივაცია განპირობებულია იმით, რომ მე აღმოვაჩინე ძალიან მინიმალური ინფორმაცია იმის შესახებ, თუ როგორ უნდა შექმნათ თქვენი საკუთარი სტილიზებული რუქები ნულიდან. ვიმედოვნებ, რომ ის რაც გავიგე საზოგადოებას გავუზიარე.

რესურსები/ბმულები:

  • OpenStreetMap
  • OpenStreetMap ლეგალური
  • Github საცავი

მარაგები

  • პითონის განაწილება (მე გამოვიყენე ანაკონდა და პითონი 3.6)
  • PyQt5 (GUI დამოკიდებულებისთვის)

ნაბიჯი 1: პროცესის განსაზღვრა: OSM ფაილის ჩამოტვირთვა

პროცესის განსაზღვრა: OSM ფაილის ჩამოტვირთვა
პროცესის განსაზღვრა: OSM ფაილის ჩამოტვირთვა

როდესაც მე პირველად დავიწყე ეს პროექტი, ყველაზე კაშკაშა კითხვა იყო, "სად შემიძლია რუქის მონაცემების მოპოვება". ბუნებრივია, როგორც თქვენ მოელით, მე მაშინვე მოვიფიქრე Google Maps. მნიშვნელოვანი კვლევის შემდეგ აღმოვაჩინე, რომ Google- ს ნამდვილად არ სურს ხალხი თამაშობდეს მათ მონაცემებთან, შემოქმედებითი გაგებით თუ სხვაგვარად. სინამდვილეში, ისინი აშკარად აკრძალავენ ვებ-გვერდების გადაწერას Google Maps– დან.

საბედნიეროდ, ჩემი სასოწარკვეთილება ხანმოკლე აღმოჩნდა OpenStreetMap- ის (OSM) აღმოჩენისთანავე. OSM არის ერთობლივი პროექტი, რომელშიც მონაწილეობენ ადამიანები მთელს მსოფლიოში, მონაწილეობენ მონაცემებში. OSM მკაფიოდ იძლევა მონაცემების ღია კოდის გამოყენებას ღია კოდის პროგრამული უზრუნველყოფის სახელით. როგორც ასეთი, OSM ვებ – გვერდის მონახულება იწყება იქ, სადაც იწყება რუქის სტილიზაციის მოგზაურობა.

OSM ვებსაიტზე მისვლის შემდეგ დააწკაპუნეთ "ექსპორტზე" ჩანართზე, რომ ნახოთ რუქის ექსპორტის ინსტრუმენტები. ახლა გაადიდეთ, რომ ნახოთ რეგიონი, რომლითაც დაინტერესებული ხართ რუკის მონაცემების შეგროვებით. შეარჩიეთ ბმული "ხელით შეარჩიეთ სხვა ტერიტორია", რომელიც თქვენს ეკრანზე გამოჩნდება. ჩამოაყალიბეთ და განათავსეთ ეს ყუთი ინტერესის რეგიონში. როდესაც დაკმაყოფილდებით, დააწკაპუნეთ ღილაკზე "ექსპორტი", რომ ჩამოტვირთოთ თქვენი OSM მონაცემთა ფაილი.

შენიშვნა #1: თუ თქვენი არჩეული რეგიონი შეიცავს ძალიან ბევრ მონაცემს, თქვენ მიიღებთ შეცდომას, რომ თქვენ შეარჩიეთ ძალიან ბევრი კვანძი. თუ ეს თქვენც მოხდება, დააწკაპუნეთ ღილაკზე "Overpass API", რომ ჩამოტვირთოთ თქვენი უფრო დიდი ფაილი.

შენიშვნა #2: თუ თქვენი გადმოწერილი OSM ფაილი 30 მბ -ზე მეტია, ჩემს მიერ დაწერილი პითონის პროგრამა შესამჩნევად შენელდება. თუ გადაწყვეტთ გამოიყენოთ დიდი რეგიონი, განიხილეთ სკრიპტი, რომ გადააგდოთ ზედმეტი მონაცემები, რომელთა ხატვასაც არ აპირებთ.

ნაბიჯი 2: II პროცესის განსაზღვრა: მონაცემთა გაგება

II პროცესის განსაზღვრა: მონაცემთა გაგება
II პროცესის განსაზღვრა: მონაცემთა გაგება
II პროცესის განსაზღვრა: მონაცემთა გაგება
II პროცესის განსაზღვრა: მონაცემთა გაგება
II პროცესის განსაზღვრა: მონაცემთა გაგება
II პროცესის განსაზღვრა: მონაცემთა გაგება
II პროცესის განსაზღვრა: მონაცემთა გაგება
II პროცესის განსაზღვრა: მონაცემთა გაგება

"მე მაქვს მონაცემები … ახლა რა?"

დაიწყეთ თქვენი გადმოწერილი OSM ფაილის გახსნით თქვენი საყვარელი ტექსტის რედაქტირების პროგრამულ უზრუნველყოფაში. თქვენ პირველად შეამჩნევთ, რომ ეს არის XML ფაილი, რაც შესანიშნავია! XML საკმაოდ ადვილი გასაანალიზებელია. თქვენი ფაილის დასაწყისი თითქმის იდენტური უნდა იყოს ამ ნაბიჯის პირველ სურათზე - ჩამოთვლილია რამდენიმე ძირითადი მეტამონაცემები და გეოგრაფიული საზღვრები.

ფაილის გადახვევისას თქვენ შეამჩნევთ მონაცემთა სამი ელემენტს, რომლებიც გამოიყენება მთელ ტერიტორიაზე:

  1. კვანძები
  2. გზები
  3. ურთიერთობები

მონაცემთა ყველაზე ძირითად ელემენტს, კვანძს უბრალოდ აქვს მასთან დაკავშირებული უნიკალური იდენტიფიკატორი, გრძედი და გრძედი. რასაკვირველია, არსებობს დამატებითი მეტამონაცემები, მაგრამ ჩვენ შეგვიძლია უსაფრთხოდ განვაგდოთ იგი.

გზები არის კვანძების კოლექცია. გზა შეიძლება გამოიცეს დახურულ ფორმად ან ღია ხაზად. გზები შედგება კვანძების კოლექციისგან, რომლებიც იდენტიფიცირებულია მათი უნიკალური იდენტიფიკატორით. ისინი მონიშნულია გასაღებებით, რომლებიც განსაზღვრავს მონაცემთა ჯგუფს, რომელსაც ისინი მიეკუთვნებიან. მაგალითად, მესამე სურათზე გამოსახული გზა ეკუთვნის მონაცემთა ჯგუფს "ადგილი" და მის ქვეჯგუფს, "კუნძულს". სხვა სიტყვებით რომ ვთქვათ, ეს კონკრეტული გზა მიეკუთვნება "კუნძულის" ფენას "ადგილის" ჯგუფის ქვეშ. გზებს ასევე აქვთ უნიკალური იდენტიფიკატორი.

დაბოლოს, ურთიერთობები არის გზების კოლექცია. ურთიერთობა შეიძლება წარმოადგენდეს რთულ ფორმას ხვრელებით ან მრავალ რეგიონთან. ურთიერთობებს ასევე ექნებათ უნიკალური იდენტიფიკატორი და იქნება მონიშნული გზების მსგავსად.

თქვენ შეგიძლიათ წაიკითხოთ მეტი ამ მონაცემთა ელემენტების შესახებ OSM ვიკიდან:

  • კვანძები
  • გზები
  • ურთიერთობები

ნაბიჯი 3: III პროცესის განსაზღვრა: მონაცემების მონელება

III პროცესის განსაზღვრა: მონაცემების მონელება
III პროცესის განსაზღვრა: მონაცემების მონელება

ახლა თქვენ უნდა გქონდეთ მინიმუმ ზედაპირული გაგება მონაცემთა ელემენტების შესახებ, რომლებიც ქმნიან OSM ფაილს. ამ ეტაპზე, ჩვენ დაინტერესებულნი ვართ OSM მონაცემების წაკითხვა თქვენი არჩეული ენის გამოყენებით. მიუხედავად იმისა, რომ ეს ნაბიჯი პითონზეა ორიენტირებული, თუ არ გსურთ პითონის გამოყენება, მაინც უნდა წაიკითხოთ ეს ნაწილი, რადგან ის შეიცავს რამდენიმე რჩევას და ხრიკს.

Xml პაკეტი ნაგულისხმევად შედის სტანდარტული პითონის განაწილებით. ჩვენ გამოვიყენებთ ამ პაკეტს, რომ ძალიან მარტივად გავაანალიზოთ ჩვენი OSM ფაილი, როგორც ეს ნაჩვენებია პირველ სურათზე. ერთი მარყუჟისთვის, თქვენ შეგიძლიათ დაამუშაოთ OSM მონაცემების დამუშავება მონაცემთა თითოეული კონკრეტული ელემენტისთვის.

სურათის ბოლო ხაზზე შეამჩნევთ, რომ მე ვამოწმებ "საზღვრების" ტეგს. ეს ნაბიჯი სასიცოცხლოდ მნიშვნელოვანია გრძედის და გრძედის მნიშვნელობების ეკრანზე პიქსელებად თარგმნისას. მე მკაცრად გირჩევთ ამ კონვერტაციის გაშვებას OSM ფაილის ჩატვირთვის დროს, რადგან მონაცემთა მასობრივი გარდაქმნა ინტენსიური პროცესია.

გრძედის და გრძედის ეკრანის კოორდინატებზე გადაყვანაზე საუბრისას, აქ არის ბმული ჩემს მიერ დაწერილი გამოთვლითი ფუნქციისთვის. თქვენ ალბათ შეამჩნევთ რაღაც უცნაურს გრძედის ეკრანის კოორდინატებად გადაქცევაში. გრძედთან შედარებით დამატებითი ნაბიჯია ჩართული! როგორც ირკვევა, OSM მონაცემების მოდელირება ხდება ფსევდო-მერკატორის პროექციის მეთოდის გამოყენებით. საბედნიეროდ, OSM– ს აქვს ფანტასტიკური დოკუმენტაცია ამ თემაზე აქ და ისინი უზრუნველყოფენ გრძედის კონვერტაციის ფუნქციებს ენების მნიშვნელოვანი რაოდენობისთვის. გასაოცარია!

შენიშვნა: ჩემს კოდში ეკრანის კოორდინატი (0, 0) არის ეკრანის ზედა მარცხენა კუთხე.

ნაბიჯი 4: პითონის რუქის სტილიზატორის დანერგვა

პითონის რუქის სტილიზატორის დანერგვა
პითონის რუქის სტილიზატორის დანერგვა
პითონის რუქის სტილიზატორის დანერგვა
პითონის რუქის სტილიზატორის დანერგვა
პითონის რუქის სტილიზატორის დანერგვა
პითონის რუქის სტილიზატორის დანერგვა

ამ მომენტამდე მე განვიხილე OSM მონაცემთა ფაილი - რა არის ეს, როგორ წავიკითხო და რა გავაკეთო მასთან. ახლა განვიხილავ ჩემს მიერ დაწერილ პროგრამულ უზრუნველყოფას სტილისტური რუქის ვიზუალიზაციის დასაძლევად (GitHub repo მოცემულია შესავალში).

ჩემი კონკრეტული განხორციელება აქცენტს აკეთებს მომხმარებლის კონტროლზე რენდერის მილსადენზე. კერძოდ, მე უფლებას ვაძლევ მომხმარებელს აირჩიოს ის ფენები, რომელთა ნახვაც სურთ და როგორ უნდათ, რომ ეს ფენა იყოს ვიზუალიზებული. როგორც მოკლედ აღვნიშნე ადრე, არსებობს ელემენტების ორი კლასი: ელემენტების შევსება და ელემენტები. შევსება განისაზღვრება მხოლოდ ფერით, ხოლო ხაზები განისაზღვრება ფერით, ხაზის სიგანით, ხაზის სტილით, ხაზის თავსახურის სტილით და ხაზის შეერთების სტილით.

როდესაც მომხმარებელი ახდენს ცვლილებებს ფენის სტილში და ხილვადობაში, ცვლილებები აისახება რუქის ვიჯეტში მარჯვნივ. მას შემდეგ, რაც მომხმარებელმა შეცვალა რუქის გარეგნობა მათი კმაყოფილებით, მას შეუძლია შეცვალოს რუქის მაქსიმალური განზომილება და შეინახოს რუკა როგორც გამოსახულება მის კომპიუტერში. სურათის შენახვისას ასევე შეინახება მომხმარებლის კონფიგურაციის ფაილი. ეს უზრუნველყოფს მომხმარებელს შეუძლია გაიხსენოს და ხელახლა გამოიყენოს ის კონფიგურაცია, რომელიც მან გამოიყენა კონკრეტული სურათის შესაქმნელად ნებისმიერ დროს.

ნაბიჯი 5: განხორციელების ნაკლი + გადაწყვეტა

განხორციელების ნაკლი + გამოსავალი
განხორციელების ნაკლი + გამოსავალი
განხორციელების ნაკლი + გამოსავალი
განხორციელების ნაკლი + გამოსავალი

როდესაც პირველად დავიწყე რუკის სტილიზაცია ხელით, გავიგე, რომ ეს საკმაოდ დამღლელი პროცესია. მომხმარებლის მაქსიმალური კონტროლის შეთავაზება შეიძლება უბრალოდ დამთრგუნველი იყოს არსებული დიდი რაოდენობის "სახელურების" გამო. ამასთან, არსებობს მარტივი გამოსავალი, რომელიც მოიცავს ცოტა დამატებით სკრიპტირებას.

დავიწყე იდენტიფიკაციით რომელი ფენები მაინტერესებს განსაკუთრებით. ამ სასწავლო მიზნისთვის, ვთქვათ, მე ყველაზე მეტად შენობები (ყველა მათგანი), მდინარეები, მთავარი მაგისტრალები და ზედაპირული ქუჩები მაინტერესებს. მე დავწერ სკრიპტს, სადაც ვქმნი კონფიგურაციის მაგალითს, ვცვლი ფენის მდგომარეობას სათანადოდ setItemState () ფუნქციისა და განსაზღვრული მუდმივების გამოყენებით და ვადგენ ფერს იმის მიხედვით, თუ როგორ მინდა ჩემი ფენების გამოჩენა setValue () - ის გამოყენებით. შედეგად მიღებული კონფიგურაციის ფაილი, რომელიც ინახება, შეიძლება გადაწერილი იყოს კონფიგურაციის საქაღალდეში და დატვირთული მომხმარებლის მიერ.

სკრიპტის მაგალითი მოცემულია ზემოთ მოცემულ სურათზე. მეორე სურათი არის მაგალითი იმისა, თუ როგორ გამოიყურებოდა დამხმარე ფუნქციები და რადგან ისინი ძირითადად ყველა იდენტურია, მხოლოდ განსხვავებული მუდმივებით, მე მხოლოდ ერთი მაგალითის სურათი ჩავრთე.

ნაბიჯი 6: გაუმჯობესების სფეროები

გაუმჯობესების სფეროები
გაუმჯობესების სფეროები

ჩემი პროგრამული უზრუნველყოფის განხორციელებაზე ფიქრის შემდეგ, მე გამოვყავი რამდენიმე სფერო, რომლებიც სასარგებლო გაუმჯობესება იქნებოდა ენერგიის მომხმარებლებისთვის.

  1. ფენის დინამიური გაწევა. ამჟამად, მე მაქვს წინასწარ განსაზღვრული ფენების სია, რომლებიც გაწეული იქნება, ეს არის ის. დასაბუთების ნაწილი იყო სირთულე იმის დადგენაში, უნდა იყოს თუ არა ფენა ხაზი თუ შევსება. შედეგად, თითქმის ყველა OSM ფაილის გახსნით, თქვენ მიიღებთ გაფრთხილებებს ფენების შესახებ, რომლებიც არ იქნება გაცემული. ხშირად ეს იმდენად მინიმალურია, რომ ეს არ არის საკითხი, მაგრამ კრიტიკული ფენები აკლია. ფენის დინამიური გაწევა ამ პრობლემებს აღმოფხვრის.
  2. დინამიური ფენის დავალება. ეს მიდის ხელით #1; თუ გსურთ დინამიური ფენის გაცემა, გჭირდებათ დინამიური ფენის მინიჭება (ანუ შევსების ფენის იდენტიფიცირება ხაზის ფენის წინააღმდეგ). ეს შეიძლება გონივრულად განხორციელდეს, როგორც მე ვისწავლე, რადგან გზები, რომელთა პირველი და ბოლო კვანძი ერთი და იგივეა, დახურული ბილიკები იქნება და, შესაბამისად, ივსება.
  3. ფერადი ჯგუფები. სტილიზებულ რუქას ხშირად აქვს რამოდენიმე ფენა, რომელსაც აქვს ერთი და იგივე სტილი, ხოლო მომხმარებლის შესაძლებლობას, შეცვალოს ჯგუფის სტილი ერთდროულად, მნიშვნელოვნად შეამცირებს მომხმარებლის მიერ ფენების რედაქტირების დროს გატარებულ დროს.

ნაბიჯი 7: ფიქრების დახურვა

დახურვის აზრები
დახურვის აზრები
დახურვის აზრები
დახურვის აზრები
დახურვის აზრები
დახურვის აზრები

მადლობა ყველას, რომ დრო დაუთმეთ და წაიკითხეთ ჩემი ინსტრუქცია. ეს პროექტი წარმოადგენს მრავალსაათიანი კვლევის, დიზაინის, პროგრამირებისა და გამართვის კულმინაციას. ვიმედოვნებ, რომ მე მოვახერხე გაშვების ადგილის უზრუნველყოფა, საიდანაც შენ შეგიძლია ააგო საკუთარი პროექტი ან დაეყრდნო იმას, რაც უკვე დავწერე. მე ასევე ვიმედოვნებ, რომ ჩემი ნაკლოვანებები და რჩევები მოგცემთ უამრავ პუნქტს თქვენს დიზაინში. თუ თქვენ ნაკლებად ხართ მიდრეკილი პროგრამისკენ და უფრო მეტად მიდრეკილი ხართ ხელოვნების ნიმუშების შექმნისკენ, სიამოვნებით ვნახავ რას აკეთებთ კომენტარებში! შესაძლებლობები უსასრულოა!

განსაკუთრებული მადლობა OpenStreetMap კონტრიბუტორებს! მსგავსი პროექტები შეუძლებელი იქნებოდა მათი მნიშვნელოვანი ძალისხმევის გარეშე.

გთხოვთ შემატყობინოთ, თუ თქვენ გაქვთ რაიმე შეკითხვა კომენტარებში!

რუკების გამოწვევა
რუკების გამოწვევა
რუკების გამოწვევა
რუკების გამოწვევა

მეორე ადგილი რუქების გამოწვევაში

გირჩევთ: