iOS MapKit从外部文件创建Pin加载

时间:2013-10-04 11:53:26

标签: ios mapkit coordinates mkannotation mkpinannotationview

我正在构建一个基于MapKit的应用程序。我想创建一定数量的pin(比方说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个。

这样做可能吗?我应该使用哪种结构? 谢谢!

2 个答案:

答案 0 :(得分:0)

为引脚和其他数据创建自定义对象类。并将它们存储在数组或字典中。并随时使用。您也可以使用持久存储。

·H

@interface MapAnnotation : NSObject 
@property(nonatomic, assign)    double latitude;
@property(nonatomic, assign)    double longitude;
@property (nonatomic)           int Id;
@end

的.m

 @interface MapAnnotation 
      @synthesize latitude,longitude,Id;
    @end

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];

答案 1 :(得分:0)

  • 为20针lat& amp;创建一个PLIST文件或json文件。 lng值
  • 如果您的应用程序定位到iOS5及更高版本,则需要JSONKit lib或最好是ios框架类NSJSONSerialization
  • 将文件添加到项目资源文件夹
  • 编写将加载资源文件的代码

以下是如何使用JSONKit

执行此操作的示例

创建一个json文件,将以下json示例复制粘贴到 poi_data.json 中,加载json文件。

    {
        "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];
            } 
}
  • 您也可以使用PLIST并加载到NSDictionary中,plist非常 得到了Cocoa Touch的支持。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/QuickStartPlist/QuickStartPlist.html#//apple_ref/doc/uid/10000048i-CH4-SW5

请记住在后台线程或NSOperation块中运行加载数据代码,您的应用程序可能会因跳板而被崩溃 - 加载时间过长。