მდებარეობის განსაზღვრა GPS-ის გარეშე: როგორ მუშაობს Yandex.Locator. რატომ GPS-ის გარეშე და სხვა როგორ

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

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

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

რატომ GPS-ის გარეშე და სხვა როგორ

სატელიტური სანავიგაციო სისტემები (GNSS), ჩვენს შემთხვევაში GPS და GLONASS, დღეს ყველაზე ზუსტი გეო-განსაზღვრების მეთოდია. შესაბამისი მოდულები გვხვდება თითქმის ყველა თანამედროვე სმარტფონში. მაგრამ არა ყოველთვის და არა ყველგან, მას შეუძლია გადაჭრას LBS-ის პრობლემები.

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

და, რა თქმა უნდა, არსებობს ალტერნატივები - თქვენ შეგიძლიათ განსაზღვროთ მდებარეობა უახლოეს GSM-კოშკებით, Wi-Fi ქსელებით და თუნდაც IP მისამართით. თითოეული ამ მეთოდის სიზუსტე გაცილებით უარესია, ვიდრე GPS-ის. მაგრამ თუ მათ დააკავშირებთ, ისინი ერთად მიიღებენ მისაღებ ხარისხს. ამავდროულად, ერთის ზოგიერთი მინუსი ანეიტრალებს მეორის შესაძლებლობებით. GSM ანძები თითქმის ყველგან არის, მაგრამ Wi-Fi ქსელები არა. ამავდროულად, ამოცნობის სიზუსტე უკეთესია Wi-Fi-ზე. ამიტომ, კომბინირებული მეთოდი უკეთესია სისრულის და სიზუსტის თვალსაზრისით, ვიდრე თითოეული ცალკე. ნაკლებად ცნობილია ის ფაქტი, რომ ორ როუტერს ქალაქის სხვადასხვა ნაწილში შეიძლება ჰქონდეს იგივე MAC მისამართი. GSM-ისა და Wi-Fi-ის გაერთიანება წყვეტს ასეთ შეჯახებებს. ამ მარშრუტიზატორებს, სავარაუდოდ, მახლობლად ექნებათ კოშკები სხვადასხვა იდენტიფიკატორებით - ბოლოს და ბოლოს, ბლოკში შეჯახების ალბათობა გაცილებით ნაკლებია, ვიდრე ქალაქის მასშტაბით.

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

ქსელის მდებარეობების ბაზა

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

როდესაც ჩვენ დავიწყეთ Locator-ის შემუშავება, უკვე ასობით ათასი ადამიანი იყო ქალაქების ქუჩებში, სადაც Yandex.Maps ჩართული იყო ტელეფონებში. მომხმარებლის თანხმობით, აპლიკაცია მუდმივად გადასცემს მის GPS კოორდინატებს - Yandex.Traffic აგებულია ამ ინფორმაციის საფუძველზე. ჩვენ ვიფიქრეთ, რომ ამასთან ერთად, აპლიკაციას შეეძლო მონიშნოს, რომელ საბაზო სადგურს ემსახურება ტელეფონი ამ კოორდინატებში, რომელი Wi-Fi ქსელები ჩანს (რა თქმა უნდა, თავად ქსელებთან დაკავშირების გარეშე - ისე, რომ არ შეიქმნას კონფიდენციალურობის რისკები) .

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

ამრიგად, მომხმარებლებმა დაიწყეს ერთმანეთის დახმარება:


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

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

"მოძრავი" ქსელები

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

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

ღრუბლის რადიუსი

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

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

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

ღრუბლის გარეშე სიგნალები

სამწუხაროდ, მომხმარებლებისგან ყველა GPS სიგნალი არ შეიძლება ადვილად შედგეს ღრუბლებში. აღმოჩნდა, რომ თუ რუკაზე ზედ დააყენებთ ერთი ქსელის ყველა სიგნალს, „ელიფსების“ გარდა, ის შეიცავს წერტილებსა და ხაზებს. ეს არის, შესაბამისად, ცალკეული სიგნალები, რომლებიც ძალიან შორს არიან იმავე ქსელის სიგნალების დაგროვებისგან და ძალიან გრძელი GPS ტრასები (ანუ GPS სიგნალების ჯაჭვები).

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

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

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

