Làm cách nào để tính khoảng cách (tính bằng mét) giữa điểm phía đông và điểm phía tây của bản đồ? Giả sử người dùng thay đổi vị trí di chuyển bản đồ, sau đó tôi bắt chuyển động với mapView: didChangeCameraPosition: phương thức ủy nhiệm, nhưng tôi không biết cách tính khoảng cách.SDK Google Maps iOS: Khoảng cách giữa các điểm phía đông và phía tây trên bản đồ
Trả lời
Dưới đây là một hàm helper mà có thể được sử dụng để tính toán khoảng cách trong mét giữa hai tọa độ:
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:
Nó phụ thuộc những gì bạn có nghĩa là bởi 'đông' và 'tây' của bản đồ, vì bản đồ có thể được xoay hoặc nghiêng. Ngay cả khi nó không nghiêng hoặc xoay, do độ cong của trái đất, chiều rộng của bản đồ sẽ khác nhau về mét giữa phần trên cùng của bản đồ và đáy (cạnh gần xích đạo sẽ rộng hơn mét so với cạnh) mà là xa hơn từ đường xích đạo). Sự khác biệt sẽ ít thu nhỏ hơn trong bạn.
Nhưng giả sử bạn muốn để có được những khoảng cách trong mét giữa phía dưới bên trái và góc dưới bên phải của bản đồ, bạn có thể sử dụng này:
GMSMapView* mapView = ...;
CLLocationCoordinate2D bottomLeftCoord =
mapView.projection.visibleRegion.nearLeft;
CLLocationCoordinate2D bottomRightCoord =
mapView.projection.visibleRegion.nearRight;
double distanceMetres = getDistanceMetresBetweenLocationCoordinates(
bottomLeftCoord, bottomRightCoord);
Nếu bạn muốn nhân hệ số vòng quay/độ nghiêng, bạn có thể quấn vùng khả kiến trong một GMSCoordinateBounds
, và sau đó tính toán khoảng cách giữa các góc đông tây và phía nam nam, ví dụ:
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);
Tuy nhiên, đây có thể rộng hơn so với diện tích thực tế có thể nhìn thấy trên màn hình, như GMSCoordinateBounds
wr aps tứ giác của vùng hiển thị trong hộp giới hạn trục được căn chỉnh.
Một lựa chọn khác sẽ được chọn điểm trên mỗi bên của khung giao diện bản đồ, sau đó sử dụng chiếu giao diện bản đồ để chuyển đổi chúng thành lat/lon, ví dụ:
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);
Heres mã cho việc tìm kiếm khoảng cách giữa hai điểm
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);
}];
SDK Google Maps iOS chứa một bó geometry helpers.
Bạn muốn chức năng này:.
GMSGeometryDistance (CLLocationCoordinate2D from, CLLocationCoordinate2D to) -> CLLocationDistance
"Trả về khoảng cách vòng tròn lớn giữa hai tọa độ, tính bằng mét, trên Trái Đất Đây là khoảng cách ngắn nhất giữa hai tọa độ trên phạm vi cả tọa độ phải. có hiệu lực."
- 1. Google Maps: Hiển thị điểm đánh dấu phía trên markerclusterer
- 2. Tích hợp SDK Google Maps iOS không tải bản đồ
- 3. Cách triển khai iOS Google Maps SDK
- 4. Google Maps iOS SDK - Tìm kiếm địa điểm
- 5. Đặt điểm đánh dấu trên tất cả các điểm đánh dấu khác trong Google Maps SDK iOS
- 6. Bản đồ đóng băng trên iOS 7 với Google Maps SDK 1.4
- 7. Hiển thị cửa sổ bật lên phía trên điểm đánh dấu bản đồ trong MapView
- 8. Google Maps SDK dành cho iOS không hiển thị nội dung bản đồ
- 9. Chế độ ban đêm trên iOS SDK của Google Maps
- 10. Khoảng cách giữa hai vị trí - Google Maps
- 11. Ước lượng khoảng cách Google maps
- 12. Google Maps v3 mã hóa địa lý phía máy chủ
- 13. Xóa điểm đánh dấu khỏi bản đồ google iOS
- 14. Chuyển giữa các bản đồ google và google earth
- 15. Phóng to về phía chuột (ví dụ: các bản đồ của Google)
- 16. Cách tìm khoảng cách giữa hai địa chỉ? (Phía máy chủ Java)
- 17. Cách sử dụng google maps API với nhiều điểm đánh dấu trên cùng một bản đồ
- 18. Hiển thị tuyến đường giữa hai điểm trên bản đồ với bản đồ: ios7
- 19. vẽ đồ thị trên Google Maps
- 20. Google Maps - Cách lấy khoảng cách giữa hai điểm tính bằng mét?
- 21. iOS với Google Maps
- 22. Cách thêm UIView phía trên UITableView trong iOS?
- 23. MKAnnotation - Bản đồ Pin callout bật lên phía sau các chân bản đồ khác
- 24. Làm cách nào để thêm điểm đánh dấu trên các bản đồ của Google Maps dựa trên khoảng cách dọc theo đường?
- 25. Khoảng cách phía trên chế độ xem tùy chỉnh NSMenuItem
- 26. Khoảng cách Google Maps tới bờ biển
- 27. Java - Google maps API - khoảng cách giữa hai địa chỉ
- 28. căn giữa bản đồ google dựa trên các giá trị dài của điểm đánh dấu lat
- 29. Nhiều Điểm đánh dấu trên Bản đồ Google
- 30. Lớp phủ Google Maps
+1 - Vì vậy, vượt qua vị trí NE và vị trí SW và bạn nhận được khoảng cách chéo giữa những ... Nếu bạn muốn xem bản đồ đã thay đổi bao nhiêu, hãy lấy trung tâm cũ và vị trí trung tâm mới từ didChangeCamera –
1) nhưng làm thế nào để tôi có được điểm đông và tây? –
2) nhận được trung tâm cũ và trung tâm mới là không đủ vì zoom có thể đã thay đổi –