Ich bin der Entwicklung einer iPhone App, und ich brauche Hilfe bei diesem Fall:Suche Abstand von Standort Route in Google Maps SDK
ich überprüfen müssen, wenn der Benutzer verlassen Google Maps Route (GMSPolyline), und wenn Abstand vom Benutzerstandort zum nächsten Punkt der Route ist mehr als 40 Meter - ich muss Route neu erstellen.
Ich kann nicht den richtigen Algorithmus finden, um festzustellen, ob die Entfernung zwischen Benutzer und Route mehr als 40 Meter beträgt.
Ich habe versucht, diese Methode zu verwenden Projektion der Benutzerposition zu finden (zu CGPoint von CGPointMake umgewandelt) auf dem Weg:
+ (CGPoint)projectionOfPoint:(CGPoint)origPoint toSegmentP1:(CGPoint)p1 p2:(CGPoint)p2 {
// for case line is parallel to x axis
if (p2.y == p1.y) {
return CGPointMake(origPoint.x, p1.y);
// for case line is parallel to y axis
} else if (p2.x == p1.x) {
return CGPointMake(p1.x, origPoint.y);
}
// line from segment
CGFloat kKoefLine1 = (p2.x - p1.x)/(p2.y - p1.y);
CGFloat bKoefLine1 = p1.y - kKoefLine1*p1.x;
// perpendicular line
CGFloat kKoefLine2 = -1/kKoefLine1;
CGFloat bKoefLine2 = origPoint.y - kKoefLine2*origPoint.x;
// cross point
CGFloat krossX = (bKoefLine2 - bKoefLine1)/(kKoefLine1 - kKoefLine2);
CGFloat krossY = kKoefLine2*krossX + bKoefLine2;
return CGPointMake(krossX, krossY);}
Dann berechne ich Abstand von zurück Vorsprung (umgerechnet auf CLLocation) und Benutzer-Standort , aber es funktioniert nicht.
P.S .: Ich wäre dankbar, wenn die Lösung auf swift geschrieben würde.
Gott segne dich! Es funktioniert perfekt und es ist genau das, was ich brauche. Vielen Dank! –