我真的被困在这里。我只是学习如何在我的视图中显示谷歌地图。现在我想从一个地方到另一个地方做出指示。
到目前为止,这是我的代码:
@IBAction func direction(_ sender: Any) {
Alamofire.request("https://maps.googleapis.com/maps/api/directions/json?" +
"origin=Disneyland&destination=Universal+Studios+Hollywood4&").responseJSON
{response in
if(response.result.isSuccess){
print(response.result.value)
我使用的链接是来自网络的示例。 现在我只想知道如何划线和指导.. 谢谢你的帮助
答案 0 :(得分:1)
我的答案来自我的代码段中的Swift 2
//MARK:- Draw Route Betweeen two points
/**
To draw a route between to cordinates.
- parameter origin: Source marker cordinate
- parameter destination: destination marker cordinate
- parameter zoomCamera: True if you want to zoom the map.
- parameter completionHandler: GMSPolyline - to draw the route.
*/
func drawRoute(origin: CLLocation, destination: CLLocation, zoomCamera : Bool!, completionHandler: (polyline : AnyObject) -> Void)
{
let key : String = Macros.apiKeys.key
let originString: String = "\(origin.coordinate.latitude),\(origin.coordinate.longitude)"
let destinationString: String = "\(destination.coordinate.latitude),\(destination.coordinate.longitude)"
let directionsAPI: String = "https://maps.googleapis.com/maps/api/directions/json?"
let directionsUrlString: String = "\(directionsAPI)&origin=\(originString)&destination=\(destinationString)&key=\(key)"
Alamofire.request(.GET, directionsUrlString, parameters: ["": ""])
.responseJSON { response in
if let JSON = response.result.value
{
self.getRoutesWayPointsBetweenCordinates(origin.coordinate, destination: destination.coordinate, completionHandler:
{ (routesArray) in
if routesArray.count > 0
{
let routesArray : NSArray = JSON.objectForKey("routes") as! NSArray
if routesArray.count > 0
{
let routeDic = routesArray[0]
let routeOverviewPolyline = routeDic .objectForKey("overview_polyline")
let points : String = routeOverviewPolyline! .objectForKey("points") as! String
// Creating Path between source and destination.
self.path = GMSPath(fromEncodedPath: points)
if self.polyline != nil
{
self.polyline.map = nil
}
self.polyline = GMSPolyline(path: self.path)
self.polyline.strokeWidth = 4.5
self.polyline.geodesic = true
self.animateRoute(self.polyline, origin: origin.coordinate, destination: destination.coordinate, pathColor:UIColor.blueColor(), zoomCamera: zoomCamera)
completionHandler(polyline: self.polyline)
}
}else
{
let poly : GMSPolyline = GMSPolyline()
poly.strokeWidth = 5.5
completionHandler(polyline: poly)
}
})
}
}
}
func animateRoute(polyline : GMSPolyline, origin : CLLocationCoordinate2D, destination : CLLocationCoordinate2D, pathColor : UIColor, zoomCamera : Bool!)
{
polyline.strokeColor = pathColor
polyline.map = self.customMapView // Drawing route
let bounds = GMSCoordinateBounds(path: path)
var pad : CGFloat = 40.0
if padding != nil
{
pad = padding
}
if zoomCamera == true
{
zoomCameraWithBounds(bounds, pad: pad)
}
}
/**
It will zoom the camera at specific bounds
- parameter bounds: Bounds around which the camera should zoom
- parameter pad: Padding value from the edges of the window.
*/
func zoomCameraWithBounds(bounds : GMSCoordinateBounds, pad : CGFloat)
{
let camera = self.customMapView.cameraForBounds(bounds, insets:UIEdgeInsetsZero)
self.customMapView.camera = camera!
let zoomCamera = GMSCameraUpdate.fitBounds(bounds, withPadding: pad)
self.customMapView.animateWithCameraUpdate(zoomCamera) // Above lines will update map camera to fit to bounds so that the complete route between source and destination is visible.
}
你所做的是调用drawRoute函数并将源和目标坐标传递给它,它也使用Alamofire进行api命中
重要更改此 Macros.apiKeys.key 使用您的谷歌API密钥并确保其启用了正确的功能
答案 1 :(得分:0)
我将使用objective-c进行解释。我希望你能把它翻译成快速。
您是否已使用此pod 'GoogleMaps'
,对吧?
我认为你已经成功地展示谷歌地图。
GMSMapView *mapView_ = [GMSMapView mapWithFrame:self.mapView.frame camera:camera];
...
所以我会跳过它。
我在这里解释一下显示方向。
NSString *url_string = @"https://maps.googleapis.com/maps/api/directions/json?origin=Disneyland&destination=Universal+Studios+Hollywood4&";
如果您的出发地和目的地是纬度和经度,您可以使用此API:" https://maps.googleapis.com/maps/api/directions/json?origin=%f,%f&destination=%f,%f"
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url_string]];
if (data) {
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSArray *routesArray = [json objectForKey:@"routes"];
NSDictionary *routeDict = [routesArray objectAtIndex:0];
NSDictionary *routeOverviewPolyline = [routeDict objectForKey:@"overview_polyline"];
NSString *points = [routeOverviewPolyline objectForKey:@"points"];
GMSMutablePath *path = [GMSMutablePath path];
path = [GMSPath pathFromEncodedPath:points].mutableCopy;
GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path];
rectangle.map = mapView_;
}