2013-08-24 21 views
5

Şu anda bir ios uygulaması yapıyorum ve kullanıcının konumunun bir Google Harita görünümünde görüntülendiği bir işlevi gerçekleştirmeyi umuyoruz ve Bir polyline şovunun şu ana kadar kullanıcı tarafından gezilen yolu taşımasını sağlayın. Bu açıkça gerçek zamanlı olarak gerçekleşmesi gerekiyor.Bir kullanıcının konumu nasıl izlenir ve Google Haritalar kullanılarak seyahat edilen yol nasıl görüntülenir? SDS

Şimdiye kadar bir Google Maps görünümünü kullanıma sundum ve kullanıcının geçerli konumunu observeValueForKeyPath işlevini kullanarak görüntüleyebiliyorum. Kullanıcı hareket ettikçe görünüm ve konum işaretçisi güncellenir.

Bunu yapmanın en iyi yolunun, harita kamerasının yeni konuma her güncelleştirilişinde kullanıcının geçerli konumunu ekleyen ve ardından bu yoldan bir polyline oluşturduğu bir GMSMutablePath nesnesi oluşturmak olacağını düşündüm. Bunun için kullandım kod aşağıda:

- (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; 
    } 
} 

Bu uygulamada öylesine herhangi bir yardım/tavsiye çok takdir haritadaki herhangi çoklu çizgiyi üretmez!

cevap

6
- (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_; 
}} 
+0

Kodunuzdaki nokta nedir? –

+0

@sandeeptomar point, NSMutable Array. – ChenSmile

2

İki yol BTW iki çizim çizmek isterseniz, bu yöntemi kullanın. iki yerde rut bulmak için demo hızlı yöntemleri.

//MARK: API CALL 
func GetRoughtofTwoLocation(){ 
    let originString: String = "\(23.5800),\(72.5853)" 
    let destinationString: String = "\(24.5836),\(72.5853)" 
    let directionsAPI: String = "https://maps.googleapis.com/maps/api/directions/json?" 
    let directionsUrlString: String = "\(directionsAPI)&origin=\(originString)&destination=\(destinationString)&mode=driving" 

    APICall().callApiUsingWithFixURLGET(directionsUrlString, withLoader: true) { (responceData) -> Void in 
     let json = responceData as! NSDictionary 
     let routesArray: [AnyObject] = (json["routes"] as! [AnyObject]) 
     var polyline: GMSPolyline? = nil 
     if routesArray.count > 0 { 
      let routeDict: [NSObject : AnyObject] = routesArray[0] as! [NSObject : AnyObject] 
      var routeOverviewPolyline: [NSObject : AnyObject] = (routeDict["overview_polyline"] as! [NSObject : AnyObject]) 
      let points: String = (routeOverviewPolyline["points"] as! String) 
      let path: GMSPath = GMSPath(fromEncodedPath: points)! 
      polyline = GMSPolyline(path: path) 
      polyline!.strokeWidth = 2.0 
      polyline!.map = self.mapView 
     } 

    } 
}