Shi*_* MC 12 google-maps ios google-maps-sdk-ios gmsmapview swift
我在特定位置显示标记,并在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)
}
}
Run Code Online (Sandbox Code Playgroud)
Shi*_* MC 14
// 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)
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
Swift 4更新:
首先,您需要遵循GMSMapViewDelegate:
extension MapsVC: GMSMapViewDelegate{
Run Code Online (Sandbox Code Playgroud)
然后将您的VC设置为viewDidLoad()中viewMap的委托。
viewMap.delegate = self
Run Code Online (Sandbox Code Playgroud)
之后,您只需要使用以下方法从相机位置获取更新并将其设置为标记的新位置:
func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
destinationMarker.position = position.target
print(destinationMarker.position)
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这里有一个技巧可以帮助你。在这里不要使用 GMSMarker,而是在您的 Google MapView 上方放置一个指向中心的图像。
您可以使用以下命令轻松找到地图中心的坐标:
double latitude = mapView.camera.target.latitude;
double longitude = mapView.camera.target.longitude;
Run Code Online (Sandbox Code Playgroud)
或这个
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);
Run Code Online (Sandbox Code Playgroud)
现在您可以使用谷歌的地理编码 API 获取位置地址。
这是参考:https : //developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_geocoder
您可以在调用此委托方法时刷新地址:
- (void) mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
19808 次 |
| 最近记录: |