ios जीएमएसएममार्कर GMSPolyline पर कोनों के चारों ओर उछलता है



objective-c google-maps-api-3 (1)

// While drawing polyline on GMSMapView
GMSPath *path = [GMSPath pathFromEncodedPath:strEncodedPolyline]; // Decoding encoded polyline string for converting to locations.
// Capture all path points in to a global array,So that we can track how user is travelling later.
arrLocationsOnPolyline = [NSMutableArray new]; // Make it fresh before filling
for (int counter = 0; counter < path.count; ++counter)
{
    CLLocationCoordinate2D coordinate = [path coordinateAtIndex:counter];
    CLLocation *locTemp = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
    [arrLocationsOnPolyline addObject:locTemp];
}
// Here,After loop ending, we'll get all path points as locations in to arrLocationsOnPolyline


// Now in -locationManager:didUpdateLocations: delegate method,
// 1. Find the index of nearest path point to user's current location in arrLocationsOnPolyline,Lets call it as nFoundAtIndexTemp.
// FMI : loop through the arrLocationsOnPolyline and find the nearest point's index to user's current location,

// Hold a global nLastFoundAtIndex variable and make it's default value as -1(in -viewDidLoad or somewhere),
// 2. Check 
if (nLastFoundAtIndex >= 0 && nFoundAtIndexTemp > (nLastFoundAtIndex + 10)) // (Means app didn't received location updates but user actually traveled through more than 10 points on poyline drawn)
{
    // 3. Hurray,You got him,Now animate your blue current location marker from the location at last stored nearest path point index and current nearest path point index of arrLocationsOnPolyline
}


// 4. Update nLastFoundAtIndex with current state
nLastFoundAtIndex = nFoundAtIndexTemp;

// Code To Animate user location marker through the missed points
// Call this function with array of user missed points(Probably from -locationManager:didUpdateLocations:),Marker will be animated through the points.
#pragma mark - Animating through the missed coordinates
-(void)animateMarker:(GMSMarker *)markerUserLocation throughTheMissedLocations:(NSMutableArray <CLLocation *> *)arrMissedLocations
{
    @try
    {
        CLLocation *locTemp = arrMissedLocations.firstObject;
        if(locTemp)
        {
            [CATransaction begin];
            NSTimeInterval nAnimationDuration = 0.1; // Update this value as per your needs.
            [CATransaction setAnimationDuration:nAnimationDuration];
            markerUserLocation.position = locTemp.coordinate;
            if(arrMissedLocations.count >= 1)
            {
                @try
                {
                    [CATransaction setCompletionBlock:^
                    {
                        @try
                        {
                            [arrMissedLocations removeObject:locTemp];
                            [self animateMarker:markerUserLocation throughTheMissedLocations:arrMissedLocations];
                        }
                        @catch (NSException *exception)
                        {
                            NSLog(@"exception at %s function %@",__PRETTY_FUNCTION__,exception.debugDescription);
                        }
                    }];
                }
                @catch (NSException *exception)
                {
                    NSLog(@"exception at %s function %@",__PRETTY_FUNCTION__,exception.debugDescription);
                }
            }
            [CATransaction commit];
        }
    }
    @catch (NSException *exception)
    {
        NSLog(@"exception at %s function %@",__PRETTY_FUNCTION__,exception.debugDescription);
    }
}

हमने यह पहले किया था, लेकिन कोड पोस्ट नहीं किया जा सकता है, लेकिन उम्मीद है कि आपको एक डिजाइन स्तर का विचार मिलेगा।

उम्मीद है की वो मदद करदे।

मैं एक नेविगेशन ऐप पर काम कर रहा हूं और पहले से तैयार की गई GMSPolyline पर उपयोगकर्ता के वर्तमान आंदोलन को ट्रैक कर रहा हूं। जब उपयोगकर्ता सीधे जा रहा है तो यह अच्छा काम करता है। अब अगर, मान लीजिए कि जीएमपीपीलाइनलाइन पर सही / बाएं मोड़ है या यू-मोर्न है, तो अब मेरे जीपीएस स्थान के अनुसार मुझे एक मोड़ लेने से 30 मीटर बाद एक और 20 मीटर पहले एक अपडेट मिलता है।

मेरे जीपीएस अंक को इकट्ठा करने में विफल रहता है जो अभी मोड़ पर मौजूद होगा। इस मामले में मेरा जीएमएममार्कर बिंदु से एक्स से वाई तक कूदता है और अगर मैं एनीमेशन लागू करता हूं तो यह तिरछे चलता है और जीएमपीपीलाइनलाइन या वक्र के साथ नहीं चलता है। कृपया मुझे सुझाव दें कि मैं GMSPolyline से उन लापता बिंदुओं को कैसे एकत्र कर सकता हूं या जीएमएस मार्कर के लिए कुछ एनीमेशन दिखा सकता हूं ताकि उपयोगकर्ता देख सके कि वे वास्तव में पॉलीलाइन को बदल रहे हैं।

मैं एक नमूना छवि संलग्न कर रहा हूँ लाल रेखाओं को जीएमपीपोलिलाइन के रूप में समझा जा सकता है और नीले डॉट्स जीपीएस निर्देशांक हैं जो मुझे CLLocation प्रबंधक के साथ प्राप्त होते हैं।