如何移动标记以及在iOS中移动Google Map?

时间:2016-06-23 12:53:09

标签: ios swift google-maps google-maps-sdk-ios gmsmapview

我在特定的地方显示标记,并在Google地图上的地址标签中显示当前地址。

现在,我想通过移动Google地图来更改位置,但问题是当我移动地图时,我应该同时移动标记和地图,我应该显示该位置的地址地址标签。

我该怎么做?

我试过了:

let destinationMarker = GMSMarker(position: self.destinationLocation.coordinate)

let image = UIImage(named:"sourcemarker")
destinationMarker.icon = image
destinationMarker.draggable = true
destinationMarker.map = self.viewMap
//viewMap.selectedMarker = destinationMarker
destinationMarker.title = "hi"
destinationMarker.userData = "changedestination"

func mapView(mapView: GMSMapView, didEndDraggingMarker marker: GMSMarker)
{
    if marker.userData as! String == "changedestination"
    {
        self.destinationLocation = CLLocation(latitude: marker.position.latitude, longitude: marker.position.longitude)
        self.destinationCoordinate = self.destinationLocation.coordinate
        //getAddressFromLatLong(destinationCoordinate)
    }
}

3 个答案:

答案 0 :(得分:11)

// UpdteLocationCoordinate
    func updateLocationoordinates(coordinates:CLLocationCoordinate2D) {
        if destinationMarker == nil
        {
            destinationMarker = GMSMarker()
            destinationMarker.position = coordinates
            let image = UIImage(named:"destinationmarker")
            destinationMarker.icon = image
            destinationMarker.map = viewMap
            destinationMarker.appearAnimation = kGMSMarkerAnimationPop
        }
        else
        {
            CATransaction.begin()
            CATransaction.setAnimationDuration(1.0)
            destinationMarker.position =  coordinates
            CATransaction.commit()
        }
    }

    // Camera change Position this methods will call every time
    func mapView(mapView: GMSMapView, didChangeCameraPosition position: GMSCameraPosition) {
        let destinationLocation = CLLocation()
        if self.mapGesture == true
        {
            destinationLocation = CLLocation(latitude: position.target.latitude,  longitude: position.target.longitude)
            destinationCoordinate = destinationLocation.coordinate
            updateLocationoordinates(destinationCoordinate)
        }
    }

答案 1 :(得分:3)

有一个技巧可以帮助你在这里。不要在这里使用GMSMarker,而是在Google MapView上放置一个指向中心的图像。

您可以使用以下方法轻松找到地图中心的坐标:

double latitude = mapView.camera.target.latitude;
double longitude = mapView.camera.target.longitude;

或者这个

GMSCoordinateBounds *bounds = nil;
bounds = [[GMSCoordinateBounds alloc] initWithRegion: visibleRegion];

CLLocationCoordinate2D centre = CLLocationCoordinate2DMake(
                                                           (bounds.southWest.latitude + bounds.northEast.latitude) / 2,
                                                           (bounds.southWest.longitude + bounds.northEast.longitude) / 2);

现在,您可以通过谷歌使用地理编码API获取位置地址。

以下是参考: https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_geocoder

调用此委托方法时可以刷新地址:

- (void) mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position 

希望这有帮助。

答案 2 :(得分:1)

根据在地图SDK for IOS中制作的Release Notes,更改标记位置将使标记动画到新位置。

要解决此问题,您可以使用Release Version 1.5中所述的GMSMarker新功能,例如:

  • 可以使用draggable属性使标记可拖动,并且已将新的拖动委托方法添加到GMSMapViewDelegate。 (问题4975)
  • 添加了GMSMarkerLayer,GMSMarker的自定义CALayer子类,支持标记位置和旋转的动画。 (问题4951,问题5743)

除此之外,GitHub中的这篇文章 - GoogleMapsAnimationGlitch 这个SO帖子 - How to smoothly move GMSMarker along coordinates in Objective c 也可能有帮助。