Iphone MKMapView使用国家名称在国家/地区上放置pin

Iphone MKMapView使用国家名称在国家/地区上放置pin,iphone,objective-c,ios,ipad,mkmapview,Iphone,Objective C,Ios,Ipad,Mkmapview,我有一组国家名称,希望将它们作为地名放在MKMapView上。例如,如果法国在countryName数组中,我希望在法国的中心放置一个pin 是否有一种方法可以做到这一点,而不必为每个国家存储lat/long 我想让这项工作离线,只需要在其最基本的地图和完全缩小的世界形象 我相信MKMapView保存了一些基本的地理信息,所以在不使用GLGeocoder和internet连接的情况下,是否可以实现上述功能?尝试此功能以获取地址的纬度和经度:-如果您只使用国家名称,则我们可以获取该国家的中心lat

我有一组国家名称,希望将它们作为地名放在MKMapView上。例如,如果法国在countryName数组中,我希望在法国的中心放置一个pin

是否有一种方法可以做到这一点,而不必为每个国家存储lat/long

我想让这项工作离线,只需要在其最基本的地图和完全缩小的世界形象


我相信MKMapView保存了一些基本的地理信息,所以在不使用GLGeocoder和internet连接的情况下,是否可以实现上述功能?

尝试此功能以获取地址的纬度和经度:-如果您只使用国家名称,则我们可以获取该国家的中心lat nag long

-(CLLocationCoordinate2D) getLocationFromAddressString:(NSString*) countryStr {
    NSString *urlAddressStr = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", 
                           [countryStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSString *locationStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlAddressStr]];
    NSArray *items = [locationStr componentsSeparatedByString:@","];

    double lat = 0.0;
    double long = 0.0;

    if([items count] >= 4 && [[items objectAtIndex:0] isEqualToString:@"200"])
   {
        lat = [[items objectAtIndex:2] doubleValue];
        long = [[items objectAtIndex:3] doubleValue];
    }
    CLLocationCoordinate2D location;
    location.latitude = lat;
    location.longitude = long;

    return location;
}
在你得到纬度和经度之后 1添加并使用mapKit框架

3在区域上设置纬度和经度

3.使用此功能

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id )annotation

尝试此函数获取地址的纬度和经度:-如果您只使用国家名称,则我们将获取该国家的中心纬度长度

-(CLLocationCoordinate2D) getLocationFromAddressString:(NSString*) countryStr {
    NSString *urlAddressStr = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", 
                           [countryStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSString *locationStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlAddressStr]];
    NSArray *items = [locationStr componentsSeparatedByString:@","];

    double lat = 0.0;
    double long = 0.0;

    if([items count] >= 4 && [[items objectAtIndex:0] isEqualToString:@"200"])
   {
        lat = [[items objectAtIndex:2] doubleValue];
        long = [[items objectAtIndex:3] doubleValue];
    }
    CLLocationCoordinate2D location;
    location.latitude = lat;
    location.longitude = long;

    return location;
}
在你得到纬度和经度之后 1添加并使用mapKit框架

3在区域上设置纬度和经度

3.使用此功能

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id )annotation

除非将数据文件sqlite存储到应用程序中,并在将管脚放入地图时查询数据库,否则此方法将无法工作。但它将保证离线模式下地图数据的可用性

基本上,您可以使用可用的形状文件

使用所述的.loadshp命令将其作为sqlite文件导入

导入sqlite文件后,您可以只查询以下内容

select lon,lat from world_borders where name like 'Zambia';
在哪里

lon = longitude, 
lat = latitude, 
world_borders = table name
and 'Zambia' = country name.

除非将数据文件sqlite存储到应用程序中,并在将管脚放入地图时查询数据库,否则此方法将无法工作。但它将保证离线模式下地图数据的可用性

基本上,您可以使用可用的形状文件

使用所述的.loadshp命令将其作为sqlite文件导入

导入sqlite文件后,您可以只查询以下内容

select lon,lat from world_borders where name like 'Zambia';
在哪里

lon = longitude, 
lat = latitude, 
world_borders = table name
and 'Zambia' = country name.

为了省去您的麻烦,我已经将该文件导入到sqlite文件中,非常感谢,这实际上并没有回答我的问题,但它是一个很大的帮助。这确实给了我一个完整的国家/地区列表以及我还需要的相关纬度/经度:为了省去您的麻烦,我已经将该文件导入到sqlite文件中,非常感谢,这实际上并没有回答我的问题,但它是一个很大的帮助。这确实给了我一个完整的国家/地区列表以及我还需要的相关纬度/经度:内置的MKMapView无法脱机工作-一个快速修复方法是在没有internet连接的情况下添加带有基本世界地图的地图覆盖。@Nielscall如果我将iPad置于飞行模式,然后加载添加了MKMapView的viewcontroller,您将获得基本世界地图,但放大时不要获取任何数据,这很好,因为我想禁用缩放。除非我看到的是缓存数据?我不知道顶层映射是否有特殊情况,确保顶层始终可用。。。但我不记得在文件里有提到过。我会犹豫是否依赖它。内置的MKMapView不能脱机工作-一个快速修复方法是在没有互联网连接的情况下添加一个带有基本世界地图的地图覆盖。@Nielscatle如果我将iPad置于飞行模式,然后加载一个带有MKMapView的viewcontroller,你就会得到基本世界地图,但放大时不要获取任何数据,这很好,因为我想禁用缩放。除非我看到的是缓存数据?我不知道顶层映射是否有特殊情况,确保顶层始终可用。。。但我不记得在文件里有提到过。我会犹豫是否依赖它。谢谢你的回复,但这种方法依赖于互联网连接来进行查找。它确实有助于在CLLocationCoordinate2DThanks中为您的回复设置lat&long,但此方法依赖于internet连接进行查找。它确实有助于在CLLocationCoordinate2D中设置纬度和长度