iOS - 如何从 JSON 文件创建与其 GMSMutablePath 关联的 GMSPolygons 字典

Posted

技术标签:

【中文标题】iOS - 如何从 JSON 文件创建与其 GMSMutablePath 关联的 GMSPolygons 字典【英文标题】:iOS - How to create a Dictionary of GMSPolygons associated with their GMSMutablePath from JSON file 【发布时间】:2017-05-18 08:49:58 【问题描述】:

我目前正在使用 ios Google Map SDK,我想在我的地图上绘制一些多边形。

更准确地说,我有一个 JSON,其中包含特定部门的不同纬度/经度点。

我可以通过创建一个由几个点组成的GMSMutablePath 来绘制一个GMSPolygon,就像在 Google 文档中介绍的那样。

另一方面,我无法实现的是使其通用。

让我给你看一些代码。

"01": [[51.01, 2.07], [50.99, 2.12], [51.01, 2.11], [51.03, 2.15], ...], "02": [[50.51, 1.64], [50.51, 1.66], ...]

我有这个 JSON 文件,其中包含特定部门的数千个职位点。我把它缩短了,所以你只能看到 JSON 对象的格式。

这是我的解析:

-(void) parseJsonDept 
    NSString *jsonFilePath = [[NSBundle mainBundle] pathForResource:@"dept" ofType:@"json"];
    if (!jsonFilePath) 
        NSLog(@"Not a valid FilePath");
        return;
    

    NSString *myJSON = [[NSString alloc] initWithContentsOfFile:jsonFilePath encoding:NSUTF8StringEncoding error:NULL];
    if (!myJSON) 
        NSLog(@"File couldn't be read!");
        return;
     

    NSError *error =  nil;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[myJSON dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&error];

很直接,现在不知道怎么处理了。

我有一段来自 Google 文档的代码,用于绘制多边形。

-(void) drawPolygon 
    // Create a rectangular path
    GMSMutablePath *rect = [GMSMutablePath path];
    [rect addCoordinate:CLLocationCoordinate2DMake(51.01, 2.07)];
    [rect addCoordinate:CLLocationCoordinate2DMake(50.99, 2.12)];
    [rect addCoordinate:CLLocationCoordinate2DMake(51.03, 2.15)];
    [rect addCoordinate:CLLocationCoordinate2DMake(51.01, 2.18)];

    // Create the polygon, and assign it to the map.
    GMSPolygon *polygon = [GMSPolygon polygonWithPath:rect];
    polygon.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05];
    polygon.strokeColor = [UIColor blackColor];
    polygon.strokeWidth = 2;
    polygon.map = _mapView;

我的问题是如何创建与他们的GMSMutablePath 和他们的Department 关联的GMSPolygons 字典。

例如,从我的 JSON 字典中循环抛出每个部门,并 [rect addCoordinate:CLLocationCoordinate2DMake(lat, long)] 将坐标添加到我的 GMSMutablePath

每个部门的等等,这样最后我就有了我的多边形列表。

我一直在为 JSON 苦苦挣扎,超出了我的预期......

【问题讨论】:

【参考方案1】:

在你得到Dictionary 之后,你可以遍历它并从中生成GMSMutablePath

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[myJSON dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&error];
GMSMutablePath *rect = [GMSMutablePath path];
for(id key in json) 
    NSArray *coordinates = [json objectForKey:key];
    for(NSArray *coordinate in coordinates) 
        double latitude = [[coordinate firstObject] doubleValue];
        double longitude = [[coordinate lastObject] doubleValue];
        [rect addCoordinate:CLLocationCoordinate2DMake(latitude, longitude)];
    

// Create the polygon, and assign it to the map.
GMSPolygon *polygon = [GMSPolygon polygonWithPath:rect];
polygon.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05];
polygon.strokeColor = [UIColor blackColor];
polygon.strokeWidth = 2;
polygon.map = _mapView;

【讨论】:

@RaphaelP。欢迎朋友:) @RaphaelP。只需将array 替换为coordinate 拼写错误:) 我也编辑了答案

以上是关于iOS - 如何从 JSON 文件创建与其 GMSMutablePath 关联的 GMSPolygons 字典的主要内容,如果未能解决你的问题,请参考以下文章

您如何以与其前身 webforms 相同的风格从 appsettings.json 中读取信息?

文本到 JSON iOS

如何以动态方式读取与其大小结构相关的json文件

如何在 swift iOS 中使用 swift 高阶函数从本地 json 创建 ViewModel

iOS:如何创建从服务器下载数据的应用程序?

如何从 iOS 中的文件中解析 JSON? [关闭]