تعیین مکان بدون GPS: Yandex.Locator چگونه کار می کند. چرا بدون جی پی اس و دیگر چگونه

اکنون برنامه های کاربردی تلفن همراه بیشتر و بیشتر به جغرافیا وابسته می شوند. برخی بدون دانستن مکان کاربر به سادگی معنی ندارند، برخی دیگر با او راحت تر می شوند. اینها به اصطلاح خدمات مبتنی بر مکان (LBS) هستند: ناوبرها، forsquares، اینستاگرام با عکس های دارای برچسب جغرافیایی و حتی برنامه های یادآوری که در نزدیکی یک مکان خاص، به عنوان مثال، در نزدیکی یک دفتر یا یک فروشگاه فعال می شوند.

برای خدمات و برنامه های Yandex، ما پیاده سازی خودمان را از روش تعیین مکان بدون GPS - Yandex.Locator ایجاد کرده ایم. این باعث صرفه جویی در زمان کاربر می شود و برنامه های ما را کمی هوشمندتر می کند. در Navigator و Maps، حتی اگر در پارکینگ سرپوشیده باشید، نیازی به ورود به نقطه شروع مسیر نیست. و هنگام انتخاب یک فیلم در پوستر فیلم یا یک محصول در بازار تلفن همراه، به شما کمک می کند تا فوراً نشان دهید که آنها را در منطقه شهر خود در کجا پیدا کنید. و، البته، هنگام جستجوی کافه ها و دستگاه های خودپرداز - به شما این امکان را می دهد که نزدیک ترین ها را به شما نشان دهید، حتی زمانی که در مترو هستید.

ما این فناوری را مدت ها پیش به عنوان یک API رایگان باز کردیم. امروز می خواهیم به شما بگوییم که چگونه کار می کند.

چرا بدون جی پی اس و دیگر چگونه

سیستم های ناوبری ماهواره ای (GNSS)، در مورد ما GPS و GLONASS، دقیق ترین روش تعیین جغرافیایی امروزی هستند. ماژول های مربوطه تقریباً در همه گوشی های هوشمند مدرن یافت می شوند. اما نه همیشه و نه همه جا او می تواند مشکلات LBS را حل کند.

اولاً، جستجوی ماهواره ها گاهی اوقات چندین دقیقه طول می کشد و موقعیت هایی وجود دارد که در آن سرعت تعیین حتی با از دست دادن دقت مهم است. به عنوان مثال، زمانی که نیاز به ایجاد یک مسیر مقدماتی در ناوبری یا چک کردن دارید. دوم، ماهواره‌ها معمولاً در داخل یا زیر زمین «قابل مشاهده» نیستند. ثالثاً ماژول های GPS در هر تلفن همراه یا تبلتی یافت نمی شوند و تقریباً در لپ تاپ ها وجود ندارند. بنابراین LBS به جایگزین هایی نیاز دارد.

و، البته، جایگزین هایی وجود دارد - می توانید مکان را با نزدیک ترین برج های GSM، شبکه های Wi-Fi و حتی با آدرس IP تعیین کنید. دقت هر یک از این روش ها بسیار بدتر از GPS است. اما اگر آنها را با هم ترکیب کنید کیفیت قابل قبولی در کنار هم می دهند. در عین حال، برخی از معایب یکی با قابلیت های دیگری خنثی می شود. دکل های GSM تقریبا در همه جا وجود دارند، اما شبکه های Wi-Fi اینطور نیستند. در عین حال، دقت تشخیص از طریق Wi-Fi بهتر است. بنابراین روش ترکیبی از نظر کامل بودن و دقت نسبت به هر کدام به صورت جداگانه بهتر است. این واقعیت کمتر شناخته شده است که دو روتر در نقاط مختلف شهر ممکن است آدرس MAC یکسانی داشته باشند. ترکیب GSM و Wi-Fi چنین برخوردهایی را حل می کند. این مسیریاب‌ها، به احتمال زیاد، برج‌هایی با شناسه‌های مختلف در نزدیکی خود خواهند داشت - به هر حال، احتمال تطابق در یک بلوک بسیار کمتر از سطح شهر است.

