Google, malangnya bagi kebanyakan pengguna modul GSM, 2-3 bulan lalu menyekat dan memindahkan API kepada asas berbayar untuk menentukan lokasi berdasarkan koordinat menara sel yang boleh dilihat oleh modul. Disebabkan ini, modul siri SIM800 dihasilkan
Mari kita langkau bagaimana Yandex menerima koordinat menara sel, perkara utama ialah kita boleh menggunakan perkhidmatan percuma ini dan mendapatkan data berikut: Latitud, Longitud, Altitud, serta ralat anggaran untuk setiap parameter. Tujuan utama artikel tersebut adalah untuk memberikan tutorial ringkas tentang menukar dengan cepat kepada API Yandex, bukannya perkhidmatan yang tidak lagi tersedia daripada Google.
Di bawah, sebagai contoh, kami akan menunjukkan hanya latitud dan longitud lokasi modul.
Jadi mari kita mulakan
Mula-mula anda perlu membaca perjanjian pengguna yang terletak di:
Pergi ke alamat
Tulis atau simpan kunci yang anda terima.
Selepas melengkapkan langkah ini, anda akan mempunyai akses ke halaman
Untuk menjana permintaan XML dalam format cURL kepada perkhidmatan Yandex.Locator, anda perlu mendapatkan maklumat tentang menara sel "kelihatan" oleh modul:
- kod negara – kod negara
- operatorid – kod rangkaian mudah alih
- cellid – pengecam sel
- lac – kod lokasi
Maklumat ini boleh diperolehi daripada modul dengan menghantar arahan 'AT+CNETSCAN'.
Maklumat yang diterima daripada modul
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>
Adalah penting untuk ambil perhatian bahawa kemudian anda perlu menukar data daripada respon Cellid dan Lac modul daripada perenambelasan kepada perpuluhan.
Sekarang kita perlu menjana data XML untuk menghubungi pelayan Yandex, yang kemudiannya akan digabungkan menjadi satu elemen.
Jadual data
Data
Komen
xml=<ya_lbs_request><common><version>1.0</version><api_key>
...
Ini harus mengandungi kunci 88 digit yang diterima daripada Yandex
</api_key></common>
<gsm_cells>
<cell><countrycode>
250
Kod Negara (MCC)
</countrycode><operatorid>
2
Kod operator (MNC)
</operatorid><cellid>
8453
Selid menara pertama daripada senarai yang diterima daripada modul dan ditukar daripada nombor dengan asas 16 kepada nombor dengan asas 10 (nilai yang diterima daripada modul ialah 2105)
</cellid><lac>
7838
Lac menara pertama, juga ditukar daripada nombor asas 16 kepada nombor asas 10 (nilai yang diterima daripada modul ialah 1E9E)
</lac></cell>
...
Kumpulan yang disatukan oleh tag sel boleh diulang seberapa banyak kali yang perlu untuk meningkatkan kebolehpercayaan lokasi tertentu
</gsm_cells>
<ip><address_v4>
10.137.92.60
Alamat IP yang diberikan kepada modul oleh rangkaian selepas membuka konteks GPRS boleh diperoleh dengan menghantar arahan 'AT+SAPBR=2,1' ke modul - lihat di bawah
</address_v4></ip></ya_lbs_request>
Ini akan menjana mesej XML 1304 aksara panjang seperti berikut:
mesej
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>
Mesej ini dijana berdasarkan data pada menara sel pengendali Megafon, ia boleh ditambah dengan data, termasuk: pada menara lain yang boleh dilihat oleh modul yang diterima menggunakan arahan 'AT+CNETSCAN' untuk meningkatkan kebolehpercayaan koordinat yang dikeluarkan.
Bekerja dengan modul dan mendapatkan koordinat semasa
AT-log kerja dengan modul
>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
Oleh itu, kami menerima koordinat semasa modul: 60.0330963, 30.2484304.
Apabila bilangan data yang dihantar melalui menara sel meningkat, ketepatan penentuan lokasi akan meningkat secara berkadar.
Maklumat lebih terperinci tentang kandungan respons daripada perkhidmatan Yandex.Locator dan pemilihan data yang anda perlukan boleh dibaca di pautan:
Kesimpulan
Saya berharap bahan ini akan menjadi bantuan yang baik kepada pembangun. Saya bersedia untuk menjawab soalan anda dalam komen.
Sumber: www.habr.com