Tôi có MKMapView
có số UISearchBar
ở trên cùng và tôi muốn người dùng có thể nhập địa chỉ và tìm địa chỉ đó và thả ghim vào địa chỉ đó. Những gì tôi không biết là làm thế nào để biến chuỗi địa chỉ thành kinh độ và vĩ độ, vì vậy tôi có thể làm cho một đối tượng CLLocation
. Có ai biết làm thế nào tôi có thể làm điều này?Cách nhận toạ độ vĩ độ và vị trí dài từ chuỗi địa chỉ
7
A
Trả lời
16
Bạn có thể tìm thấy câu trả lời trong câu hỏi này.
iOS - MKMapView place annotation by using address instead of lat/long Theo người dùng Romes.
NSString *location = @"some address, state, and zip";
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:location
completionHandler:^(NSArray* placemarks, NSError* error){
if (placemarks && placemarks.count > 0) {
CLPlacemark *topResult = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
MKCoordinateRegion region = self.mapView.region;
region.center = placemark.region.center;
region.span.longitudeDelta /= 8.0;
region.span.latitudeDelta /= 8.0;
[self.mapView setRegion:region animated:YES];
[self.mapView addAnnotation:placemark];
}
}
];
Một giải pháp rất đơn giản. Nhưng chỉ áp dụng trên iOS5.1 trở lên.
1
Đối swift2
var location: String = "some address, state, and zip"
var geocoder: CLGeocoder = CLGeocoder()
geocoder.geocodeAddressString(location,completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
if (placemarks?.count > 0) {
var topResult: CLPlacemark = (placemarks?[0])!
var placemark: MKPlacemark = MKPlacemark(placemark: topResult)
var region: MKCoordinateRegion = self.mapView.region
region.center = placemark.region.center
region.span.longitudeDelta /= 8.0
region.span.latitudeDelta /= 8.0
self.mapView.setRegion(region, animated: true)
self.mapView.addAnnotation(placemark)
}
})
2
tôi đã sử dụng một cách tiếp cận tương tự như Vijay, nhưng phải điều chỉnh một dòng mã. region.center = placemark.region.center
không hoạt động đối với tôi. Có lẽ mã của tôi giúp một ai đó cũng như:
let location: String = "1 Infinite Loop, CA, USA"
let geocoder: CLGeocoder = CLGeocoder()
geocoder.geocodeAddressString(location,completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
if (placemarks?.count > 0) {
let topResult: CLPlacemark = (placemarks?[0])!
let placemark: MKPlacemark = MKPlacemark(placemark: topResult)
var region: MKCoordinateRegion = self.mapView.region
region.center.latitude = (placemark.location?.coordinate.latitude)!
region.center.longitude = (placemark.location?.coordinate.longitude)!
region.span = MKCoordinateSpanMake(0.5, 0.5)
self.mapView.setRegion(region, animated: true)
self.mapView.addAnnotation(placemark)
}
})
0
func geoCodeUsingAddress(address: NSString) -> CLLocationCoordinate2D {
var latitude: Double = 0
var longitude: Double = 0
let addressstr : NSString = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=\(address)" as NSString
let urlStr = addressstr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let searchURL: NSURL = NSURL(string: urlStr! as String)!
do {
let newdata = try Data(contentsOf: searchURL as URL)
if let responseDictionary = try JSONSerialization.jsonObject(with: newdata, options: []) as? NSDictionary {
print(responseDictionary)
let array = responseDictionary.object(forKey: "results") as! NSArray
let dic = array[0] as! NSDictionary
let locationDic = (dic.object(forKey: "geometry") as! NSDictionary).object(forKey: "location") as! NSDictionary
latitude = locationDic.object(forKey: "lat") as! Double
longitude = locationDic.object(forKey: "lng") as! Double
} catch {
}
}
var center = CLLocationCoordinate2D()
center.latitude = latitude
center.longitude = longitude
return center
}
+0
điều này là dành cho bản đồ google (câu trả lời trong nhanh nhất 3) –
này không giúp đỡ, vì dữ liệu ông lấy có tọa độ cho các địa chỉ. Tôi cần một cách để tìm tọa độ cho địa chỉ, khi người dùng tìm kiếm địa chỉ. –