Mapbox iOS显示来自编码折线的路线

时间:2019-07-02 07:16:04

标签: ios objective-c mapbox polyline mapbox-ios

我正在使用Mapbox iOS SDK在我的应用中显示地图。 我想显示从服务器获取的路由(来自Mapbox Javascript SDK的编码折线)。

我似乎无法像Google Maps SDK那样工作,

GMSPolyline *line = [GMSPolyline polylineWithPath:self.currentPath];

并在GMSMapView实例上显示该路由。

我知道我可以使用MapboxDirections SDK计算路线并获取MBRoute,但我不想这样做,因为我已经从后端获取了编码的折线。

更新

+ (NSMutableArray*)decodePolyLine:(NSMutableString*)encoded {

    [encoded replaceOccurrencesOfString:@"\\" withString:@"\/" options:NSLiteralSearch range:NSMakeRange(0, [encoded length])];

    [encoded replaceOccurrencesOfString:@"\\\\" withString:@"\\"
                                options:NSLiteralSearch
                                  range:NSMakeRange(0, [encoded length])];
    NSInteger len = [encoded length];
    NSInteger index = 0;
    NSMutableArray *array = [[NSMutableArray alloc] init] ;
    NSInteger lat=0;
    NSInteger lng=0;
    while (index < len) {
        NSInteger b;
        NSInteger shift = 0;
        NSInteger result = 0;
        do {
            b = [encoded characterAtIndex:index++] - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        NSInteger dlat = ((result & 1) ? ~(result >> 1) : (result >> 1));
        lat += dlat;
        shift = 0;
        result = 0;
        do {
            b = [encoded characterAtIndex:index++] - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        NSInteger dlng = ((result & 1) ? ~(result >> 1) : (result >> 1));
        lng += dlng;

        NSNumber *latitude = [[NSNumber alloc] initWithDouble:lat * 1e-5];
        NSNumber *longitude = [[NSNumber alloc] initWithDouble:lng * 1e-5];
        // printf("[%f,", [latitude doubleValue]);
        // printf("%f]", [longitude doubleValue]);
        CLLocation *loc = [[CLLocation alloc] initWithLatitude:[latitude doubleValue] longitude:[longitude doubleValue]];
        [array addObject:loc];
    }
    return array;
}

我发现此算法可从编码的折线中获取位置点,现在我可以在地图上显示路线,但该路线与实际道路有些偏离。 我能弄清楚为什么,我尝试过他们的游乐场,那里看上去很完美,但对我来说却不起作用。

请帮助我如何解决此路线问题。

谢谢

0 个答案:

没有答案