SIM800x 模組的 GSM 定位服務及其與 Yandex.Locator API 的配合

SIM800x 模組的 GSM 定位服務及其與 Yandex.Locator API 的配合

不幸的是,對於許多 GSM 模組的用戶來說,Google在 2-3 個月前封鎖了用於根據模組可見的手機訊號塔座標確定位置的 API,並將其轉為付費。 正因為如此,在生產的SIM800系列模組上 芯訊通無線解決方案,AT+CIPGSMLOC 指令的功能停止運作。 在本文中,我將告訴您如何使用 Yandex 提供的類似服務來解決此問題 - Yandex.定位器.

我們先跳過Yandex如何接收手機訊號塔的座標,主要是我們可以使用這個免費服務並取得以下資料:緯度、經度、高度,以及每個參數的近似誤差。 本文的主要目的是提供一個關於快速切換到 Yandex API 的簡短教程,而不是不再提供 Google 的服務。

下面,作為範例,我們將僅顯示模組位置的緯度和經度。

讓我們開始吧

首先您需要閱讀位於以下位置的使用者協定: yandex.ru/legal/locator_api。 應特別注意第 3.6 條。 本使用者協議規定 Yandex 保留隨時更改/更正或更新 Yandex.Locator API 的權利,恕不另行通知。.

前往地址 yandex.ru/dev/locator/keys/get 並將您先前建立的 Yandex 帳戶新增至開發群組。 這些步驟將允許您取得存取此服務的金鑰。

SIM800x 模組的 GSM 定位服務及其與 Yandex.Locator API 的配合
寫下或以其他方式儲存您收到的密鑰。

完成這些步驟後,您將可以訪問該頁面 yandex.ru/dev/locator/doc/dg/api/geolocation-api-docpage 其中提供了有關 Yandex.Locator 服務運作機制的基本資訊。

若要向 Yandex.Locator 服務產生 cURL 格式的 XML 請求,您需要取得模組「可見」的蜂巢塔資訊:

  • 國家代碼 – 國家代碼
  • 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 回應中的資料從十六進位轉換為十進位。

現在我們需要產生 XML 資料來聯絡 Yandex 伺服器,該資料隨後將合併為一個元素。

數據表

數據
評論

xml=<ya_lbs_request><common><version>1.0</version><api_key>

...
這應該包含從 Yandex 收到的 88 位元金鑰

</api_key></common>
<gsm_cells>
<cell><countrycode>
250

國家/地區代碼 (MCC)

</countrycode><operatorid>
2

營運商代碼(跨國公司)

</operatorid><cellid>
8453

從模組接收的清單中第一個塔的 Cellid,並從基數 16 的數字轉換為基數 10 的數字(從模組接收的值為 2105)

</cellid><lac>
7838

第一個塔的 Lac,也從 16 進位數轉換為 10 進位數(從模組收到的值為 1E9E)

</lac></cell>
...

由單元標籤聯合起來的群組可以根據需要重複多次,以提高特定位置的可靠性

</gsm_cells>
<ip><address_v4>
10.137.92.60

開啟 GPRS 上下文後網路分配給模組的 IP 位址可以透過向模組發送命令「AT+SAPBR=2,1」來取得 - 請參閱下文

</address_v4></ip></ya_lbs_request>

這將產生一條 1304 個字元長的 XML 訊息,如下所示:

信息

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 日誌

>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->回應部分

結論

希望這份資料能夠對開發者有很好的幫助。 我準備好在評論中回答您的問題。

來源: www.habr.com

添加評論