Google, thật không may cho nhiều người dùng mô-đun GSM, 2-3 tháng trước đã chặn và chuyển sang cơ sở trả phí API để xác định vị trí dựa trên tọa độ của các tháp di động hiển thị cho mô-đun. Vì lý do này, trên các mô-đun dòng SIM800 được sản xuất
Hãy bỏ qua cách Yandex nhận tọa độ của các tháp di động, điều chính là chúng ta có thể sử dụng dịch vụ miễn phí này và nhận các dữ liệu sau: Vĩ độ, Kinh độ, Độ cao, cũng như lỗi gần đúng cho từng tham số. Mục đích chính của bài viết là đưa ra một hướng dẫn ngắn về cách chuyển nhanh sang Yandex API, thay vì dịch vụ không còn khả dụng của Google.
Dưới đây là một ví dụ, chúng tôi sẽ chỉ hiển thị vĩ độ và kinh độ của vị trí mô-đun.
Vậy hãy bắt đầu
Trước tiên, bạn cần đọc thỏa thuận người dùng có tại:
Đi đến địa chỉ
Viết ra hoặc lưu trữ chìa khóa bạn nhận được.
Sau khi hoàn thành các bước này, bạn sẽ có quyền truy cập vào trang
Để tạo yêu cầu XML ở định dạng cURL tới các dịch vụ Yandex.Locator, bạn sẽ cần lấy thông tin về các tháp di động “hiển thị” theo mô-đun:
- countrycode - mã quốc gia
- operatorid – mã mạng di động
- cellid - nhận dạng tế bào
- lac – mã vị trí
Thông tin này có thể được lấy từ mô-đun bằng cách gửi lệnh 'AT+CNETSCAN'.
Thông tin nhận được từ mô-đun
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>
Điều quan trọng cần lưu ý là sau này bạn sẽ cần chuyển đổi dữ liệu từ phản hồi Cellid và Lac của mô-đun từ hệ thập lục phân sang thập phân.
Bây giờ chúng ta cần tạo dữ liệu XML để liên hệ với máy chủ Yandex, sau đó sẽ được kết hợp thành một phần tử.
bảng dữ liệu
Dữ liệu
Bình luận
xml=<ya_lbs_request><common><version>1.0</version><api_key>
...
Cái này phải chứa khóa 88 chữ số nhận được từ Yandex
</api_key></common>
<gsm_cells>
<cell><countrycode>
250
Mã quốc gia (MCC)
</countrycode><operatorid>
2
Mã nhà điều hành (MNC)
</operatorid><cellid>
8453
Cellid của tháp đầu tiên trong danh sách nhận được từ mô-đun và được chuyển đổi từ một số có cơ số 16 thành số có cơ số 10 (giá trị nhận được từ mô-đun là 2105)
</cellid><lac>
7838
Lạc của tháp thứ nhất, cũng được chuyển đổi từ số cơ sở 16 sang số cơ sở 10 (giá trị nhận được từ mô-đun là 1E9E)
</lac></cell>
...
Một nhóm được thống nhất bởi thẻ di động có thể được lặp lại nhiều lần nếu cần để tăng độ tin cậy của một vị trí cụ thể
</gsm_cells>
<ip><address_v4>
10.137.92.60
Có thể lấy địa chỉ IP được mạng gán cho mô-đun sau khi mở ngữ cảnh GPRS bằng cách gửi lệnh 'AT+SAPBR=2,1' tới mô-đun - xem bên dưới
</address_v4></ip></ya_lbs_request>
Điều này sẽ tạo ra một thông báo XML dài 1304 ký tự như sau:
thông điệp
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>
Tin nhắn này được tạo ra trên cơ sở dữ liệu trên các trạm phát sóng di động của nhà mạng Megafon, có thể bổ sung thêm dữ liệu, bao gồm: trên các tháp khác mà mô-đun nhận được có thể nhìn thấy bằng lệnh 'AT+CNETSCAN' để tăng độ tin cậy của tọa độ đã ban hành.
Làm việc với mô-đun và nhận tọa độ hiện tại
Nhật ký AT của công việc với mô-đun
>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
Như vậy, chúng ta đã nhận được tọa độ hiện tại của mô-đun: 60.0330963, 30.2484304.
Khi số lượng dữ liệu được gửi qua tháp di động tăng lên, độ chính xác của việc xác định vị trí sẽ tăng theo tỷ lệ.
Thông tin chi tiết hơn về nội dung phản hồi từ dịch vụ Yandex.Locator và việc lựa chọn dữ liệu bạn cần có thể được đọc tại liên kết:
Kết luận
Tôi hy vọng tài liệu này sẽ giúp ích tốt cho các nhà phát triển. Tôi sẵn sàng trả lời câu hỏi của bạn trong phần bình luận.
Nguồn: www.habr.com