1

緯度/経度を使用して 2 点間のルートを描画する必要があるアプリケーションを開発しています。

Apple API を使用してポリラインを取得し、デコード後に描画しました。

問題:

  1. ルートが道路の中央にない(添付画像_1)か、ルートがずれている

ここに画像の説明を入力

ここに画像の説明を入力

以下はコードです:

    NSString* saddr = [NSString stringWithFormat:@"%@,%@",self.lat1.text,self.long1.text];

    NSString* daddr = [NSString stringWithFormat:@"%@,%@",self.lat2.text,self.long2.text];

    NSString* apiUrlStr = [NSString stringWithFormat:@"http://maps.apple.com/maps/api/directions/json?origin=%@&destination=%@&sensor=false", saddr, daddr];

    NSURL* apiUrl = [NSURL URLWithString:apiUrlStr];

    NSError *error;
    NSString *apiResponse = [NSString stringWithContentsOfURL:apiUrl encoding:NSUTF8StringEncoding error:&error];


    NSData *responseData = [apiResponse dataUsingEncoding:NSUTF8StringEncoding];


    NSError* error1;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData
                                                         options:NSJSONReadingMutableLeaves
                                                           error:&error1];
    NSLog(@"Error: %@\n%@",[error1 localizedDescription],[error1 localizedFailureReason]);


   if([[json objectForKey:@"status"] isEqualToString:@"OK"])
    {
        NSArray *routes1 = [json objectForKey:@"routes"];
        NSDictionary *route = [routes1 lastObject];

        if (route)
        {
            NSString *overviewPolyline = [[route objectForKey: @"overview_polyline"] objectForKey:@"points"];

            routes = [self decodePolyLine:overviewPolyline];

            //NSLog(@"%@",[routes objectAtIndex:0]);

            [self updateRouteView];
            [self centerMap];
        }
    }


-(void) updateRouteView
{
 NSInteger numberOfSteps = routes.count;

CLLocationCoordinate2D coordinates[numberOfSteps];
for (NSInteger index = 0; index < numberOfSteps; index++) {
    CLLocation *location = [routes objectAtIndex:index];
    CLLocationCoordinate2D coordinate = location.coordinate;

    coordinates[index] = coordinate;
}

MKPolyline *polyLine = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps];
[self.mapView addOverlay:polyLine];

}
4

2 に答える 2

1

decodePolyLineは取得する緯度経度に完全に依存します。したがって、適切な緯度経度を取得すれば、このケースは発生しません。iOS6以降のAppleの別の理由は、独自のマップを使用ているため、Googleマップとは緯度経度が異なる可能性があります.

于 2013-04-15T06:25:39.590 に答える
0

他の質問で説明したのと同じ問題であり、同じ解決策があります。2 つの異なるソースからのデータを使用しており、データが異なります。

于 2013-04-14T23:52:18.430 に答える