ナビゲーションベースのアプリケーションを作成しています。このアプリケーションでは、ユーザーが選択したポイントからルートを描画しています。ユーザーがルートをたどっていない場合、ルートを再計算する必要があります。
私が使用したルートを計算するため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 から取得したポイントであるとします。しかし、青い円で示されている直線パスでは、比較するポイントを取得できず、このパスで再計算関数が呼び出されます。
直線道路であっても、ルートのすべてのポイントを取得できるソリューションを教えてください。