iOS MapKit从外部文件创建Pin加载
我正在基于MapKit构建一个应用程序。我想创建一定数量的管脚(比如说20个),现在我通过代码指定这些坐标。例如,在我的实现文件中:iOS MapKit从外部文件创建Pin加载,ios,mapkit,coordinates,mkannotation,mkpinannotationview,Ios,Mapkit,Coordinates,Mkannotation,Mkpinannotationview,我正在基于MapKit构建一个应用程序。我想创建一定数量的管脚(比如说20个),现在我通过代码指定这些坐标。例如,在我的实现文件中: #define PIN1_LATITUDE 43.504156 #define PIN1_LONGITUDE 12.343405 #define PIN2_LATITUDE 43.451696 #define PIN2_LONGITUDE 12.488599 对于所有20个值,依此类推。问题是,我想根据某个参数加载和显示20个管脚的不同集合。所以我想在外部文
#define PIN1_LATITUDE 43.504156
#define PIN1_LONGITUDE 12.343405
#define PIN2_LATITUDE 43.451696
#define PIN2_LONGITUDE 12.488599
对于所有20个值,依此类推。问题是,我想根据某个参数加载和显示20个管脚的不同集合。所以我想在外部文件中存储pin的坐标,每次加载1组
有可能这样做吗?我应该使用哪种结构?
谢谢大家! 为pin和其他数据创建自定义对象类。并将它们存储在数组或字典中。需要时随时使用。您还可以使用持久存储 h m viewcontroller.m
NSMutableArray *annotationarray = [NSMutableArray alloc]init];
MapAnnotation *newAnnoataion = [[MapAnnotation allo]init];
newAnnoataion.latitude = 49.05678;
newAnnoataion.longitude = 69.05678;
newAnnoataion.id = 1;
[annotationarray addObject newAnnoataion];
- 为20针lat和lng值创建PLIST文件或json文件
- 如果您的应用程序的目标是iOS5及更高版本,您将需要或最好是ios框架类
- 将文件添加到项目资源文件夹
- 编写将加载资源文件的代码
{
"poi": [
{
"id": "1",
"lat": "43.668997",
"lng": "-79.385093"
},
{
"id": "1",
"lat": "43.668997",
"lng": "-79.385093"
},
{
"id": "1",
"lat": "43.668997",
"lng": "-79.385093"
}
]
}
- (void)loadDataFromFile {
NSString* path = [[NSBundle mainBundle] pathForResource:@"poi_data"
ofType:@"json"];
NSString* content = [NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:NULL];
NSDictionary *poiCollection = [content objectFromJSONStringWithParseOptions:JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode error:nil];
NSArray* pois = [result objectForKey:@"poi"];
for (NSInteger i = 0; i < [pois count]; i++) {
NSDictionary* node = (NSDictionary*)[poi objectAtIndex:i];
CGFloat lat = [[node objectForKey:@"lat"] doubleValue];
CGFloat lng = [[node objectForKey:@"lng"] doubleValue];
}
}
{
“poi”:[
{
“id”:“1”,
“lat”:“43.668997”,
“液化天然气”:“-79.385093”
},
{
“id”:“1”,
“lat”:“43.668997”,
“液化天然气”:“-79.385093”
},
{
“id”:“1”,
“lat”:“43.668997”,
“液化天然气”:“-79.385093”
}
]
}
-(void)loadDataFromFile{
NSString*路径=[[NSBundle mainBundle]路径用于资源:@“poi_数据”
类型:@“json”];
NSString*content=[NSString STRINGWITHCONTENTS文件:路径
编码:NSUTF8StringEncoding
错误:NULL];
NSDictionary*poiCollection=[content objectFromJSONStringWithParseOptions:jkParseOptionNicodeNewlines | jkParseOptionOOseUnicode错误:nil];
NSArray*pois=[result objectForKey:@“poi”];
对于(NSInteger i=0;i<[泊松计数];i++){
NSDictionary*节点=(NSDictionary*)[poi对象索引:i];
CGFloat lat=[[node objectForKey:@“lat”]doubleValue];
CGFloat lng=[[node objectForKey:@“lng”]doubleValue];
}
}
- 您还可以使用PLIST并将其加载到NSDictionary中,PLIST非常有用 在可可触感方面得到了很好的支持
记住在后台线程或NSOperation块中运行加载数据代码,你的应用程序可能会崩溃-被springboard踢出-因为加载时间太长。我不明白。。你能给我举一些例子吗?像这样你可以创造。
NSMutableArray *annotationarray = [NSMutableArray alloc]init];
MapAnnotation *newAnnoataion = [[MapAnnotation allo]init];
newAnnoataion.latitude = 49.05678;
newAnnoataion.longitude = 69.05678;
newAnnoataion.id = 1;
[annotationarray addObject newAnnoataion];
{
"poi": [
{
"id": "1",
"lat": "43.668997",
"lng": "-79.385093"
},
{
"id": "1",
"lat": "43.668997",
"lng": "-79.385093"
},
{
"id": "1",
"lat": "43.668997",
"lng": "-79.385093"
}
]
}
- (void)loadDataFromFile {
NSString* path = [[NSBundle mainBundle] pathForResource:@"poi_data"
ofType:@"json"];
NSString* content = [NSString stringWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:NULL];
NSDictionary *poiCollection = [content objectFromJSONStringWithParseOptions:JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode error:nil];
NSArray* pois = [result objectForKey:@"poi"];
for (NSInteger i = 0; i < [pois count]; i++) {
NSDictionary* node = (NSDictionary*)[poi objectAtIndex:i];
CGFloat lat = [[node objectForKey:@"lat"] doubleValue];
CGFloat lng = [[node objectForKey:@"lng"] doubleValue];
}
}