4

ナビゲーションベースのアプリケーションを作成しています。このアプリケーションでは、ユーザーが選択したポイントからルートを描画しています。ユーザーがルートをたどっていない場合、ルートを再計算する必要があります。

私が使用したルートを計算するためGoogle direction API。ルートを描画するために、このコードを使用しました

- (void) drawRoute:(NSArray *) path
{
    NSInteger numberOfSteps = path.count;
    [self.objMapView removeOverlays: self.objMapView.overlays];

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

        coordinates[index] = coordinate;
    }

    for( id <MKOverlay> ovr in [self.objMapView overlays])
    {
        MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:ovr];


        if (polylineView.tag == 22)
        {
            [self.objMapView removeOverlay:ovr];
        }
        [polylineView release];
    }

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


}

これまでのところ、すべて問題ありません。

今、ユーザーがルートから外れている場合(100メートル以上)に通知が必要で、通知も受け取ることができます

問題: ~ 道路が直線 (100 メートル以上) の場合、道路でポイントを獲得できません。問題を説明するために、画像を添付しました...

ルート

この画像では、黒い線がパス (ポリライン) で、赤い円が Google API から取得したポイントであるとします。しかし、青い円で示されている直線パスでは、比較するポイントを取得できず、このパスで再計算関数が呼び出されます。

直線道路であっても、ルートのすべてのポイントを取得できるソリューションを教えてください。

4

2 に答える 2

2

各ステップのポイントのペアごとに、ピタゴラスの定理を使用してそれらの間の距離を計算できます。

distance = sqrt(  pow((point1.x - point2.x), 2)   +   pow((point1.y - point2.y), 2)  )

次に、距離が 100m を超える場合は、線分に沿って中間点を追加します。

于 2013-03-23T08:28:56.330 に答える