结合Swift中的纬度/经度特性(蓝牙LE)进行Mapkit注释

时间:2015-10-27 13:26:14

标签: ios swift bluetooth gps mapkit

我正在使用跟踪器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)

1 个答案:

答案 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用于分隔符,或者你使用固定长度。