6

私は現在iosアプリを構築しています.ユーザーの場所がGoogleマップビューに表示され、ポリラインを移動するとユーザーがこれまでに移動したパスを表示する機能を実装したいと考えています. これは明らかにリアルタイムで行う必要があります。

ここまでで、Google マップ ビューを初期化し、 observeValueForKeyPath関数を使用してユーザーの現在地を表示できるようになりました。ユーザーが移動すると、ビューと位置マーカーが更新されます。

これを行う最善の方法は、マップ カメラが新しい場所に更新されるたびにユーザーの現在の場所を追加する GMSMutablePath オブジェクトを作成し、そのパスからポリラインを作成することだと考えました。これに使用したコードは次のとおりです。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"myLocation"] && [object isKindOfClass:[GMSMapView class]])
    {
        [self.myMapView animateToCameraPosition:[GMSCameraPosition cameraWithLatitude:self.myMapView.myLocation.coordinate.latitude
                                                                                 longitude:self.myMapView.myLocation.coordinate.longitude
                                                                                      zoom:18]];


        [trackedPath addCoordinate:CLLocationCoordinate2DMake(self.myMapView.myLocation.coordinate.latitude, self.myMapView.myLocation.coordinate.longitude)];
        GMSPolyline *testPoly = [GMSPolyline polylineWithPath:trackedPath];
        testPoly.strokeWidth = 8;
        testPoly.strokeColor = [UIColor redColor];
        testPoly.map = myMapView;
    }
}

これにより、実際にはマップ上にポリラインが生成されないため、ヘルプ/アドバイスをいただければ幸いです。

4

2 に答える 2

8
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{  NSString *pointString=[NSString    stringWithFormat:@"%f,%f",newLocation.coordinate.latitude,newLocation.coordinate.longitude];
    [self.points addObject:pointString];
GMSMutablePath *path = [GMSMutablePath path];
for (int i=0; i<self.points.count; i++)
{           
  NSArray *latlongArray = [[self.points   objectAtIndex:i]componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@","]];

[path addLatitude:[[latlongArray objectAtIndex:0] doubleValue] longitude:[[latlongArray objectAtIndex:1] doubleValue]];
 }

if (self.points.count>2)
{
    GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
    polyline.strokeColor = [UIColor blueColor];
    polyline.strokeWidth = 5.f;
    polyline.map = mapView_;
    self.view = mapView_;
}}
于 2013-11-05T10:09:16.493 に答える