Google, bedaŭrinde por multaj uzantoj de GSM-moduloj, antaŭ 2-3 monatoj blokis kaj translokigis al pagita bazo la API por determini lokon surbaze de la koordinatoj de ĉelaj turoj videblaj de la modulo. Pro tio, sur SIM800 serio moduloj produktitaj
Ni saltu kiel Yandex ricevas la koordinatojn de ĉelaj turoj, la ĉefa afero estas, ke ni povas uzi ĉi tiun senpagan servon kaj akiri la jenajn datumojn: Latitudo, Longitudo, Alteco, kaj ankaŭ la proksimuman eraron por ĉiu parametro. La ĉefa celo de la artikolo estas doni mallongan lernilon pri rapide ŝanĝi al la Yandex API, anstataŭ la ne plu disponebla servo de Guglo.
Malsupre, kiel ekzemplo, ni montros nur la latitudon kaj longitudon de la modula loko.
Do ni komencu
Unue vi devas legi la uzantinterkonsenton situantan ĉe:
Iru al adreso
Skribu aŭ alie konservu la ŝlosilon, kiun vi ricevas.
Post plenumi ĉi tiujn paŝojn, vi havos aliron al la paĝo
Por generi XML-peton en cURL-formato al Yandex.Locator-servoj, vi devos akiri informojn pri ĉelaj turoj "videblaj" per la modulo:
- landkodo – landokodo
- operatorid - poŝtelefona retokodo
- cellid – ĉelidentigilo
- lac - loka kodo
Ĉi tiuj informoj povas esti akiritaj de la modulo sendante la komandon 'AT+CNETSCAN'.
Informoj ricevitaj de la modulo
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>
Gravas noti, ke poste vi devos konverti la datumojn de la respondo de Cellid kaj Lac de la modulo de deksesuma al decimala.
Nun ni devas generi XML-datumojn por kontakti la Yandex-servilon, kiu poste estos kombinita en unu elementon.
Datuma tabelo
datumoj
komento
xml=<ya_lbs_request><common><version>1.0</version><api_key>
...
Ĉi tio devus enhavi la 88-ciferan ŝlosilon ricevitan de Yandex
</api_key></common>
<gsm_cells>
<cell><countrycode>
250
Landa Kodo (MCC)
</countrycode><operatorid>
2
Operaciistkodo (MNC)
</operatorid><cellid>
8453
Cellid de la unua turo el la listo ricevita de la modulo kaj konvertita de nombro kun bazo 16 al nombro kun bazo 10 (la valoro ricevita de la modulo estas 2105)
</cellid><lac>
7838
Lako de la unua turo, ankaŭ konvertita de bazo 16 nombro al bazo 10 nombro (la valoro ricevita de la modulo estas 1E9E)
</lac></cell>
...
Grupo kunigita per la ĉela etikedo povas esti ripetita tiom da fojoj kiel necese por pliigi la fidindecon de specifa loko
</gsm_cells>
<ip><address_v4>
10.137.92.60
La IP-adreso asignita al la modulo de la reto post malfermo de la GPRS-kunteksto povas esti akirita sendante la komandon 'AT+SAPBR=2,1' al la modulo - vidu sube.
</address_v4></ip></ya_lbs_request>
Ĉi tio generos XML-mesaĝon kun 1304 signoj longaj jene:
mesaĝo
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>
Ĉi tiu mesaĝo estas generita surbaze de datumoj pri ĉelaj turoj de la telefonisto Megafon, ĝi povas esti kompletigita per datumoj, inkluzive de: sur aliaj turoj videblaj al la modulo ricevita uzante la komandon 'AT+CNETSCAN' por pliigi la fidindecon de la elsenditaj koordinatoj.
Laborante kun la modulo kaj akiri aktualajn koordinatojn
AT-protokolo de laboro kun la modulo
>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
Tiel, ni ricevis la nunajn koordinatojn de la modulo: 60.0330963, 30.2484304.
Ĉar la nombro da datumoj senditaj per ĉelaj turoj pliiĝas, la precizeco de lokdeterminado pliiĝos proporcie.
Pli detalaj informoj pri la enhavo de la respondo de la servo Yandex.Locator kaj la elekto de la datumoj, kiujn vi bezonas, povas esti legitaj ĉe la ligo:
konkludo
Mi esperas, ke ĉi tiu materialo estos bona helpo al programistoj. Mi pretas respondi viajn demandojn en la komentoj.
fonto: www.habr.com