როდესაც მონაცემები მწირი იყო, იყო კიდევ ერთი სირთულე ყველა სიგნალის ერთ ღრუბელში გაერთიანებისას. მოხდა ისე, რომ კოშკიდან სიგნალები ერთი ქალაქიდან მეორედანაც მოდიოდა. დაგვეხმარა მდებარეობის ტერიტორიის კოდის - LAC (Location Area Code) GSM ქსელების იდენტიფიკატორებში ყოფნა. იმის გამო, რომ სტანდარტის მიხედვით ახლოს უნდა იყოს იგივე კოდის მქონე კოშკები, ლოკატორმა დაიწყო დაუფასებელი წონის მინიჭება ღრუბლებს, რომლებიც იყვნენ „არასწორ ქალაქში“ (ანუ ღრუბლებს შორის განსხვავებული LAC-ით).

განმარტების სიზუსტის გაუმჯობესება...

... GSM ქსელების მეშვეობით
ოდესღაც აპლიკაციებს ჰქონდათ წვდომა მხოლოდ ერთი საბაზო სადგურის შესახებ ინფორმაციაზე, თუმცა ტელეფონი ყველაზე ხშირად ხედავს რამდენიმეს. Android პლატფორმის გამოჩენის შემდეგ, აპლიკაციებმა შეძლეს ისწავლონ ყველა მათგანის დანახვა (გარდა 3G სტანდარტის კავშირისა, რომელიც მხოლოდ ერთი მობილური ანძის ამოცნობის საშუალებას იძლევა). მდებარეობის დადგენა უფრო ზუსტად დაიწყო - უკვე არა ერთი ღრუბლით, არამედ რამდენიმეს აგრეგატით. აღმოჩნდა, რომ მრავალი ღრუბლისთვის შეგიძლიათ გამოიყენოთ იგივე მიდგომა, როგორც ერთი. რადიუსი გამოითვლება ღრუბლების სიმრავლეში შემავალი სიგნალების ფესვ-საშუალო კვადრატული გადახრიდან, ხოლო ცენტრი გამოითვლება მათი კოორდინატების საშუალოდან.
... Wi-Fi ქსელების მეშვეობით
როდესაც სმარტფონი რამდენიმე Wi-Fi ქსელის ფარგლებშია, მას შეუძლია შეატყობინოს არა მხოლოდ მათი სიის, არამედ თითოეულის სიგნალის სიძლიერის შესახებ. ჩვენ გამოვიყენეთ ცოდნა ამ სიმძლავრის შესახებ იმ წრის ცენტრის დასაზუსტებლად, რომელშიც მომხმარებელი მდებარეობს. ჩვენ დავიწყეთ წარმოსახვითი წყაროების შეჩერება დაკვირვებული ღრუბლების ცენტრებში - რაც უფრო ძლიერია სიგნალი, მით უფრო მჭიდროა. და მათი თავისუფალი ბოლოები ერთმანეთთან არის დაკავშირებული. წერტილი, სადაც ეს ზამბარები დაბალანსებულია, არის დახვეწილი ცენტრი.

შედეგად მიღებული ხარისხი

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

ამ ტექნიკის გამოყენებით მივიღეთ შემდეგი რიცხვები:

  • დღე-ღამეში მოთხოვნის 83%-ზე მდებარეობა სწორად განისაზღვრა - მოწყობილობის GPS კოორდინატები მოხვდა ლოკატორის მიერ დასახელებულ ზონაში.
  • სიგნალების 14% - შეცდომით:
    • 7% - შეცდომა 100 მეტრზე ნაკლები
    • 5,6% - 100 მეტრიდან რამდენიმე კილომეტრამდე
    • 1.4% - ლოკატორი არასწორია ქალაქების მიხედვით
  • მოთხოვნების დარჩენილი 3% იღებს პასუხს "მდებარეობა ვერ მოიძებნა"


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

მაგრამ არსებობს ტექნოლოგიური შეზღუდვები:

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

გამოთვლის მოცულობა

მომხმარებელზე სწრაფი რეაგირებისთვის, თქვენ უნდა მოამზადოთ მთელი პასუხი წინასწარ, ან თუნდაც მნიშვნელოვანი ნაწილი. ყოველ ღამე, ჩვენს YAMR განაწილებულ გამოთვლით სისტემაზე დაფუძნებული კლასტერი აგროვებს გუშინდელ დღემდე მიღებულ სიგნალებს და იღებს პასუხისათვის მზად "ღრუბლებს". მოთხოვნის მომენტში ლოკატორს მხოლოდ მათი სწორად გაერთიანება სჭირდება. ასე რომ, ტერაბაიტი "ნედლეული სიგნალები" შეკუმშული იყო 1,5-2 გბ მზა პასუხებზე, რომლებიც ადვილად ჯდება მეხსიერებაში. და პასუხის მომზადება თითქმის ყოველთვის ჯდება 1 ms-ში და კლასტერში თითოეულ სერვერს შეუძლია გაუძლოს 10 ათასი RPS.

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

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

