在iOS的MapKit中显示一张特定的国家/地区地图

问题描述

是否有可能使用Swift在iOS上显示特定国家/地区地图

我已经进行了很多搜索,但是大多数其他答案都建议仅使用缩放效果来绑定地图。

但是我认为这对我来说不是正确的解决方案。

解决方法

是否有可能在iOS中显示特定的国家/地区地图

无论采用哪种编程语言,只有在您的应用具有要显示的每个国家/地区的关联数据(中心和区域)的情况下,这才有可能。 MapKit本身没有这种功能。

这实际上是可能的,如@OlSen的answer所示。

,

请注意,以下坐标只是随机的。

在您的快速代码中的某个地方,您已经声明了MKMapView

@IBOutlet var mapView: MKMapView!

及以后,可能在override func viewDidLoad()中,
您可以设置地图视图的regionspan

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进行注释。

请参阅Apple Docs for MapKit