چندین پیاده سازی از چنین روش ترکیبی تعیین جغرافیایی در جهان وجود دارد. و به نظر می رسد اولین سوالی که همه توسعه دهندگان با آن مواجه بودند این بود - از کجا می توان اطلاعاتی در مورد موقعیت شبکه های وای فای و دکل های تلفن همراه بدست آورد؟

پایگاه مکان های شبکه

در معضل خرید یا ساخت، ما در نهایت دومی را انتخاب کردیم. دلیل اصلی این است که با داده ها و الگوریتم های خود کنترل کیفیت نتیجه بسیار آسان تر است. کاربران موبایل Yandex.Maps در جمع آوری اطلاعات به ما کمک کردند.

زمانی که ما توسعه Locator را شروع کردیم، از قبل صدها هزار نفر در خیابان های شهرها حضور داشتند که Yandex.Maps در تلفن هایشان روشن بود. با رضایت کاربر، برنامه به طور مداوم مختصات GPS او را ارسال می کند - Yandex.Traffic بر اساس این اطلاعات ساخته شده است. ما فکر کردیم که در کنار این، برنامه بتواند مشخص کند که کدام ایستگاه پایه تلفن در این مختصات سرویس می شود، کدام شبکه های Wi-Fi قابل مشاهده است (البته بدون اتصال به خود شبکه ها - تا خطرات حفظ حریم خصوصی ایجاد نشود) .

شخص برای شرکت در چنین جمع سپاری نیازی به انجام کاری ندارد - فقط از برنامه استفاده کنید. مانند مختصات، داده‌های شبکه‌های Wi-Fi اطراف و ایستگاه‌های GSM غیرشخصی می‌شوند. آنها عملاً چیزی "وزن" نمی کنند و بر این اساس باتری از انتقال آنها سریعتر تخلیه نمی شود.

بنابراین، کاربران شروع به کمک به یکدیگر کردند:


برخی با یک گیرنده جی پی اس در گوشی خود از محل دقیق شبکه ها مطلع شده و اطلاعات را به Yandex منتقل می کنند. برخی دیگر که ماژول های GPS ندارند، لیستی از شبکه هایی را که در حال حاضر می بینند ارسال می کنند و در پاسخ موقعیت تقریبی خود را روی نقشه دریافت می کنند.

پایگاه داده جمع آوری شده و به طور مرتب به روز می شود. و در اینجا با مشکل بعدی روبرو هستیم.

شبکه های "متحرک".

تجربه نشان می‌دهد که شناسه‌های برج‌های سلولی دائماً در حال تغییر هستند - شماره‌ای که دیروز در مرکز شهر بود ممکن است فردا در حومه شهر باشد. روترهای Wi-Fi نیز می توانند - همراه با صاحبان خود - حرکت کنند. و معلوم می شود که با هر حرکت، باید بخش قابل توجهی از داده ها را باطل کنید.

به این ترتیب توانستیم مشکلات جابجایی همزمان برج ها و روترها را حل کنیم. کاربر درخواستی برای تعیین مکان به همراه داده هایی درباره شبکه هایی که می بیند دریافت می کند. اگر لیست شبکه‌ها شامل یکی از شبکه‌هایی باشد که در نقاط مختلف شهر دیده شده است، الگوریتم تعداد سیگنال‌های دریافتی از آن در هر منطقه و سن منطقه دوم را در نظر می‌گیرد. ما هر تجمع متراکم سیگنال از یک شبکه Wi-Fi یا برج سلولی را "ابر" می نامیم. هر چه سیگنال‌های ابری بیشتر و تازه‌تر باشند، قابل اعتمادتر هستند. پاسخ به ترتیب بزرگترین و تازه ترین خواهد بود. و ابری که بیش از یک ماه در آن سیگنال وجود ندارد منسوخ در نظر گرفته می شود - حتی اگر ابری جدیدتر برای این شبکه در منطقه دیگری ظاهر نشده باشد.

