谷歌地图缩放到GPS和标记

15
我想在地图上展示三个地点:GPS(当前位置)、标记1、标记2,但我不确定我的代码是否正确!下面是我的代码:

我正在尝试在地图上显示三个东西:GPS(当前位置)、标记1、标记2,但我不确定我是否做对了!这是我的代码:

 self.startMarker.position = CLLocationCoordinate2D(latitude: self.startLatitude, longitude: self.startLongitude)
 self.startMarker.icon = #imageLiteral(resourceName: "Pin Start")
 self.startMarker.map = self.mapView


 self.endMarker.position = CLLocationCoordinate2D(latitude: self.endLatitude, longitude: self.endLongitude)
 self.endMarker.icon = #imageLiteral(resourceName: "Pin End")
 self.endMarker.map = self.mapView


 let southWest = CLLocationCoordinate2DMake(self.startLatitude,self.startLongitude)
 let northEast = CLLocationCoordinate2DMake(self.endLatitude,self.endLongitude)
 let bounds = GMSCoordinateBounds(coordinate: northEast, coordinate: southWest)
 let camera = self.mapView.camera(for: bounds, insets:.zero)
 self.mapView.camera = camera!

更多代码:

  // MARK: - Google Map

private func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
            if status == CLAuthorizationStatus.authorizedWhenInUse {
                mapView.isMyLocationEnabled = true
            }
          }
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            let newLocation = locations.last
            mapView.camera = GMSCameraPosition.camera(withTarget: newLocation!.coordinate, zoom: 14)
            mapView.isMyLocationEnabled = true
        }
结果如下所示:

结果如下:

it show only the start pin

我需要的是:

enter image description here

编辑过的

if let myLocation = self.mapView.myLocation {

let path = GMSMutablePath()
path.add(myLocation.coordinate)
path.add(self.startMarker.position)
path.add(self.endMarker.position)

let bounds = GMSCoordinateBounds(path: path)
                                        self.mapView.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 40))

}


我已经添加了一个答案,请检查一下,确保调用了 *didUpdateLocations()*。 - Arpit Dongre
4个回答

12

显示所有屏幕边界内的标记:

在这里,我尝试为您提供一个简单的示例,希望这可以帮助您。 使用此方法,您可以在屏幕上显示任意数量的标记。

示例:

let path = GMSMutablePath()
for var i in 0 ..< array.count //Here take your "array" which contains lat and long.
{
    let marker = GMSMarker()
    let lat = Double(array.objectAtIndex(i).valueForKey(lattitude) as! String)
    let long = Double(arrayr.objectAtIndex(i).valueForKey(longitude) as! String)      
    marker.position = CLLocationCoordinate2DMake(lat!,long!)
    path.addCoordinate(marker.position)
    marker.map = self.mapView
}
let bounds = GMSCoordinateBounds(path: path)
self.mapView!.animateWithCameraUpdate(GMSCameraUpdate.fitBounds(bounds, withPadding: 30.0))

请问您能告诉我如何填写 array.count 吗? - iOS.Lover
@Mc.Lover 如果你有多个纬度和经度,并且这些数据是从后端获取的,那么你可以直接使用它们,否则你可以创建自己的数组,将纬度和经度添加到其中并使用该数组。 - Sagar Sukode
谢谢!但还是不行!您能否请检查一下我编辑过的代码? - iOS.Lover

2

您可以尝试下面的代码,这是从ObjC代码转换而来的,以下是includingCoordinate的文档。

let bounds = GMSCoordinateBounds()
bounds.includingCoordinate(self.startMarker.position)
bounds.includingCoordinate(self.endMarker.position)
bounds.includingCoordinate(yourCurrentLocationPosition)
self.mapView.animateWithCameraUpdate(GMSCameraUpdate(fitBounds:bounds, padding:20.0f))

0
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    showMarkers(locations)
    //stop updating location when you find suitable
}

func showMarkers(userLocation: [CLLocation]){

    let location1: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: self.startLatitude, longitude: self.startLongitude)
    let location2: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: self.endLatitude, longitude: self.endLongitude)
    let location3: CLLocationCoordinate2D = userLocation[0].coordinate

    var locationArray = []
    locationArray.append(location1)
    locationArray.append(location2)
    locationArray.append(location3)

    var bounds = GMSCoordinateBounds()
    for location in locationArray
    {
        let latitude = location.valueForKey("latitude")
        let longitude = location.valueForKey("longitude")

        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
        marker.map = self.mapView
        bounds = bounds.includingCoordinate(marker.position)
    }
    let update = GMSCameraUpdate.fitBounds(bounds, withPadding: 100)
    mapView.animateWithCameraUpdate(update)
}

注意:

locationArray 包含三个位置,即 标记1标记2用户位置


0

对于正在寻找 Objective-C 解决方案的人,这可能会有所帮助

//Locations
CLLocationCoordinate2D source = CLLocationCoordinate2DMake(19.2880, 72.1587);
CLLocationCoordinate2D userLocation = CLLocationCoordinate2DMake(19.1780, 72.9577);
CLLocationCoordinate2D destination = CLLocationCoordinate2DMake(19.0760, 72.8777);

//Create a GMSMutablePath
GMSMutablePath *path = [GMSMutablePath new];
[path addCoordinate:source];
[path addCoordinate:userLocation];
[path addCoordinate:destination];

//Create bounds
GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc]initWithPath:path];

//Update the camera position
[mapview animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds]];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接