【问题标题】:MKMapView Placing a pin on a country using its nameMKMapView 使用其名称在国家/地区放置图钉
【发布时间】:2012-03-28 07:28:46
【问题描述】:

我有一组国家名称,并希望将它们作为地标放置在 MKMapView 上。因此,例如,如果 France 在 countryName 数组中,我希望在 France 的中心放置一个图钉。

有没有办法在不为每个国家/地区存储纬度/经度的情况下做到这一点?

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

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

【问题讨论】:

  • 内置的 MKMapView 不能离线工作 - 一个快速的解决方法是在没有互联网连接时添加一个带有基本世界地图的地图叠加层。
  • @NielsCastle 如果我将 iPad 置于飞行模式,然后加载添加了 MKMapView 的视图控制器,您将获得基本的世界地图,但放大时不会获得任何数据很好,因为我想禁用缩放。除非我看到的是缓存数据?
  • 我不知道顶级地图是否有特殊情况可以确保顶级地图始终可用......但我不记得在文档中看到过任何提及.我会犹豫是否要依赖它。

标签: iphone objective-c ios ipad mkmapview


【解决方案1】:

试试这个函数来获取地址的纬度和经度:-(如果你只使用国家名称,那么我们会得到那个国家的中心纬度 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

【讨论】:

  • 感谢您的回复,但此方法依赖于 Internet 连接来进行查找。它确实有助于在 CLLocationCoordinate2D 中设置纬度和经度
【解决方案2】:

除非您将数据文件 (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.

【讨论】:

  • 为了省去你的麻烦,我已经将文件导入到可用的sqlite文件github.com/nhisyam/World-Borders
  • 非常感谢,这实际上并没有回答我的问题,但它有很大的帮助。这确实给了我一个完整的国家名单和我也需要的相关纬度/经度。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多