شعاع ابر

از آنجایی که موقعیت تقریباً تعیین می شود ، نمی توانید نقطه ای را نشان دهید - باید یک دایره بکشید (در نهایت سیگنال رادیویی در صورت عدم وجود تداخل در همه جهات به طور مساوی توزیع می شود). اگر چه، اگر به تصویر واقعی سیگنال ها نگاه کنید، اغلب بیضی است. از این گذشته، رانندگان بیشتر از همه از کارت های موبایل استفاده می کنند. ردیابی GPS آنها در جاده ها باقی می ماند و عملا هیچ سیگنالی از حیاط ها و علاوه بر آن از ساختمان ها دریافت نمی شود.

برای اینکه پاسخ تا حد امکان دقیق باشد، شعاع دایره باید تا حد امکان کوچک باشد. اگر فقط یک دایره در اطراف تمام نقاط سیگنال یک شبکه خاص بکشید، شعاع خیلی بزرگ خواهد بود. میت به کاهش آن کمک کرد. آمار. چگالی سیگنال تابع توزیع نرمال است، یعنی قانون سه سیگما اعمال می شود. 99.7 درصد نقاط در مجاورت این شعاع قرار دارند.

ما تصمیم گرفتیم جلوتر برویم و به طور تجربی فاکتور سیگما را انتخاب کردیم که شعاع را تا حد ممکن به حداقل می رساند، اما دقت قابل قبولی را حفظ می کرد. این موفقیت آمیز بود زیرا در بیشتر موارد کاربر چندین شبکه را می بیند. به این معنی که مناطق "باز" ​​با کاهش ضریب به احتمال زیاد توسط ابرهای دیگر همپوشانی دارند.

سیگنال های غیر ابری

متأسفانه، همه سیگنال‌های GPS کاربران را نمی‌توان به راحتی در ابرها کامپایل کرد. معلوم شد که اگر تمام سیگنال های یک شبکه را روی نقشه قرار دهید، علاوه بر "بیضی"، حاوی نقاط و خطوط خواهد بود. بر این اساس، اینها سیگنال های منفرد هستند که از تجمع سیگنال های همان شبکه بسیار دور هستند و مسیرهای GPS بسیار طولانی (یعنی زنجیره سیگنال های GPS).

به عنوان مثال، هنگامی که شخصی در مترو حرکت می کند، "Loners" ظاهر می شود. تلفن در یک ایستگاه ارتباط خود را با سلولی قطع می کند و هنگامی که از یک ایستگاه دیگر خارج می شود، همچنان فکر می کند که توسط آن سلول در حال سرویس دهی است. Locator چنین سیگنال هایی را فیلتر می کند. علاوه بر این، حداقل آستانه را برای ابرها تعیین کرده‌ایم تا روی خوشه‌های سیگنال خیلی کم تکیه نکنیم.

ردهای طولانی GPS ظاهر می شوند، به عنوان مثال، زمانی که شخصی با ماشین در سراسر شهر رانندگی می کند. تلفن شناسه برج را از ابتدای مسیر "کشش" می کند و گزارش می دهد که ظاهراً آن را تا آخر مسیر می بیند. مشخص است که ایستگاه های پایه برد محدودی دارند، بنابراین مکان یاب نیز چنین مسیرهای GPS را فیلتر می کند. مسیرهایی که طول آنها در محدوده برج قرار می گیرد، باقی می مانند. آنها معمولا در مناطقی که داده های کمی وجود دارد دیده می شوند. در آنجا تبدیل به زنجیره ای از ابرهای کوچک می شوند.

ما سیگنال های تنها، ابرهای کوچک و مسیرهای طولانی را "نویز" در نظر می گیریم. هنگامی که کاربر یک شبکه واحد را می بیند که ما فقط چنین سیگنال هایی را برای آن می شناسیم، پاسخی دریافت می کند که مکان را نمی توان تعیین کرد. ما این را درست‌تر از ارائه یک نتیجه آگاهانه نادرست، طبق برآوردهایمان می‌دانیم.

