MKMapView使用其名称在国家/地区放置图钉

时间:2012-03-28 07:28:46

标签: iphone objective-c ios ipad mkmapview

我有一系列国家/地区名称,并希望将它们作为地标放置在MKMapView上。因此,例如,如果法国位于countryName数组中,我希望将一个引脚放在法国中心。

有没有办法在不为每个国家/地区存储lat / long的情况下执行此操作?

我想让这项工作脱机,并且只需要地图中最基本且完全缩小的世界图像。

我相信MKMapView拥有一些基本的地理信息,所以在不使用GLGeocoder和互联网连接的情况下可以实现上述目的吗?

2 个答案:

答案 0 :(得分:3)

尝试此功能获取地址的纬度和经度:-(如果您只使用国家/地区名称,那么我们会为该国家/地区获得中心拉特唠叨)

-(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 Framework

3)在区域

上设置纬度和经度

3)使用此功能

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

答案 1 :(得分:1)

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

基本上您可以使用可用的形状文件 http://thematicmapping.org/downloads/world_borders.php

使用所述的.loadshp命令将其导入为sqlite文件 http://www.gaia-gis.it/gaia-sins/spatialite-tutorial-2.3.1.html

导入sqlite文件后,您只需查询类似

的内容即可
select lon,lat from world_borders where name like 'Zambia';

其中

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