我正在使用跟踪器iOS应用程序来跟踪设备的(GPS)位置(该设备目前是Arduino Uno,Adafruit Bluefruit LE UART Friend用于蓝牙连接,Ublox GPS模块用于GPS坐标)。我已经设置了Arduino和iOS应用程序,并通过一项服务成功地通过不同的特征获得经度和纬度。
要在MapkitView中添加/更新注释以及我的跟踪器设备的位置,我需要在一个函数中访问经度和纬度。但是,BLEHandler和BLEHandlerDelegate都只从一个特征(纬度或经度)发送值。因此,我认为我需要一些函数或调整,我可以将这两个值(纬度和经度)连接到ViewController中进行访问。
您能提供一些指导或展示如何使其发挥作用的示例代码吗?
我是编程世界的新手,请原谅我天真。
非常感谢提前。
以下是一些代码示例: BLEHandler
func peripheral(peripheral: CBPeripheral!, didUpdateValueForCharacteristic characteristic: CBCharacteristic!, error: NSError!) {
var dataStrLat : String?
var dataStrLong : String?
if characteristic.UUID == UUID_CHAR_LAT {
var charValue : NSData = characteristic.value
dataStrLat = NSString(data: charValue, encoding: NSASCIIStringEncoding) as? String
//var dataStrLat : String? = NSString(data: charValue, encoding: NSASCIIStringEncoding) as? String
if(dataStrLat == nil){
dataStrLat = "blank"
}
NSLog("%@: Characteristic (gps lat) changed for %@ with value %@", TAG, peripheral.name, dataStrLat!)
delegate.receivedStringValue(peripheral.name, dataStr: dataStrLat!)
}
if characteristic.UUID == UUID_CHAR_LONG {
var charValue : NSData = characteristic.value
dataStrLong = NSString(data: charValue, encoding: NSASCIIStringEncoding) as? String
//var dataStrLong : String? = NSString(data: charValue, encoding: NSASCIIStringEncoding) as? String
if(dataStrLong == nil){
dataStrLong = "blank"
}
NSLog("%@: Characteristic (gps long) changed for %@ with value %@", TAG, peripheral.name, dataStrLong!)
delegate.receivedLongitudeValue(peripheral.name, dataStr: dataStrLong!)
}
}
BLEHandlerDelegate
func receivedStringValue(deviceName: String, dataStr : String)
func receivedLongitudeValue(deviceName: String, dataStr : String)
答案 0 :(得分:0)
lat,lon每个需要4个字节。 所以你需要8个字节的lat lon坐标:
如果转换为4字节整数,则通过乘以1E7并舍入或转换为int,可获得4个字节。
int latInt = round(latitude * 1E7);
如果您需要将其存储为字符 逗号后需要5或6位数字 在最坏的情况下,这是
-129,12345,经度为10位数
纬度最坏的情况:
-89,12345即9
所以你有一个char用于分隔符,或者你使用固定长度。