هنگامی که داده ها کمیاب بود، مشکل دیگری برای ترکیب همه سیگنال ها در یک ابر وجود داشت. این اتفاق افتاد که سیگنال های برج از یک شهر نیز از شهر دیگری می آمد. حضور در شناسه های شبکه های GSM کد منطقه مکان - LAC (Location Area Code) به ما کمک کرد. از آنجایی که برج هایی با همان کد باید طبق استاندارد در نزدیکی قرار داشته باشند، مکان یاب شروع به وزن کم تخمینی به ابرهایی کرد که "در شهر اشتباه" بودند (یعنی در میان ابرهایی با LAC متفاوت).

بهبود دقت تعریف ...

... از طریق شبکه های GSM
روزی روزگاری، برنامه‌ها فقط به اطلاعات یک ایستگاه پایه دسترسی داشتند، اگرچه تلفن اغلب چندین ایستگاه را می‌بیند. پس از ظاهر شدن پلتفرم اندروید، برنامه‌ها می‌توانند یاد بگیرند که همه آن‌ها را ببینند (به جز اتصال در استاندارد 3G، که اجازه می‌دهد تنها یک برج سلولی شناسایی شود). مکان شروع به تعیین دقیق‌تر کرد - نه دیگر توسط یک ابر، بلکه توسط مجموع چندین. معلوم شد که برای بسیاری از ابرها، می توانید از همان رویکردی که برای یک ابر استفاده می شود استفاده کنید. شعاع از انحراف ریشه میانگین مربع سیگنال های موجود در مجموعه ابرها و مرکز از میانگین مختصات آنها محاسبه می شود.
... از طریق شبکه های وای فای
هنگامی که یک تلفن هوشمند در محدوده چندین شبکه Wi-Fi قرار دارد، می تواند نه تنها لیست آنها، بلکه قدرت سیگنال هر کدام را نیز گزارش کند. ما از دانش این قدرت برای اصلاح مرکز دایره ای که کاربر در آن قرار دارد استفاده کردیم. ما شروع کردیم به تعلیق چشمه های خیالی به مراکز ابرهای مشاهده شده - هر چه سیگنال قوی تر باشد، محکم تر. و انتهای آزاد آنها برای اتصال است. نقطه ای که این چشمه ها در آن متعادل می شوند مرکز تصفیه شده است.

کیفیت حاصله

ابتدا چند کلمه در مورد اینکه چگونه کیفیت راه حل خود را ارزیابی می کنیم. همانطور که قبلا ذکر شد، از کاربرانی که یک ماژول GPS در دستگاه های خود دارند، Latitude هم مختصات و هم لیستی از شبکه هایی را که دستگاه ها می بینند دریافت می کند. برای ارزیابی کیفیت، او ابتدا مکان تقریبی را تعیین می کند و فقط بر روی این شبکه ها تمرکز می کند. و سپس بررسی می کند که آیا مختصات واقعی کاربر در دایره پیشنهادی Locator قرار می گیرد یا خیر.

با استفاده از این تکنیک، اعداد زیر را به دست آوردیم:

  • برای 83٪ از درخواست ها در روز، مکان به درستی تعیین شد - مختصات GPS دستگاه به منطقه ای که توسط مکان یاب نامگذاری شده بود سقوط کرد.
  • 14٪ سیگنال ها - با خطا:
    • 7% - خطای کمتر از 100 متر
    • 5.6٪ - از 100 متر تا چند کیلومتر
    • 1.4٪ - مکان یاب بر اساس شهر اشتباه است
  • 3٪ باقی مانده از درخواست ها پاسخ "محل پیدا نشد" را دریافت می کنند


