我在特定的地方显示标记,并在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)
}
}
答案 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新功能,例如:
除此之外,GitHub中的这篇文章 - GoogleMapsAnimationGlitch 这个SO帖子 - How to smoothly move GMSMarker along coordinates in Objective c 也可能有帮助。