问题描述
是否有可能使用Swift在iOS上显示特定国家/地区地图?
我已经进行了很多搜索,但是大多数其他答案都建议仅使用缩放效果来绑定地图。
但是我认为这对我来说不是正确的解决方案。
解决方法
是否有可能在iOS中显示特定的国家/地区地图
无论采用哪种编程语言,只有在您的应用具有要显示的每个国家/地区的关联数据(中心和区域)的情况下,这才有可能。 MapKit本身没有这种功能。
这实际上是可能的,如@OlSen的answer所示。
,请注意,以下坐标只是随机的。
在您的快速代码中的某个地方,您已经声明了MKMapView
@IBOutlet var mapView: MKMapView!
及以后,可能在override func viewDidLoad()
中,
您可以设置地图视图的region
和span
。
var location: CLLocationCoordinate2D!
var region: MKCoordinateRegion!
var span: MKCoordinateSpan!
mapView = MKMapView() // allocating a mapview,so setting the region makes sens.
location = CLLocationCoordinate2DMake(2.0,1.0)
span = MKCoordinateSpan(latitudeDelta: 0.2,longitudeDelta: 0.2)
region = MKCoordinateRegion.init(center: location,span: span)
mapView.setRegion(region,animated: true)
请记住,地图并没有列出可供选择的国家和边界,但是有些服务可以帮助您通过地址或国家/地区名称查找位置坐标。
通过国家/地区名称查找地图区域的方法之一。
抱歉,在Objective-C中。
if (@available(iOS 13.0,*)) {
MKPlacemark *placemark = nil;
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] initWithNaturalLanguageQuery:@"USA"];
request.resultTypes = MKLocalSearchResultTypeAddress;
MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse *response,NSError *error) {
if (!error) {
[self.mapView setRegion:response.boundingRegion];
//or do something with first result..
//if ([response mapItems].count>0) {
// MKPlacemark *placemark = [response mapItems].firstObject.placemark;
// MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
// and so on..
//}
}
}];
}
或迅速
if #available(iOS 13.0,*) {
let searchRequest = MKLocalSearch.Request()
searchRequest.naturalLanguageQuery = "USA"
let search = MKLocalSearch(request: searchRequest)
search.start { response,error in
guard let response = response else {
print("Error: \(error?.localizedDescription ?? "Unknown error").")
return
}
self.mapView.setRegion(response.boundingRegion,animated: true)
}
}
,
我同意大多数答案,因为MapKit不支持此功能。
如果您还没有看过https://godbolt.org/z/Kabq8Y来更好地了解如何以一种简单的方式利用自己的数据。
不过,您可以随意使用符合MKOverlay协议的自己的custon形状对MapKit进行注释。