- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用谷歌距离 API ["https://maps.googleapis.com/maps/api/directions/json?origin= "+start.latitude + ","+ start.longitude +"&destination="+ end.latitude +","+ end.longitude + "&alternatives=false"+"&mode=driving&key="+ key;] 获取从起始位置到结束位置的路线。
我正在使用以下代码在起点和终点之间绘制路线
func drawPath()
{
if polylines != nil {
polylines?.map = nil
polylines = nil
}
if animationPolyline != nil {
self.animationIndex = 0
self.animationPath = GMSMutablePath()
self.animationPolyline.map = nil
if self.timer != nil {
self.timer.invalidate()
}
}
setupStartRideLocationMarkup(CLLocationCoordinate2D(latitude: (currentLocation?.coordinate.latitude)!, longitude: (currentLocation?.coordinate.longitude)!))
if currentLocation != nil && destinationLocation != nil {
let origin = "\((currentLocation?.coordinate.latitude)!),\((currentLocation?.coordinate.longitude)!)"
let destination = "\((destinationLocation?.latitude)!),\((destinationLocation?.longitude)!)"
let url = "https://maps.googleapis.com/maps/api/directions/json?origin=\(origin)&destination=\(destination)&mode=driving&key=MY_API_KEY"
Alamofire.request(url).responseJSON { response in
let json = JSON(data: response.data!)
self.jsonRoute = json
let routes = json["routes"].arrayValue
for route in routes
{
let routeOverviewPolyline = route["overview_polyline"].dictionary
let points = routeOverviewPolyline?["points"]?.stringValue
self.path = GMSPath.init(fromEncodedPath: points!)!
self.polylines = GMSPolyline.init(path: self.path)
self.polylines?.geodesic = true
self.polylines?.strokeWidth = 5
self.polylines?.strokeColor = UIColor.black
self.polylines?.map = self.mapView
}
self.shouldDrawPathToStartLocation()
self.shouldDrawPathToEndLocation()
if routes.count > 0 {
self.startAnimatingMap()
}
}
}
}
如您所见,我正在使用来自 api 的编码路径初始化路径。现在我想从整个路径中删除经过的 GMSPolyline 我该怎么做?我目前的想法是它将来自 didUpdateLocations 这是我的 didUpdateLocations 方法代码
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
currentLocation = locations.last!
let camera = GMSCameraPosition.camera(withLatitude: (currentLocation?.coordinate.latitude)!,
longitude: (currentLocation?.coordinate.longitude)!,
zoom: zoomLevel)
if (mapView?.isHidden)! {
mapView?.isHidden = false
mapView?.camera = camera
} else {
mapView?.animate(to: camera)
}
updatePolyLineIfRequired()
}
在 updatePolyLineIfRequired 中,我想删除移动的多边形线
func updatePolyLineIfRequired(){
if GMSGeometryIsLocationOnPath((currentLocation?.coordinate)!, path, true) {
if startPolyline != nil {
startPolyline?.map = nil
startPolyline = nil
}
}
}
我想实现像 Uber 或 Careem 这样的解决方案,其中移动绘制的 GMSPolyline 被删除,直到用户当前位置。
提前致谢P.S 我正在使用 Alamofire SwiftyJSON
最佳答案
有两种解决方案:-
调用 Directions api 将无用,除非您对 Direction api 的请求限制较少。
用于从路径中删除行进坐标:-
//Call this function in didUpdateLocations
func updateTravelledPath(currentLoc: CLLocationCoordinate2D){
var index = 0
for i in 0..<self.path.count(){
let pathLat = Double(self.path.coordinate(at: i).latitude).rounded(toPlaces: 3)
let pathLong = Double(self.path.coordinate(at: i).longitude).rounded(toPlaces: 3)
let currentLaenter code heret = Double(currentLoc.latitude).rounded(toPlaces: 3)
let currentLong = Double(currentLoc.longitude).rounded(toPlaces: 3)
if currentLat == pathLat && currentLong == pathLong{
index = Int(i)
break //Breaking the loop when the index found
}
}
//Creating new path from the current location to the destination
let newPath = GMSMutablePath()
for i in index..<Int(self.path.count()){
newPath.add(self.path.coordinate(at: UInt(i)))
}
self.path = newPath
self.polyline.map = nil
self.polyline = GMSPolyline(path: self.path)
self.polyline.strokeColor = UIColor.darkGray
self.polyline.strokeWidth = 2.0
self.polyline.map = self.mapView
}
纬度和经度是四舍五入的,这样如果用户在旅行地点附近。根据需要使用以下扩展来舍入最多 3 位小数或更多位。
extension Double {
// Rounds the double to decimal places value
func rounded(toPlaces places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
关于ios - 从 GMSMapView Swift iOS 上的 GMSPolyline 移除行进路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48865621/
当我创建新的 GMSMapView 时,它不会加载。我的项目中有其他 GMSMapViews 可以正确加载。我正在使用 Storyboard编辑器将 GMSMapView 的自定义子类分配给 UIVi
我正在开发一个不允许手动与 map 交互的应用程序。更改 map 的唯一方法是当用户朝一个方向移动时。因此,如果用户旋转手机会旋转,因此基于 iPhone 中的指南针, map 应自动旋转,而不是用户
我面临着一个非常不寻常的问题。位置管理器正在中断 GMSMapView 函数。当我评论我的位置管理器初始化代码时,GMSCamera 移动完美。但是当我取消注释位置管理器代码时,此代码不会移动相机位置
我正在添加我的 map View mapView_ = [[GMSMapView alloc]initWithFrame:_viewMapContainer.bounds]; mapView_.myL
我正在使用以下代码在自定义 UIView 中创建 GMSMapView 实例作为 subview GMSCameraPosition *camera = [GMSCameraPosition came
我在 XCode 上设计了以下布局: 布局按钮(取消、注册)固定在底部布局指南中。最上面是 3 个大小相同的 UIView,每个之间的垂直间距为 1px。 剩下的空间被mapView占用,它是一个UI
我正在尝试调用键盘在 UITextField 上键入。这就是我添加 UITextField 的方式: @implementation SOViewController{ GMSMapView *
在我的应用程序中,我正在使用 GMSMapView,我想更改跟踪模式。在 iOS MapKit 中,我可以将跟踪模式更改为 MKUserTrackingModeFollowWithHeading,但不
我需要在特定 View 中使用 GMSMapView。这里 viewForGMSMapView 是我的 UIView。我使用了以下代码。 let camera = GMSCameraPosition
代码 import UIKit import GooglePlaces import GoogleMaps class FirstViewController: UIViewContr
我正在添加自定义按钮并添加操作 CLLocationCoordinate2D target=CLLocationCoordinate2DMake(currentLocation.coordinate.
我尝试了所有google maps提供的动画方法。但是我无法为 map View 的缩放级别设置动画。我试过 mapView.animateToZoom(15)。还有 UIView.animateWi
我被卡住了。我希望有人能给我正确的输入! 我正在使用 GMSMapview 显示兴趣点 (GMSMarkers)。 目前我只是使用此代码(DEFAULT_ZOOM 是 15.f)将 map 置于当前
我的代码如下: /* Map */ mapView = GMSMapView() mapView.delegate = self mapView.mapType = .
我想知道是否可以将我的位置按钮图像从 GMSMapView 更改为自定义图像。 最佳答案 1) 知道框架位置按钮: for (UIView *object in self.mapView.sub
我需要在 GMSMapView 停止移动时获得回调。 我已经阅读了文档并且找到了“mapView:idleAtCameraPosition:”方法,但这并不是我想要的。这个方法被调用的太频繁了,不仅仅
我必须为我的 iPhone 项目使用 Google map ,我正在使用 GMSPolygon 绘制多边形,但我如何填充 map 上除多边形内部以外的所有地方。就像下图一样。 谢谢。 最佳答案 我试过
我正在使用谷歌地图使用 swift 请求 iOS 应用程序。我在 Storyboard中添加了 map (GMSMapView)并尝试像这样罗盘按钮 mapView.settings.compassB
我目前在我的 swift 应用程序中使用 GMSMapView,并且能源影响从未减少(如 CPU 使用率或内存使用率)。 有人遇到过这个问题吗? 使用谷歌地图 2.0.1 最佳答案 我自己找到了答案。
我目前在我的 View Controller 中有一个 UIView,我已在 Interface Builder 中将其更改为 GMSMapView,但没有任何显示,如下图所示: 这是我使用的代码
我是一名优秀的程序员,十分优秀!