خدمة تحديد المواقع GSM لوحدات SIM800x وعملها مع Yandex.Locator API



للأسف ، قامت Google ، للأسف للعديد من مستخدمي وحدات GSM ، بحظر API وتحويله على أساس مدفوع قبل 2-3 أشهر لتحديد الموقع عن طريق إحداثيات الأبراج الخلوية المرئية بواسطة الوحدة النمطية. وبسبب هذا ، توقفت وظائف فريق AT + CIPGSMLOC عن العمل على وحدات سلسلة SIM800 المصنعة بواسطة SIMCom Wireless Solutions . في هذه المقالة ، سأخبرك بكيفية حل المشكلة باستخدام خدمة مماثلة تقدمها Yandex - Yandex.Locator .

سنحذف كيفية استقبال Yandex لإحداثيات الأبراج الخلوية ، والشيء الرئيسي هو أنه يمكننا استخدام هذه الخدمة المجانية والحصول على البيانات التالية: Latitude ، Longitude ، Altitude ، بالإضافة إلى الخطأ التقريبي لكل معلمة. الهدف الرئيسي من المقالة هو تقديم برنامج تعليمي صغير حول الانتقال السريع إلى واجهة برمجة التطبيقات من Yandex ، بدلاً من الخدمة التي لم تعد متوفرة من Google.

أدناه ، كمثال ، سوف نحصل فقط على خط الطول وخط العرض لموقع الوحدة.

لذلك دعونا نبدأ


تحتاج أولاً إلى قراءة اتفاقية المستخدم ، الموجودة على: yandex.ru/legal/locator_api . يجب إيلاء اهتمام خاص للبند 3.6. اتفاقية المستخدم هذه ، والتي تنص على أن Yandex تحتفظ بالحق في تغيير / تصحيح أو تحديث Yandex.Locator API في أي وقت ، دون إشعار مسبق .

انتقل إلى yandex.ru/dev/locator/keys/get وأضف حساب Yandex الذي تم إنشاؤه سابقًا إلى مجموعة التطوير. ستتيح لك هذه الإجراءات الحصول على مفتاح للوصول إلى هذه الخدمة.


قم بتدوين المفتاح المستلم أو حفظه.

بعد تنفيذ هذه الخطوات ، ستتمكن من الوصول إلى الصفحة yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage حيث يتم توفير المعلومات الأساسية حول آلية خدمة Yandex.Locator.

لإنشاء طلب XML بتنسيق cURL لخدمات Yandex.Locator ، ستحتاج إلى الحصول على معلومات حول أبراج خلايا الوحدة النمطية "المرئية":

  • كود البلد - كود البلد
  • مشغل شبكة الجوال
  • معرف الخلية - الخلية
  • لاك - كود الموقع

يمكن الحصول على هذه المعلومات من الوحدة عن طريق إرسال الأمر "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 من سداسي عشري إلى عشري.

نحتاج الآن إلى إنشاء بيانات XML للوصول إلى خادم Yandex ، والذي سيتم دمجه في المستقبل في عنصر واحد.

جدول البيانات
xml=<ya_lbs_request><common><version>1.0</version><api_key>
...88-
</api_key></common>
<gsm_cells>
<cell><countrycode>
250
(MCC)
</countrycode><operatorid>
2
(MNC)
</operatorid><cellid>
8453
Cellid 16 10 ( — 2105)
</cellid><lac>
7838
Lac , 16 10 ( – 1E9E)
</lac></cell>
...
, 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 واختيار البيانات التي تحتاجها على: yandex.ru/dev/locator/doc/dg/api/xml-reply-docpage ، في API-> XML-> قسم الرد

استنتاج


آمل أن تكون هذه المواد مساعدة جيدة للمطورين. جاهز للإجابة على أسئلتك في التعليقات.

All Articles