Come si calcola la distanza (in metri) tra il punto est e il punto ovest della mappa? Supponiamo che l'utente abbia cambiato la posizione scorrendo la mappa, quindi prendo il movimento con mapView: didChangeCameraPosition: metodo delegato, ma non so come calcolare la distanza.Google Maps SDK per iOS: distanza tra i punti est e ovest sulla mappa
risposta
Ecco una funzione di supporto che può essere usato per calcolare la distanza in metri tra due coordinate:
double getDistanceMetresBetweenLocationCoordinates(
CLLocationCoordinate2D coord1,
CLLocationCoordinate2D coord2)
{
CLLocation* location1 =
[[CLLocation alloc]
initWithLatitude: coord1.latitude
longitude: coord1.longitude];
CLLocation* location2 =
[[CLLocation alloc]
initWithLatitude: coord2.latitude
longitude: coord2.longitude];
return [location1 distanceFromLocation: location2];
}
UPDATE:
Dipende da cosa si intende per 'est' e 'west' della mappa, poiché la mappa può essere ruotata o inclinata. Anche se non è inclinato o ruotato, a causa della curvatura della terra, la larghezza della mappa sarà diversa in metri tra la parte superiore della mappa e il fondo (il bordo più vicino all'equatore sarà più largo in metri rispetto al bordo che è più lontano dall'equatore). La differenza sarà tanto maggiore quanto più aumenterai lo zoom.
Ma supponendo che voleva ottenere la distanza in metri tra il fondo a sinistra e angoli in basso a destra della mappa, è possibile utilizzare questo:
GMSMapView* mapView = ...;
CLLocationCoordinate2D bottomLeftCoord =
mapView.projection.visibleRegion.nearLeft;
CLLocationCoordinate2D bottomRightCoord =
mapView.projection.visibleRegion.nearRight;
double distanceMetres = getDistanceMetresBetweenLocationCoordinates(
bottomLeftCoord, bottomRightCoord);
Se si vuole fattore in rotazione/inclinazione, si potrebbe avvolgere la regione visibile in un GMSCoordinateBounds
, e quindi calcolare la distanza tra gli angoli ovest sud est e sud, per esempio:
GMSMapView* mapView = ...;
GMSCoordinateBounds* bounds = [[GMSCoordinateBounds alloc]
initWithRegion: mapView.projection.visibleRegion];
CLLocationCoordinate2D southWest = bounds.southWest;
CLLocationCoordinate2D southEast = CLLocationCoordinate2DMake(
bounds.southWest.latitude, bounds.northEast.longitude);
double distanceMetres = getDistanceMetresBetweenLocationCoordinates(
southWest, southEast);
Tuttavia, questo potrebbe essere più larga della superficie effettivamente visibile sullo schermo, come il GMSCoordinateBounds
wr aps il quadrilatero della regione visibile in un riquadro di delimitazione allineato all'asse.
Un'altra possibilità sarebbe quella di scegliere punti su ciascun lato del telaio della vista mappa, quindi utilizzare la proiezione della mappa per convertirli in lat/lon, ad esempio:
GMSMapView* mapView = ...;
CGPoint middleLeftPoint = CGPointMake(
0, mapView.frame.size.height/2);
CGPoint middleRightPoint = CGPointMake(
mapView.frame.size.width, mapView.frame.size.height/2);
CLLocationCoordinate2D middleLeftCoord =
[mapView.projection coordinateForPoint: middleLeftPoint];
CLLocationCoordinate2D middleRightCoord =
[mapView.projection coordinateForPoint: middleRightPoint];
double distanceMetres = getDistanceMetresBetweenLocationCoordinates(
middleLeftCoord, middleRightCoord);
Ecco il codice per reperire distanza tra due punti
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
NSString *urlString [email protected]"https://maps.googleapis.com/maps/api/directions/json";
NSDictionary *dictParameters = @{@"origin" : [NSString stringWithFormat:@"%@",_sourceAdd], @"destination" : [NSString stringWithFormat:@"%@",_destinationAdd], @"mode" : @"driving", @"key":@"AIzaSyD9cWTQkAxemELVXTNUCALOmzlDv5b9Dhg"};
[manager GET:urlString parameters:dictParameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary *arr=responseObject[@"routes"][0][@"legs"];
NSMutableArray *loc=[[NSMutableArray alloc]init];
NSString *dis,*dur;
loc=[[arr valueForKey:@"distance"]valueForKey:@"text"];
dis=loc[0];
loc=[[arr valueForKey:@"duration"]valueForKey:@"text"];
dur=loc[0];
UIAlertView *av=[[UIAlertView alloc]initWithTitle:@"Route Info" message:[NSString stringWithFormat:@"Distance:%@ \nDuration:%@",dis,dur] delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
[av show];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
L'SDK iOS di Google Maps contiene un numero di geometry helpers.
si desidera che questo funzioni:.
GMSGeometryDistance (CLLocationCoordinate2D from, CLLocationCoordinate2D to) -> CLLocationDistance
"restituisce la distanza ortodromica tra due coordinate, in metri, sulla Terra Questa è la distanza più breve tra le due coordinate sulla sfera Entrambe le coordinate devono essere. valido."
- 1. iOS google maps posizionamento sdk GMSMarker
- 2. Mappa Blocca su iOS 7 con Google Maps 1.4 SDK
- 3. Scorrimento uniforme su Google Maps SDK per iOS
- 4. Distanza tra due posizioni - Google Maps
- 5. Tracciare percorsi tra più punti sulla mappa
- 6. Approssimazione della distanza di Google Maps
- 7. SDK iOS di Google Maps - Aggiungi UIView/UIButton su GMSMapView
- 8. Google Maps calcola la distanza errata?
- 9. Calcola la distanza tra i punti nelle tabelle di fusione
- 10. Google Maps iOS SDK Integrazione non caricamento mappe
- 11. Modalità notte SDK iOS di Google Maps
- 12. Distanza diversa tra due punti su iOS e Android
- 13. I pedaggi per Google Maps?
- 14. Come adattare i limiti per l'array di coordinate con google maps sdk per iOS?
- 15. Rimuovi i marker da google maps iOS
- 16. Indicatore trascinabile con Google Maps SDK per iOS
- 17. Google Maps SDK per iOS non visualizza il contenuto della mappa
- 18. SDK iOS di Google Maps - Ricerca di posti
- 19. Distanza più breve tra i punti su una mappa con avvolgimento toroidale (avvolgimento x e y)?
- 20. iOS 8 Google Maps SDK myLocation icon bubble glitch grafico
- 21. Cambia zoom videocamera basato su Radius Google Maps iOS SDK
- 22. SDK iOS di Google Maps, Impossibile ascoltare GMSMarker tocca l'evento
- 23. API di Google Maps - Ottieni punti lungo il percorso tra lat/long
- 24. Sfarfallio di Google Maps in iOS
- 25. Ottieni la distanza tra due punti geografici
- 26. zoom per adattarsi a tutti i marker sulla mappa google maps v2
- 27. Meteor.js e Google Maps
- 28. MongoDB stampa la distanza tra due punti
- 29. Google Maps iOS SDK incidente occasionale quando si distrugge GMSMapView
- 30. Punto posizione su Google Maps iOS SDK visualizzato come quadrato
+1 - Quindi passa la posizione NE e la posizione SW e ottieni la distanza diagonale tra quelle ... Se vuoi vedere quanto è cambiata la mappa, prendi il vecchio centro e la nuova posizione centrale da didChangeCamera –
1) ma come faccio ad ottenere i punti est e ovest? –
2) ottenere il vecchio centro e il nuovo centro non è sufficiente dato che lo zoom potrebbe essere cambiato –