میتونی کیفیت بهتری بگیری؟ آره. مزیت روش این است که با بلوغ معینی از الگوریتم‌ها، فقط جمع‌آوری داده‌های بیشتر برای تعیین دقیق‌تر مکان کافی است. و این به اندازه کافی آسان است، زیرا تعداد شبکه های Wi-Fi در حال افزایش است و تعداد کاربران برنامه های ما در حال افزایش است.

اما محدودیت های تکنولوژیکی وجود دارد:

  • اگر تلفن فقط در مورد یک برج GSM گزارش دهد - حداقل شعاع چند صد متر در شهر و چندین کیلومتر خارج از شهر خواهد بود.
  • اگر تلفن چندین برج را ببیند، مرکز را می توان با دقت بیشتری تعیین کرد، اما به سختی می توان شعاع را کاهش داد.
  • اگر یک شبکه Wi-Fi قابل مشاهده است - حداقل شعاع 10 متر خواهد بود

مقدار محاسبه

برای پاسخ سریع به کاربر، باید کل پاسخ یا حداقل بخش قابل توجهی را از قبل آماده کنید. هر شب، یک خوشه بر اساس سیستم محاسباتی توزیع شده YAMR، سیگنال‌های دریافتی تا دیروز را جمع‌آوری می‌کند و «ابرها» را آماده پاسخ‌گویی دریافت می‌کند. در لحظه درخواست، Locator فقط باید آنها را به درستی ترکیب کند. بنابراین ترابایت "سیگنال خام" به 1.5-2 گیگابایت پاسخ آماده فشرده شد که به راحتی می تواند در حافظه جا شود. و آماده سازی پاسخ تقریباً همیشه به 1 میلی ثانیه می رسد و هر سرور در خوشه می تواند 10 هزار RPS را تحمل کند.

و برای اینکه مدت زمان محاسبه روزانه به صورت خطی با رشد تاریخچه سیگنال های GPS رشد نکند، به "افزودنی" ابرها دست یافته ایم. اکنون کافی است برای هر ابر تنها چند شاخص ذخیره کنید و نیازی به پردازش مجدد کل تاریخچه قدیمی هر روز نیست.

به نظر می رسد تهیه پاسخ کاملتر بی اثر است. اگر هر ترکیبی از شبکه ها را در یک ابر مجزا دسته بندی کنید، یک انفجار ترکیبی دریافت خواهید کرد. حجم پاسخ‌های آماده چندین مرتبه افزایش می‌یابد و در صورت همپوشانی شبکه‌ها، محاسبات بیشتری برای تهیه پاسخ مورد نیاز است.

آنالوگ ها

همانطور که قبلاً گفتیم خدمات مکان یابی بدون GPS فقط از Yandex در دسترس نیست. توسعه دهندگان می توانند با یک ارائه دهنده تجاری (مانند Altergeo در روسیه و Skyhook Wireless در جهان) تماس بگیرند یا از API یک پلت فرم تلفن همراه یا مرورگر استفاده کنند.

به طور کلی، چنین پایگاه داده ای را می توان به سه روش جمع آوری کرد:

  • شهرهای مورد علاقه را با ماشین بگردید، شبکه ها را اسکن کنید و سپس به طور دوره ای دوباره به اطراف بروید تا پایگاه داده را به روز کنید
  • ایجاد یک برنامه تلفن همراه انبوه (به عنوان مثال Yandex.Maps)
  • ایجاد یک پلت فرم تلفن همراه (مانند iOS یا Android)
اما فقط توسعه دهنده برنامه وابسته به جغرافیایی باید بین راه حل های مختلف یکی را انتخاب کند و کاربر با این انتخاب "زندگی" می کند. در غیاب روش مقایسه یکپارچه، باید به دقت تعیین (شعاع "تحمل" و درصد خطا) در مناطق مورد نظر توجه داشت. افزودن برچسب