ანალოგები

მდებარეობის სერვისები GPS-ის გარეშე, როგორც უკვე ვთქვით, ხელმისაწვდომი არ არის მხოლოდ Yandex-ისგან. დეველოპერებს შეუძლიათ დაუკავშირდნენ კომერციულ პროვაიდერს (როგორიცაა Altergeo რუსეთში და Skyhook Wireless მსოფლიოში), ან გამოიყენონ მობილური პლატფორმის ან ბრაუზერის API.

ზოგადად, ასეთი მონაცემთა ბაზის შეკრება შესაძლებელია სამი გზით:

  • დაათვალიერეთ საინტერესო ქალაქები მანქანით, დაასკანირეთ ქსელები და შემდეგ პერიოდულად გადადით მონაცემთა ბაზის განახლებისთვის
  • შექმენით მასიური მობილური აპლიკაცია (მაგალითად, Yandex.Maps)
  • შექმენით მობილური პლატფორმა (როგორიცაა iOS ან Android)
მაგრამ მხოლოდ გეოდამოკიდებული აპლიკაციის შემქმნელმა უნდა აირჩიოს სხვადასხვა გადაწყვეტილებებს შორის და მომხმარებელი „ცხოვრობს“ ამ არჩევანით. ერთიანი შედარების მეთოდის არარსებობის შემთხვევაში, ყურადღება უნდა მიექცეს დადგენის სიზუსტეს („ტოლერანტობის“ რადიუსი და შეცდომების პროცენტი) ინტერესის რეგიონებში. ტეგების დამატება

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

გაფრთხილება

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

შესავალი

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

Usecase 1. "მე გავარკვევ IP-ით"

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

Usecase 2. Geomarketing

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

Usecase 3. სახალისო ფუნქციონირება

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

Usecase 4. "სამეცნიერო" აუდიტორიის კვლევა

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

საინტერესოა? მაშინ წინ წადი.

კოორდინატების მიღება

GPS მონაცემების მიღება შესაძლებელია JavaScript-ისა და HTML5 Geolocation API-ის გამოყენებით. მაგრამ გახსოვდეთ: მომხმარებლის ზუსტი ადგილმდებარეობის გარკვევა მხოლოდ მისი თანხმობით შეგიძლიათ. მან ეს უნდა გამოხატოს პოპ-up ფანჯარაზე დიახ პასუხით, მისცეს თუ არა უფლებას მიმდინარე საიტს გაარკვიოს მისი მდებარეობა.

კოდის ნიმუში მშობლიურ JS-ში:

// ჩასვით მისამართი ცვლადში

