ios LINESTRING解析

Posted

技术标签:

【中文标题】ios LINESTRING解析【英文标题】:ios LINESTRING parsing 【发布时间】:2012-08-13 15:22:22 【问题描述】:

我一直在为 ios 的谷歌地图定制路线。

如何解析 LINESTRING 中传入的 JSON??

我的 LINESTRING:

"coordInfo": "LINESTRING (28.646751729297 40.9993029074749, 28.6470087874434 40.9995465119554, 28.6470087874434 40.9995465119554, 28.6474633603416 41.0000088561426)"
    ,

【问题讨论】:

【参考方案1】:

从您发布的内容看来,objectForKey@"coordInfo" 为您提供了一个带有括号中数字的字符串。您可以使用 NSString 方法 componentsSeparatedByCharactersInSet 对其进行解析:传递包含左右括号、逗号和空格的集合以生成单个数字字符串的数组(以及单词“LINESTRING”作为数组中的第一个字符串) .该数组还将包含一些空字符串,其中 2 个分隔字符在一起(如逗号和空格),因此在将对象从数组中取出时必须进行测试。

你也可以像这样使用 NSScanner:

NSString *toParse = @"LINESTRING (28.646751729297 40.9993029074749, 28.6470087874434 40.9995465119554, 28.6470087874434 40.9995465119554, 28.6474633603416 41.0000088561426)";
    NSScanner *scanner = [NSScanner scannerWithString:toParse];
    double num;
    while (! [scanner isAtEnd]) 
      [scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:nil];
      [scanner scanDouble:&num];
      // put numbers into an array here or use them somehow
      NSLog(@"%f",num);
    

【讨论】:

尝试了您的代码,但它记录了最后一个数字两次(可能是末尾的“)”),将其添加到 IF 中为我修复了它:while (![scanner isAtEnd] &&scanner. scanLocation

以上是关于ios LINESTRING解析的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据类型 - 空间数据类型

LineString 的长度(以英里为单位)

确定 Shapely 点是不是在 LineString/MultiLineString 内

邻近查询与两端之间的 LineString 点不匹配

使用 MySQL 空间扩展从一个点查找 N 个最近的 LineString

带孔的 GeoJson LineString 特征集合