مختصات جغرافیایی با ارزش ترین اطلاعاتی است که یک توسعه دهنده وب می تواند از بازدیدکنندگان سایت دریافت کند. با هوشیاری سریع و دانستن چند ترفند، می‌توانید با توجه به موقعیت مکانی یک شخص چیزهای زیادی در مورد آن پیدا کنید: آدرس، چه موسساتی در نزدیکی او هستند، عکس‌های گرفته شده در منطقه او، آنچه همسایگان از آن شکایت می‌کنند و عمق نزدیک‌ترین رودخانه.

هشدار

تمام اطلاعات فقط برای مقاصد اطلاعاتی ارائه شده است. نه هیئت تحریریه و نه نویسنده مسئولیتی در قبال آسیب احتمالی ناشی از مطالب این مقاله ندارند.

مقدمه

اگر هنوز داده‌های مکان را از کاربران خود جمع‌آوری نمی‌کنید، پس فقط این مقاله را نخوانده‌اید و نمی‌دانید چگونه از اطلاعات به نفع خود استفاده کنید. بیایید نگاهی به چند مورد استفاده بیندازیم تا نشان دهیم داده‌های جغرافیایی چگونه می‌توانند مفید باشند، و سپس به سراغ تمرین برویم.

مورد استفاده 1. "با IP شما را متوجه خواهم شد"

فرض کنید یک ترول در وبلاگ خود دارید که مرتب نظرات بی ادبانه ای می گذارد. اگر اطلاعاتی در مورد بازدیدکنندگان Yandex.Locator جمع آوری کنید، به راحتی می توانید متوجه شوید که این شخص در انتهای شرقی خیابان لنین است که در آن یک مرد ناخوشایند از دانشگاه شما زندگی می کند. و اگر خوش شانس باشید، با درخواست از Vkontakte API، آخرین عکس او را پیدا خواهید کرد.

مورد استفاده 2. ژئومارکتینگ

Yandex.Direct برای مدت طولانی از هدف گذاری جغرافیایی هدفمند برای تبلیغات خود استفاده می کند. آگاهی اعلامیه "شبکه ای از پیتزا فروشی در مسکو" را نادیده می گیرد. و تقریباً غیرممکن است که از طریق پیوند "خیابان پیتزا روچدلسکایا، خانه 14" (آن طرف خیابان از شما) عبور کنید.
می توانید از داده های جغرافیایی برای تبلیغ محصولات و خدمات استفاده کنید. اگر فردی در حال حاضر اثر فشار اتمسفر پایین را احساس می کند، این احتمال وجود دارد که بخواهد قرص هایی برای افزایش نشاط بخرد.

مورد استفاده 3. قابلیت سرگرم کننده

فضای زیادی برای خلاقیت وجود دارد. موضوع شبانه طرح بعد از غروب خورشید را برای کاربر در سایت قرار دادیم. جدیدترین سلفی های دخترانی را که در فاصله 10 کیلومتری گرفته شده اند به او نشان می دهیم. با توجه به آب و هوا و عمق آب، ما تعیین می کنیم که چه نوع ماهی در منطقه یافت می شود. انتخاب های زیادی وجود دارد.

مورد 4. پژوهش "علمی" مخاطب

نتایج یک نظرسنجی آنلاین ناشناس می تواند به طور قابل توجهی مفیدتر باشد اگر علاوه بر پاسخ ها، موقعیت جغرافیایی پاسخ دهندگان نیز ذکر شود.

جالب هست؟ بعد برو جلو

گرفتن مختصات

داده های GPS را می توان با استفاده از JavaScript و HTML5 Geolocation API به دست آورد. اما به خاطر داشته باشید: شما فقط با رضایت کاربر می توانید از مکان دقیق او مطلع شوید. او باید آن را با پاسخ مثبت به پنجره پاپ آپ بیان کند که آیا به سایت فعلی اجازه می دهد مکان خود را پیدا کند.

کد نمونه در JS بومی:

// آدرس را در متغیر قرار دهید

