Устройства Bluetooth с низким энергопотреблением (BLE) не сообщают о своем местоположении; все, что они делают, это транслируют кортеж: (UUID, Major, Minor). Диапазон устройств BLE аппроксимируется на основе уровня полученного сигнала, поэтому любое измерение расстояния, применяемое к нему, никогда не будет точным на 100%.
Из-за этого вы не сможете точно определить широту/долготу конкретного iBeacon. Все, что вы знаете, это то, что он находится на небольшом расстоянии от текущего местоположения вашего телефона. Вы даже не получите направление — сила сигнала является одномерной величиной и даже не связана линейно с расстоянием. Он может быть изменен свинцовыми стенками, помехами сигнала, усилением сигнала и многими другими факторами.
Короче говоря, iBeacon по своей сути не сообщают о своей широте/долготе, и определение расстояния от вас до конкретного iBeacon пока невозможно с достаточной степенью точности. Лучшее, что вы можете сделать, это сказать: «Я обнаружил iBeacon, и мое текущее местоположение (широта/долгота). iBeacon, вероятно, находится в пределах x метров». Где x основан на силе сигнала и предоставляется с оговоркой, что это нечеткое приближение.
Изменить:
Альтернативой может быть запись широты и долготы мест, где вы планируете разместить свои iBeacons, а затем настроить сервер где-нибудь (или вы можете просто закодировать его прямо в сборке, если вы не беспокоитесь о том, чтобы обновлять его на the fly), который преобразует пару Major/Minor в широту/долготу с помощью созданного вами поиска в базе данных.
person
Ian MacDonald
schedule
08.10.2014