我在我的iOS Swift項目中使用谷歌地圖。我想繪製地圖上兩個位置之間的路徑(不是直線)。任何想法如何做到這一點?如何在谷歌地圖中的兩個位置之間繪製路線iOS swift
0
A
回答
11
要畫上GoogleMap的兩個標記之間的折線在斯威夫特3.
// Pass your source and destination coordinates in this method.
func getPolylineRoute(from source: CLLocationCoordinate2D, to destination: CLLocationCoordinate2D){
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let url = URL(string: "http://maps.googleapis.com/maps/api/directions/json?origin=\(source.latitude),\(source.longitude)&destination=\(destination.latitude),\(destination.longitude)&sensor=false&mode=driving")!
let task = session.dataTask(with: url, completionHandler: {
(data, response, error) in
if error != nil {
print(error!.localizedDescription)
}else{
do {
if let json : [String:Any] = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any]{
let routes = json["routes"] as? [Any]
let overview_polyline = routes?[0] as?[String:Any]
let polyString = overview_polyline?["points"] as?String
//Call this method to draw path on map
self.showPath(polyStr: polyString!)
}
}catch{
print("error in JSONSerialization")
}
}
})
task.resume()
}
要繪製在地圖上的折線。
func showPath(polyStr :String){
let path = GMSPath(fromEncodedPath: polyStr)
let polyline = GMSPolyline(path: path)
polyline.strokeWidth = 3.0
polyline.map = mapView // Your map view
}
12
顯示多途徑兩者之間的位置在谷歌地圖中SWIFT 3.0相機變焦:
let origin = "\(startLocation.coordinate.latitude),\(startLocation.coordinate.longitude)"
let destination = "\(destinationLocation.coordinate.latitude),\(destinationLocation.coordinate.longitude)"
let urlString = "https://maps.googleapis.com/maps/api/directions/json?origin=\(origin)&destination=\(destination)&mode=driving&key=API_KEY"
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!, completionHandler: {
(data, response, error) in
if(error != nil){
print("error")
}else{
do{
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]
let routes = json["routes"] as! NSArray
self.mapView.clear()
OperationQueue.main.addOperation({
for route in routes
{
let routeOverviewPolyline:NSDictionary = (route as! NSDictionary).value(forKey: "overview_polyline") as! NSDictionary
let points = routeOverviewPolyline.object(forKey: "points")
let path = GMSPath.init(fromEncodedPath: points! as! String)
let polyline = GMSPolyline.init(path: path)
polyline.strokeWidth = 3
let bounds = GMSCoordinateBounds(path: path!)
self.mapView!.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 30.0))
polyline.map = self.mapView
}
})
}catch let error as NSError{
print("error:\(error)")
}
}
}).resume()
+1
Nice..Works like a charm .. –
+0
@sagar sukode 我們可以繪製一條路線嗎? – Akhtar
0
這段代碼將工作適合你。不要忘記改變你的API密鑰和模式(走路,駕駛)。
func draw(src: CLLocationCoordinate2D, dst: CLLocationCoordinate2D){
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let url = URL(string: "https://maps.googleapis.com/maps/api/directions/json?origin=\(src.latitude),\(src.longitude)&destination=\(dst.latitude),\(dst.longitude)&sensor=false&mode=walking&key=**YOUR_KEY**")!
let task = session.dataTask(with: url, completionHandler: {
(data, response, error) in
if error != nil {
print(error!.localizedDescription)
} else {
do {
if let json : [String:Any] = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] {
let preRoutes = json["routes"] as! NSArray
let routes = preRoutes[0] as! NSDictionary
let routeOverviewPolyline:NSDictionary = routes.value(forKey: "overview_polyline") as! NSDictionary
let polyString = routeOverviewPolyline.object(forKey: "points") as! String
DispatchQueue.main.async(execute: {
let path = GMSPath(fromEncodedPath: polyString)
let polyline = GMSPolyline(path: path)
polyline.strokeWidth = 5.0
polyline.strokeColor = UIColor.green
polyline.map = mapView
})
}
} catch {
print("parsing error")
}
}
})
task.resume()
}
0
Create a new Swift file copy this code, that's it call then drawPolygon() method from map view for polygon line.
import GoogleMaps
private struct MapPath : Decodable{
var routes : [Route]?
}
private struct Route : Decodable{
var overview_polyline : OverView?
}
private struct OverView : Decodable {
var points : String?
}
extension GMSMapView {
//MARK:- Call API for polygon points
func drawPolygon(from source: CLLocationCoordinate2D, to destination: CLLocationCoordinate2D){
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
guard let url = URL(string: "https://maps.googleapis.com/maps/api/directions/json?origin=\(source.latitude),\(source.longitude)&destination=\(destination.latitude),\(destination.longitude)&sensor=false&mode=driving") else {
return
}
DispatchQueue.main.async {
session.dataTask(with: url) { (data, response, error) in
guard data != nil else {
return
}
do {
let route = try JSONDecoder().decode(MapPath.self, from: data!)
if let points = route.routes?.first?.overview_polyline?.points {
self.drawPath(with: points)
}
print(route.routes?.first?.overview_polyline?.points)
} catch let error {
print("Failed to draw ",error.localizedDescription)
}
}.resume()
}
}
//MARK:- Draw polygon
private func drawPath(with points : String){
DispatchQueue.main.async {
let path = GMSPath(fromEncodedPath: points)
let polyline = GMSPolyline(path: path)
polyline.strokeWidth = 3.0
polyline.strokeColor = .red
polyline.map = self
}
}
}
相關問題
- 1. 如何在谷歌地圖中的兩個標記之間繪製路線
- 2. 谷歌地圖上兩個位置之間的Android路線
- 3. 如何在iPhone中的兩個位置之間繪製路線?
- 4. 如何在Android中的谷歌地圖中繪製兩個地理位置(不具體)之間的路徑?
- 5. 如何知道谷歌地圖上兩個位置之間的每個路線位置iOS sdk
- 6. 谷歌地圖上兩個座標之間的繪製線
- 7. 如何在CloudMade上的兩個位置之間繪製路線
- 8. 在HTML中的地圖上的兩個位置之間繪製路線
- 9. 如何在兩個位置之間使用兩種不同顏色在谷歌地圖上繪製多段線
- 10. Android谷歌地圖在兩點之間繪製一條路徑
- 11. 如何在兩個位置之間綁定谷歌地圖
- 12. 無法在Android中的兩個位置之間繪製路線
- 13. 兩個輸入之間的谷歌地圖API繪圖線
- 14. 通過另一個位置在兩個位置之間繪製路線圖
- 15. 如何繪製線條之間的谷歌地圖richmarkers
- 16. 在asp.net中繪製點谷歌地圖之間的路徑
- 17. 谷歌地圖Google地圖兩點之間的路線
- 18. 谷歌地圖Android:我如何繪製路線查看路線
- 19. 谷歌地圖上繪製路線
- 20. 在iOS中的GMSMapView無限位置之間繪製路線
- 21. IOS:使用谷歌地圖繪製最佳路線路徑
- 22. 在谷歌靜態地圖上繪製兩個城市之間的路徑
- 23. 在谷歌地圖片段上繪製兩個LatLng之間的路徑
- 24. 如何在谷歌地圖上繪製虛線( - )半徑swift?
- 25. 獲取問題在Android SDK中兩個位置之間的地圖繪製線
- 26. 谷歌地圖中的兩個GeoPoints之間的線在Android?
- 27. 如何放置多個標記,並在谷歌地圖API繪製路線
- 28. 如何在windows phone 8地圖控件中的兩個特定位置之間繪製路線?
- 29. 繪製多個路由谷歌地圖
- 30. 使用jQuery在谷歌地圖上的兩點之間繪製一條線?
我很欣賞很好的回答 –
您的代碼工作般的魅力。非常感謝:) –
如果您使用授權密鑰,url應該是https –