ტექსტის ჩვენება var postText = document.getElementById ("positionText"); ფუნქცია getLocation () (თუ (navigator.geolocation) (// თუ მომხმარებელმა დაუშვა, განსაზღვრეთ მისი მდებარეობა და დაამუშავეთ მიღებული მნიშვნელობა ShowPosition ფუნქციის გამოყენებით navigator.geolocation.getCurrentPosition (showPosition);) სხვა (// თუ არა, ჩვენება შეცდომის შეტყობინება postText.innerHTML = "ამ ბრაუზერს არ შეუძლია განსაზღვროს მდებარეობა";)) ფუნქცია showPosition (პოზიცია) (// აჩვენეთ გრძედი და განედი გვერდზე postText.innerHTML = "გრძედი:" + position.coords.latitude + "
გრძედი: "+ პოზიცია.კოორდები.გრძედი;)

Yandex.Locator

თუ მომხმარებელს არ სურს GPS ინფორმაციის ნებაყოფლობით გაზიარება, მაშინ ყველაფერი არ არის დაკარგული. არის მაგარი ინსტრუმენტი Yandex.Locator. განსაზღვრის საშუალო სიზუსტე არის 300 მ. ის ითვლის სად იმყოფება ადამიანი შემდეგი ინფორმაციის მიხედვით:

  • მობილური ქსელის სიგნალები;
  • Wi-Fi წვდომის ქსელის სიგნალები;
  • მობილური მოწყობილობის IP მისამართი.

პროექტში დანერგვა ბევრად უფრო რთულია, ვიდრე HTML5 Geolocation API. Yandex.Locator API-ზე მოთხოვნის გაგზავნამდე საიტმა ან მობილურმა აპლიკაციამ უნდა მიიღოს წვდომის გასაღები და გაიგოს ბევრი დეტალი მომხმარებლის შესახებ. თუ ვიზიტორი ინტერნეტში იმყოფება მობილური კავშირის საშუალებით, მაშინ უნდა იცოდეთ მობილურის ID და სიგნალის სიძლიერე, თუ Wi-Fi-ით - სიგნალის სიძლიერე და დაშვების წერტილის MAC მისამართი.

იხილეთ დეველოპერის სახელმძღვანელო ზუსტი ინსტრუქციებისთვის.

Exif ფოტო მონაცემები

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

  • PHP-ს აქვს ჩაშენებული ფუნქცია read_exif_data ();
  • არსებობს exifr ბიბლიოთეკა Ruby-სთვის;
  • პითონს აქვს პაკეტი ExifRead 2.0;
  • C ++-სთვის - easyexif.

GeoIP ბაზა

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

ჩვენ ვადგენთ საქმეს

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

პირველ რიგში, ქუჩის სიზუსტით ვიგებთ მომხმარებლის მისამართს.

შეიტყვეთ მომხმარებლის მისამართი

ეს შეიძლება გაკეთდეს Yandex.Geocoder-ის მიერ (შეგიძლიათ მასთან მუშაობა წინასწარ OAuth ავტორიზაციის გარეშე).

შეკითხვის სინტაქსი:

Http://geocode-maps.yandex.ru/1.x/?geocode=36.3630,56.0000

Ეს მარტივია. მოთხოვნას გადაეცემა ორი პარამეტრი: გრძედი (56.0000) და განედი (36.3630).

სერვერი დააბრუნებს პასუხს XML ფორმატში (იხილეთ ეკრანის სურათი). ჩვენ დაინტერესებული ვართ შემდეგი სფეროებით:

  • AdressDetails-> Country-> AdressLine - ტექსტური ხაზი მომხმარებლის სრული მისამართით;
  • მისამართიდეტალები-> ქვეყანა-> ქვეყანაName - ქვეყანა;
  • AddressDetails-> Administrative Area-> AdministrativeAreaName - რეგიონი;
  • მისამართიდეტალები-> SubAdministrativeArea-> SubAdministrativeAreaName - ტერიტორია;
  • AdressDetails-> Locality-> LocalityName - ლოკაცია;
  • AdressDetails-> ThoroughFare-> ThoroughFareName - ქ.

Yandex.Geocoder არ ამხელს მისამართს სახლის ნომრით. მაგრამ თუ ცოტათი დაიძაბება ტვინი და დაიმახსოვრე სკოლის სასწავლო გეგმა, მაშინ შეგიძლია გამოთვალო. გრძედის ერთ გრადუსზე 111 კმ 111 მ გრძედით, ყველაფერი ცოტა უფრო რთულია. ყოველივე ამის შემდეგ, დედამიწის დიამეტრი განსხვავდება განედის მიხედვით. ამრიგად, გრძედი გამოითვლება შემდეგი ფორმულის გამოყენებით (6371 არის დედამიწის რადიუსი):

6371 * (მათემატიკა :: PI / 180) * cos (გრძედი * მათემატიკა :: PI / 180)

როგორ ეხმარება ეს ცოდნა მომხმარებლის ზუსტი მისამართის გამოთვლაში? ასე:

  1. ქუჩის პოვნა Yandex.Geocoder-ის გამოყენებით.
  2. ჩვენ ვუგზავნით მოთხოვნას ამ ქუჩაზე სახლის ზუსტი გეოგრაფიული კოორდინატების მისაღებად:
    http://geocode-maps.yandex.ru/1.x/?geocode=perm, იაბლოჩკოვას ქუჩა, 2
  3. ჩვენ ვკითხულობთ მნიშვნელობას სერვერის პასუხიდან.
  4. გრძედი და გრძედი ხარისხის სიგრძის ცოდნა, ჩვენ ვიანგარიშებთ მანძილს სასურველი წერტილიდან ამ სახლამდე.
  5. ჩვენ ვხსნით Yandex.Maps-ს და ვიყენებთ სახაზავს, რათა გავიგოთ, რომელ სახლს აქვს მომხმარებლის გეოგრაფიული კოორდინატები.

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

გუგლის ქუჩის ხედი

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

ფოტოები გარშემო

ახლა ვეძებთ X ადგილთან გადაღებულ ფოტოებს. როგორ კეთდება ეს, გავაანალიზოთ VKontakte API-ს მაგალითის გამოყენებით:

Https://api.vk.com/method/photos.search.xml?lat=38.600000&long=35&count=100&radius=500

  • ლათ - გრძედი;
  • გრძელი - გრძედი;
  • count - მოთხოვნით დაბრუნებული ფოტოების რაოდენობა;
  • რადიუსი - წრის რადიუსი მოცემული წერტილის გარშემო, სადაც უნდა გადაიღოთ ფოტოები.

აქ არის პასუხების ველები, რომლებიც გვაინტერესებს:

  • src, src_big - ფოტოების ლინკები;
  • შექმნა - ფოტოს შექმნის თარიღი unixtimestamp-ში;
  • owner_id - ფოტოს მფლობელის ID.

მფლობელის ID-ის ცოდნით, შეგიძლიათ გადახვიდეთ მის გვერდზე ან შეაგროვოთ ინფორმაცია იმავე VK API-ს გამოყენებით:

Https://api.vk.com/method/getProfiles.xml?uids=111111&fields=last_name,first_name, სქესი, ასაკი

  • uids - მძიმით გამოყოფილი მფლობელის ID;
  • ველები - ველები, რომლებიც გვინდა მივიღოთ პასუხში.

ველების სრული სია

Yandex-მა გამოაცხადა თავისი გეოლოკაციის სერვისის Yandex.Locator პროგრამული ინტერფეისის (API) გაშვება. API ხელმისაწვდომი გახდა მესამე მხარის დეველოპერებისთვის ტესტირების რეჟიმში 2011 წლის 25 თებერვალს. პროექტი შესაძლოა გამოვიდეს სატესტო ეტაპიდან „რამდენიმე თვეში“.

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

Yandex-ის გეოგრაფიული API-ის მუშაობა, ისევე როგორც მსგავსი გადაწყვეტილებები, ემყარება მონაცემთა გამოყენებას მიმდებარე ფიჭური საბაზო სადგურებისა და Wi-Fi წვდომის წერტილების ადგილმდებარეობის შესახებ.

ინსტრუმენტი, Yandex-ის მობილური სერვისების განვითარების განყოფილების ხელმძღვანელის, ოლეგ გერასიმოვის თქმით, ახლა გამოიყენება საძიებო სისტემის რამდენიმე პროდუქტში (მობილურ Yandex.Maps-ში, მობილური Yandex და Yandex.Bar Firefox-ისთვის და Internet Explorer-ისთვის). Yandex-ის გეოგრაფიულ API-ზე დაფუძნებული მესამე მხარის პროექტები ჯერ არ არსებობს, თუმცა, როდესაც ისინი გამოჩნდებიან, Yandex-ს შეეძლება დაამატოთ თავისი ცოდნა Yandex.Maps-ის მომხმარებლების ადგილმდებარეობის შესახებ მესამე მხარის აპლიკაციების მომხმარებლების აუდიტორიას.

მომხმარებლის ხელშეკრულებაში Yandex აფრთხილებს API მომხმარებლებს - აპლიკაციის შემქმნელებს, რომ „მობილურ აპლიკაციებში სერვისის გამოყენების პირობა არის GPS ტრეკების გადაცემა (მონაცემები მომხმარებლის მოძრაობებზე)“ Yandex-ზე. თუ აპლიკაცია დღეში 1000-ზე მეტ მოთხოვნას აკეთებს, ეს პირობა ხდება მისი დეველოპერის პასუხისმგებლობა.

Developer's Guide for Locator-ისთვის, Yandex უწოდებს პოზიციონირებას Wi-Fi Hotspot-ის სიგნალებზე დაყრდნობით ყველაზე ზუსტი მეთოდით. ამ შემთხვევაში, მობილური მოწყობილობის პოზიციის დადგენა შესაძლებელია 150 მეტრის სიზუსტით.

იმავე დოკუმენტში აღნიშნულია, რომ ფიჭური კომუნიკაციის საბაზო სადგურების გამოყენებით პოზიციონირება დამოკიდებულია მათ სიმკვრივეზე: ქალაქების ცენტრში, სადაც ისინი განლაგებულია მაქსიმალური სიმკვრივით, ეს შეიძლება იყოს 200-500 მეტრი, გარეუბანში - 1,5-2 ათასი მეტრი.

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

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

პოზიციონირების ინსტრუმენტებს, Yandex-ის მსგავსად, ჰყავთ მისი პირდაპირი კონკურენტები Google და Mail.ru. Google Latitude სერვისს (რუსეთში ლოკალიზებული, როგორც "Google Locator") აქვს ღია API და ფართოდ გამოიყენება სხვადასხვა ვებ სერვისებსა და აპლიკაციებში.

მსგავსი პუბლიკაციები