如何在 IOS 中使用 mapkit 在地图上显示用户
How to show user on Map using mapkit in IOS
如何在 IOS 中使用 mapkit 在地图上显示用户。此代码仅在地图上显示印度而不是定义坐标。
mapView.delegate = self;
mapView.showsUserLocation = YES;
objLocationManager = [[CLLocationManager alloc] init];
objLocationManager.distanceFilter = kCLDistanceFilterNone;
objLocationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
objLocationManager.delegate = self;
#ifdef __IPHONE_8_0
if(IS_OS_8_OR_LATER) {
// Use one or the other, not both. Depending on what you put in info.plist
//[objLocationManager requestWhenInUseAuthorization];
[objLocationManager requestAlwaysAuthorization];
}
#endif
[objLocationManager startUpdatingLocation];
mapView.showsUserLocation = YES;
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
mapView.delegate=self;
您正在启动位置更新,您将通过它获取您当前的位置,但是 MKMapview 如何知道位置更改?
要让 MKMap 视图采用位置更改,您必须将委托设置为 MKMapview,这部分您已经完成但您忘记了委托方法。
- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)aUserLocation {}
此委托方法会将您的当前位置发送到您所需要的 mapview。
如果您想使用默认的委托方法,那么您必须使用从 CLLocation 更新方法接收到的当前坐标在地图上放置标记。
如果您打算使用默认委托方法,那么请不要忘记确认 MKMapViewDelegate。
让我们知道如果工作,我相信它会...祝你有美好的一天
步骤:1 -导入
import MapKit
import CoreLocation
步骤:2 - 添加代表
MKMapViewDelegate,CLLocationManagerDelegate
步骤:3 - 声明
@IBOutlet var mapView: MKMapView!
var locationManager = CLLocationManager()
var myLocation = CLLocation()
步骤:4 - ViewDidLoad 内部
locationManager.requestAlwaysAuthorization()
if CLLocationManager.locationServicesEnabled()
{
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
}
//MARK: - MapView and Location Manager -
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
self.myLocation = locations.last!
print("NewLocation \(locations[0].coordinate.latitude) \(locations[0].coordinate.longitude)")
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
let annotationIdentifier = "AnnotationIdentifier"
var annotationView: MKAnnotationView?
if let dequeuedAnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier) {
annotationView = dequeuedAnnotationView
annotationView?.annotation = annotation
}
else
{
let av = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
av.rightCalloutAccessoryView = UIButton(type: .roundedRect)
annotationView = av
}
if let annotationView = annotationView
{
annotationView.canShowCallout = true
annotationView.image = UIImage(named: "Location")
}
return annotationView
}
self.mapView.showsUserLocation = true
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(address!) { (placemarks, error) in
guard
let placemarks = placemarks,
let location = placemarks.first?.location
else
{
return
}
let newPin = MKPointAnnotation()
let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
self.mapView.setRegion(region, animated: true)
newPin.title = address
newPin.coordinate = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
self.mapView.addAnnotation(newPin)
}
@IBAction func btnDirection(_ sender: Any)
{
let address = self.dictEventDetails.object(forKey: "address") as? String
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(address!) { (placemarks, error) in
guard
let placemarks = placemarks,
let location = placemarks.first?.location
else
{
return
}
let coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, addressDictionary:nil))
mapItem.name = address
mapItem.openInMaps(launchOptions:nil)
}
}
如何在 IOS 中使用 mapkit 在地图上显示用户。此代码仅在地图上显示印度而不是定义坐标。
mapView.delegate = self;
mapView.showsUserLocation = YES;
objLocationManager = [[CLLocationManager alloc] init];
objLocationManager.distanceFilter = kCLDistanceFilterNone;
objLocationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
objLocationManager.delegate = self;
#ifdef __IPHONE_8_0
if(IS_OS_8_OR_LATER) {
// Use one or the other, not both. Depending on what you put in info.plist
//[objLocationManager requestWhenInUseAuthorization];
[objLocationManager requestAlwaysAuthorization];
}
#endif
[objLocationManager startUpdatingLocation];
mapView.showsUserLocation = YES;
[mapView setMapType:MKMapTypeStandard];
[mapView setZoomEnabled:YES];
[mapView setScrollEnabled:YES];
mapView.delegate=self;
您正在启动位置更新,您将通过它获取您当前的位置,但是 MKMapview 如何知道位置更改? 要让 MKMap 视图采用位置更改,您必须将委托设置为 MKMapview,这部分您已经完成但您忘记了委托方法。
- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)aUserLocation {}
此委托方法会将您的当前位置发送到您所需要的 mapview。 如果您想使用默认的委托方法,那么您必须使用从 CLLocation 更新方法接收到的当前坐标在地图上放置标记。
如果您打算使用默认委托方法,那么请不要忘记确认 MKMapViewDelegate。
让我们知道如果工作,我相信它会...祝你有美好的一天
步骤:1 -导入
import MapKit
import CoreLocation
步骤:2 - 添加代表
MKMapViewDelegate,CLLocationManagerDelegate
步骤:3 - 声明
@IBOutlet var mapView: MKMapView!
var locationManager = CLLocationManager()
var myLocation = CLLocation()
步骤:4 - ViewDidLoad 内部
locationManager.requestAlwaysAuthorization()
if CLLocationManager.locationServicesEnabled()
{
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
}
//MARK: - MapView and Location Manager -
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
self.myLocation = locations.last!
print("NewLocation \(locations[0].coordinate.latitude) \(locations[0].coordinate.longitude)")
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
let annotationIdentifier = "AnnotationIdentifier"
var annotationView: MKAnnotationView?
if let dequeuedAnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier) {
annotationView = dequeuedAnnotationView
annotationView?.annotation = annotation
}
else
{
let av = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
av.rightCalloutAccessoryView = UIButton(type: .roundedRect)
annotationView = av
}
if let annotationView = annotationView
{
annotationView.canShowCallout = true
annotationView.image = UIImage(named: "Location")
}
return annotationView
}
self.mapView.showsUserLocation = true
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(address!) { (placemarks, error) in
guard
let placemarks = placemarks,
let location = placemarks.first?.location
else
{
return
}
let newPin = MKPointAnnotation()
let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
self.mapView.setRegion(region, animated: true)
newPin.title = address
newPin.coordinate = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
self.mapView.addAnnotation(newPin)
}
@IBAction func btnDirection(_ sender: Any)
{
let address = self.dictEventDetails.object(forKey: "address") as? String
let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(address!) { (placemarks, error) in
guard
let placemarks = placemarks,
let location = placemarks.first?.location
else
{
return
}
let coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, addressDictionary:nil))
mapItem.name = address
mapItem.openInMaps(launchOptions:nil)
}
}