برای نمایش متن var postText = document.getElementById ("positionText"); تابع getLocation () (اگر (navigator.geolocation) (// اگر کاربر اجازه داده است، مکان آن را تعیین کنید و مقدار حاصل را با استفاده از تابع ShowPosition (showPosition) پردازش کنید (// اگر نه، نمایش دهید) یک پیام خطا postText.innerHTML = "این مرورگر نمی تواند مکان را تعیین کند"؛)) تابع showPosition (موقعیت) (// نمایش طول و عرض جغرافیایی در صفحه postText.innerHTML = "Latitude:" + position.coords.latitude + "
طول جغرافیایی: "+ position.coords. طول جغرافیایی؛)

Yandex.Locator

اگر کاربر نمی خواهد داوطلبانه اطلاعات GPS را به اشتراک بگذارد، همه چیز از بین نمی رود. یک ابزار جالب Yandex.Locator وجود دارد. میانگین دقت تعیین 300 متر است. با توجه به اطلاعات زیر مکان حضور فرد را محاسبه می کند:

  • سیگنال های شبکه تلفن همراه؛
  • سیگنال های شبکه دسترسی Wi-Fi؛
  • آدرس IP دستگاه تلفن همراه.

پیاده سازی آن در پروژه بسیار دشوارتر از HTML5 Geolocation API است. قبل از ارسال درخواست به Yandex.Locator API، سایت یا برنامه تلفن همراه باید یک کلید دسترسی دریافت کند و جزئیات زیادی در مورد کاربر پیدا کند. اگر یک بازدیدکننده از طریق اتصال تلفن همراه در اینترنت است، پس باید شناسه سلول و قدرت سیگنال را بدانید، اگر از طریق Wi-Fi - قدرت سیگنال و آدرس MAC نقطه دسترسی را بدانید.

برای دستورالعمل های دقیق به راهنمای توسعه دهنده مراجعه کنید.

داده های عکس Exif

همچنین می توانید مختصات GPS را در فراداده تصاویر گرفته شده با دوربین دیجیتال بیابید. اطلاعات مربوط به عکس ها را می توان بدون رضایت کاربر خواند. فقط باید مجبورش کنید آنها را دانلود کند. سپس کتابخانه exif-js یا ابزارهای سمت سرور برای خواندن exif-data به کمک می آید:

  • PHP دارای یک تابع داخلی read_exif_data ();
  • کتابخانه exifr برای روبی وجود دارد.
  • پایتون دارای بسته 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 - یک خط متن با آدرس کامل کاربر.
  • AddressDetails-> Country-> СountryName - country;
  • AddressDetails-> AdministrativeArea-> AdministrativeAreaName - region;
  • AddressDetails-> SubAdministrativeArea-> SubAdministrativeAreaName - area;
  • AddressDetails-> Locality-> LocalityName - locality;
  • AddressDetails-> 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، خیابان Yablochkova، 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

  • لات - عرض جغرافیایی؛
  • طول - طول جغرافیایی؛
  • شمارش - تعداد عکس‌های برگردانده شده توسط درخواست؛
  • شعاع - شعاع دایره در اطراف نقطه داده شده که در آن عکس ها باید گرفته شوند.

در اینجا فیلدهای پاسخ مورد علاقه ما هستند:

  • src, src_big - پیوند به عکس ها.
  • ایجاد - تاریخی که عکس در unixtimestamp ایجاد شد.
  • owner_id - شناسه صاحب عکس.

با دانستن شناسه مالک، می توانید به صفحه او بروید یا با استفاده از همان VK API اطلاعات جمع آوری کنید:

Https://api.vk.com/method/getProfiles.xml?uids=111111&fields=last_name,first_name, جنسیت, سن

  • uids - شناسه های مالک که با کاما از هم جدا شده اند.
  • فیلدها - فیلدهایی که می خواهیم در پاسخ دریافت کنیم.

لیست کامل فیلدها

Yandex راه اندازی رابط برنامه (API) سرویس موقعیت جغرافیایی Yandex.Locator خود را اعلام کرد. API در 25 فوریه 2011 در حالت آزمایشی در دسترس توسعه دهندگان شخص ثالث قرار گرفت. پروژه ممکن است "در چند ماه" از مرحله آزمایش خارج شود.

به گفته Yandex، API امکان تعیین مکان تلفن‌های همراه یا لپ‌تاپ‌هایی را که گیرنده GPS خود را ندارند، فراهم می‌کند، که فرصت‌هایی را برای توسعه‌دهندگان برای ایجاد خدمات و برنامه‌های کاربردی بر اساس ایده موقعیت جغرافیایی باز می‌کند. Yandex به عنوان نمونه‌ای از این برنامه‌ها، اضافه کردن برچسب جغرافیایی به عکس‌ها یا پیام‌های منتشر شده در شبکه‌های اجتماعی یا توییتر را ذکر می‌کند.

کار API جغرافیایی Yandex، مانند راه‌حل‌های مشابه، مبتنی بر استفاده از داده‌ها در محل ایستگاه‌های پایه سلولی نزدیک و نقاط دسترسی Wi-Fi است.

به گفته اولگ گراسیموف، رئیس بخش توسعه خدمات تلفن همراه Yandex، این ابزار اکنون در چندین محصول موتور جستجوی خودش (در Yandex.Maps موبایل، Yandex موبایل و Yandex.Bar برای فایرفاکس و اینترنت اکسپلورر) استفاده می‌شود. پروژه‌های شخص ثالث مبتنی بر API جغرافیایی Yandex هنوز وجود ندارند، با این حال، زمانی که ظاهر شوند، Yandex می‌تواند به دانش خود در مورد مکان کاربران Yandex.Maps مخاطبان کاربران برنامه‌های شخص ثالث را اضافه کند.

در قرارداد کاربر، Yandex به کاربران API - توسعه دهندگان برنامه هشدار می دهد که "شرط استفاده از سرویس در برنامه های تلفن همراه، انتقال مسیرهای GPS (داده های مربوط به حرکات کاربر)" به Yandex است. اگر برنامه ای بیش از 1000 درخواست در روز داشته باشد، این شرایط به عهده توسعه دهنده آن می شود.

در راهنمای توسعه‌دهنده برای مکان یاب، Yandex تعیین موقعیت براساس سیگنال‌های نقطه اتصال Wi-Fi را دقیق‌ترین روش می‌داند. در این حالت می توان موقعیت دستگاه موبایل را با دقت 150 متر تعیین کرد.

همان سند خاطرنشان می کند که موقعیت یابی با استفاده از ایستگاه های پایه ارتباطات سلولی به تراکم آنها بستگی دارد: در مرکز شهرها، جایی که آنها با حداکثر تراکم قرار دارند، می تواند 200-500 متر باشد، در حومه - 1.5-2 هزار متر.

جالب اینجاست که در سال 2010، رقیب یاندکس، گوگل، در شبکه های وای فای دیگران بیش از حد شل بود، زمانی که اتومبیل های Google Street View در حال جمع آوری ترافیک از شبکه های بی سیم باز در چندین کشور در آسیا، آمریکا و اروپا دستگیر شدند.

اولگ گراسیموف به CNews توضیح داد که بر خلاف Yandex که تنها از شناسه نقطه دسترسی در ابزارهای جغرافیایی خود استفاده می کند، گوگل تمام اطلاعات ارسال شده از طریق شبکه های باز را اسکن کرد، که Yandex قرار نیست این کار را انجام دهد. Yandex می‌گوید اگرچه اکثر شبکه‌های خصوصی از پروتکل‌های رمزگذاری استفاده می‌کنند، با این وجود، شناسه‌های آنها در حالت باز منتقل می‌شوند که برای اهداف موقعیت‌یابی کاملاً کافی است.

ابزارهای تعیین موقعیت، مشابه Yandex، رقبای مستقیم Google و Mail.ru را دارند. سرویس Google Latitude (که در روسیه به عنوان "Google Locator" محلی شده است) یک API باز دارد و به طور گسترده در خدمات و برنامه های مختلف وب استفاده می شود.

نشریات مشابه