گوگل، متأسفانه برای بسیاری از کاربران ماژول های GSM، 2-3 ماه پیش API را برای تعیین مکان بر اساس مختصات برج های سلولی قابل مشاهده برای ماژول مسدود کرده و به صورت پولی منتقل کرد. به همین دلیل، ماژول های سری SIM800 تولید می شوند
بیایید از نحوه دریافت مختصات برج های سلولی یاندکس بگذریم، نکته اصلی این است که می توانیم از این سرویس رایگان استفاده کنیم و داده های زیر را دریافت کنیم: عرض جغرافیایی، طول جغرافیایی، ارتفاع و همچنین خطای تقریبی برای هر پارامتر. هدف اصلی مقاله ارائه یک آموزش کوتاه در مورد جابجایی سریع به Yandex API به جای سرویسی که دیگر در دسترس نیست از Google است.
در زیر، به عنوان مثال، فقط طول و عرض جغرافیایی مکان ماژول را نشان خواهیم داد.
پس بیایید شروع کنیم
ابتدا باید قرارداد کاربر واقع در آدرس زیر را مطالعه کنید:
به آدرس بروید
کلید دریافتی خود را یادداشت کنید یا در غیر این صورت ذخیره کنید.
پس از انجام این مراحل به صفحه دسترسی خواهید داشت
برای ایجاد یک درخواست XML در قالب cURL به سرویس Yandex.Locator، باید اطلاعاتی در مورد برج های سلولی "قابل مشاهده" توسط ماژول به دست آورید:
- کد کشور - کد کشور
- operatorid – کد شبکه تلفن همراه
- cellid – شناسه سلول
- lac – کد مکان
این اطلاعات را می توان با ارسال دستور 'AT+CNETSCAN' از ماژول به دست آورد.
اطلاعات دریافتی از ماژول
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:59,Cellid:2105,Arfcn:96,Lac:1E9E,Bsic:31<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:54,Cellid:2107,Arfcn:18,Lac:1E9E,Bsic:3A<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:45,Cellid:10A9,Arfcn:97,Lac:1E9E,Bsic:11<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:41,Cellid:2108,Arfcn:814,Lac:1E9E,Bsic:1F<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:43,Cellid:5100,Arfcn:13,Lac:1E9E,Bsic:2B<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:39,Cellid:5102,Arfcn:839,Lac:1E9E,Bsic:1A<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:38,Cellid:2106,Arfcn:104,Lac:1E9E,Bsic:0A<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:37,Cellid:0FE7,Arfcn:12,Lac:1E9E,Bsic:24<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:44,Cellid:14C8,Arfcn:91,Lac:1E9E,Bsic:24<CR><LF>
Operator:"MegaFon",MCC:250,MNC:02,Rxlev:37,Cellid:04B3,Arfcn:105,Lac:1E9E,Bsic:3A<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:47,Cellid:29A0,Arfcn:70,Lac:39BA,Bsic:09<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:43,Cellid:0FDD,Arfcn:590,Lac:39BA,Bsic:09<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:44,Cellid:29A1,Arfcn:84,Lac:39BA,Bsic:10<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:40,Cellid:8F95,Arfcn:81,Lac:39BA,Bsic:03<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:43,Cellid:0FDF,Arfcn:855,Lac:39BA,Bsic:24<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:37,Cellid:299C,Arfcn:851,Lac:39BA,Bsic:17<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:37,Cellid:0FDE,Arfcn:852,Lac:39BA,Bsic:1B<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:35,Cellid:299F,Arfcn:72,Lac:39BA,Bsic:10<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:33,Cellid:28A5,Arfcn:66,Lac:396D,Bsic:25<CR><LF>
Operator:"Bee Line GSM",MCC:250,MNC:99,Rxlev:33,Cellid:2A8F,Arfcn:71,Lac:39BA,Bsic:23<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:46,Cellid:39D2,Arfcn:865,Lac:4D0D,Bsic:14<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:36,Cellid:09EE,Arfcn:866,Lac:4D0D,Bsic:25<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:28,Cellid:09ED,Arfcn:869,Lac:4D0D,Bsic:22<CR><LF>
Operator:"MOTIV",MCC:250,MNC:20,Rxlev:28,Cellid:09EF,Arfcn:861,Lac:4D0D,Bsic:17<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:66,Cellid:58FE,Arfcn:1021,Lac:00EC,Bsic:0A<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:50,Cellid:58FD,Arfcn:1016,Lac:00EC,Bsic:08<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:49,Cellid:58FF,Arfcn:1023,Lac:00EC,Bsic:09<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:46,Cellid:F93B,Arfcn:59,Lac:00EC,Bsic:20<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:50,Cellid:381B,Arfcn:1020,Lac:00EC,Bsic:0A<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:37,Cellid:3819,Arfcn:42,Lac:00EC,Bsic:08<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:34,Cellid:4C0F,Arfcn:43,Lac:00EC,Bsic:0A<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:33,Cellid:0817,Arfcn:26,Lac:00EC,Bsic:27<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:34,Cellid:3A5D,Arfcn:1017,Lac:00E9,Bsic:34<CR><LF>
Operator:"MTS",MCC:250,MNC:01,Rxlev:33,Cellid:3D05,Arfcn:1018,Lac:00EC,Bsic:1F<CR><LF>
مهم است که توجه داشته باشید که بعداً باید داده ها را از پاسخ Cellid و Lac ماژول از هگزا دسیمال به اعشاری تبدیل کنید.
اکنون برای تماس با سرور Yandex باید داده های XML تولید کنیم که متعاقباً در یک عنصر ترکیب می شود.
جدول داده
اطلاعات
توضیح
xml=<ya_lbs_request><common><version>1.0</version><api_key>
...
این باید حاوی کلید 88 رقمی دریافت شده از Yandex باشد
</api_key></common>
<gsm_cells>
<cell><countrycode>
250
کد کشور (MCC)
</countrycode><operatorid>
2
کد اپراتور (MNC)
</operatorid><cellid>
8453
سلید اولین برج از لیست دریافتی از ماژول و تبدیل از عددی با پایه 16 به عددی با پایه 10 (مقدار دریافتی از ماژول 2105 است)
</cellid><lac>
7838
Lac برج اول نیز از عدد پایه 16 به عدد پایه 10 تبدیل شده است (مقدار دریافتی از ماژول 1E9E است)
</lac></cell>
...
یک گروه متحد شده توسط تگ سلول می تواند به تعداد دفعات لازم تکرار شود تا قابلیت اطمینان یک مکان خاص افزایش یابد.
</gsm_cells>
<ip><address_v4>
10.137.92.60
آدرس IP اختصاص داده شده به ماژول توسط شبکه پس از باز کردن زمینه GPRS را می توان با ارسال دستور 'AT+SAPBR=2,1' به ماژول به دست آورد - به زیر مراجعه کنید.
</address_v4></ip></ya_lbs_request>
این یک پیام XML با 1304 کاراکتر به صورت زیر ایجاد می کند:
پیام
xml=<ya_lbs_request><common><version>1.0</version><api_key>{здесь необходимо указать свой ключ}</api_key></common><gsm_cells><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8453</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8455</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>4265</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8456</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>20736</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>20738</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>8454</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>4071</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>5320</cellid><lac>7838</lac></cell><cell><countrycode>250</countrycode><operatorid>2</operatorid><cellid>1203</cellid><lac>7838</lac></cell></gsm_cells><ip><address_v4>10.137.92.60</address_v4></ip></ya_lbs_request>
این پیام بر اساس داده های برج های سلولی اپراتور Megafon تولید می شود، می توان آن را با داده ها تکمیل کرد، از جمله: در برج های دیگر قابل مشاهده برای ماژول دریافت شده با استفاده از دستور 'AT+CNETSCAN' برای افزایش قابلیت اطمینان مختصات صادر شده.
کار با ماژول و گرفتن مختصات فعلی
AT-log کار با ماژول
>AT+SAPBR=3,1,”Contype”,”GPRS” // конфигурирование профиля доступа в Интернет
<OK
>AT+SAPBR=3,1,”APN”,”internet” // конфигурирование APN
<OK
>AT+SAPBR=1,1 // запрос на открытие GPRS контекста
<OK // контекст открыт
>AT+SAPBR=2,1 // запрос текущего IP адреса присвоенного оператором сотовой связи
<+SAPBR: 1,1,”10.137.92.60” // данный IP адрес потребуется вставить в XML-сообщение
<
<OK
>AT+HTTPINIT
<OK
>AT+HTTPPARA=”CID”,1
<OK
>AT+HTTPPARA=”URL”,”http://api.lbs.yandex.net/geolocation”
<OK
>AT+HTTPDATA=1304,10000 // первое число – длина сформированного XML-сообщения
<DOWNLOAD // приглашение к вводу XML-сообщения
< // вводим сформированное нами XML-сообщение
<OK
>AT+HTTPACTION=1
<OK
<
<+HTTPACTION: 1,200,303 // 200 – сообщение отправлено, 303 – получено 303 байт данных
>AT+HTTPREAD=81,10
<+HTTPREAD: 10
<60.0330963 // широта на которой расположен модуль
<OK
>AT+HTTPREAD=116,10
<+HTTPREAD: 10
<30.2484303 // долгота на которой расположен модуль
>AT+HTTPTERM
<OK
بنابراین، ما مختصات فعلی ماژول را دریافت کردیم: 60.0330963، 30.2484304.
با افزایش تعداد داده های ارسال شده از طریق دکل های سلولی، دقت تعیین مکان به نسبت افزایش می یابد.
اطلاعات دقیق تر در مورد محتوای پاسخ از سرویس Yandex.Locator و انتخاب داده های مورد نیاز را می توانید در پیوند بخوانید:
نتیجه
امیدوارم این مطالب کمک خوبی به توسعه دهندگان باشد. من آماده پاسخگویی به سوالات شما در نظرات هستم.
منبع: www.habr.com