如何将 Google Directions API 折线字段解码为 Objective-C for iPhone 中的经纬度点?

2024-02-05

我想在地图上绘制与我通过 Google Directions API 获取的方向 JSON 相对应的路线:https://developers.google.com/maps/documentation/directions/start https://developers.google.com/maps/documentation/directions/start

我已经弄清楚如何从步骤字段中提取纬度和经度,但这并不能很好地遵循弯曲的道路。我认为我需要的是解码折线信息,我找到了谷歌关于如何编码折线的说明:https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/utilities/polylinealgorithm

我确实在这里找到了一些 Android 代码以及解码折线的 Javascript,例如:

使用 google Directions API 的地图视图绘制方向 - 解码折线 https://stackoverflow.com/questions/6708408/map-view-draw-directions-using-google-directions-api-decoding-polylines

android 获取并解析Google Directions https://stackoverflow.com/questions/2964982/android-get-and-parse-google-directions

但我找不到相同的 Objective-C iPhone 代码,有人可以帮我吗?我确信如果有必要的话我可以自己做,但如果它已经在某个地方可用,它肯定会节省我一些时间。

编辑:这里的关键是能够逐个字符地解码 Base64 编码。更具体地说,我从 Google 得到了类似 JSON 的内容,它是使用 base64 编码等进行编码的:

...   "overview_polyline" : {
        "points" : "ydelDz~vpN_@NO@QEKWIYIIO?YCS@WFGBEBICCAE?G@y@RKBEBEBAD?HTpB@LALALCNEJEFSP_@LyDv@aB\\GBMB"
       },
...

注意:我应该提到这个问题是指 Google Maps API v1,在 v2 中使用 GMSPolyLine polyLineWithPath 来做到这一点要容易得多,下面的许多答案都会告诉你(感谢 @cdescours)。


我希望链接到我自己的链接不违反规则博客文章 http://objc.id.au/post/9245961184/mapkit-encoded-polylines如果它与问题相关,但我过去已经解决过这个问题。来自链接帖子的独立答案:

@implementation MKPolyline (MKPolyline_EncodedString)

+ (MKPolyline *)polylineWithEncodedString:(NSString *)encodedString {
    const char *bytes = [encodedString UTF8String];
    NSUInteger length = [encodedString lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
    NSUInteger idx = 0;

    NSUInteger count = length / 4;
    CLLocationCoordinate2D *coords = calloc(count, sizeof(CLLocationCoordinate2D));
    NSUInteger coordIdx = 0;

    float latitude = 0;
    float longitude = 0;
    while (idx < length) {
        char byte = 0;
        int res = 0;
        char shift = 0;

        do {
            byte = bytes[idx++] - 63;
            res |= (byte & 0x1F) << shift;
            shift += 5;
        } while (byte >= 0x20);

        float deltaLat = ((res & 1) ? ~(res >> 1) : (res >> 1));
        latitude += deltaLat;

        shift = 0;
        res = 0;

        do {
            byte = bytes[idx++] - 0x3F;
            res |= (byte & 0x1F) << shift;
            shift += 5;
        } while (byte >= 0x20);

        float deltaLon = ((res & 1) ? ~(res >> 1) : (res >> 1));
        longitude += deltaLon;

        float finalLat = latitude * 1E-5;
        float finalLon = longitude * 1E-5;

        CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(finalLat, finalLon);
        coords[coordIdx++] = coord;

        if (coordIdx == count) {
            NSUInteger newCount = count + 10;
            coords = realloc(coords, newCount * sizeof(CLLocationCoordinate2D));
            count = newCount;
        }
    }

    MKPolyline *polyline = [MKPolyline polylineWithCoordinates:coords count:coordIdx];
    free(coords);

    return polyline;
}

@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Google Directions API 折线字段解码为 Objective-C for iPhone 中的经纬度点? 的相关文章

  • PagedList 的 Newtonsoft.Json 序列化不包含某些属性

    我正在尝试序列化 PagedList 对象 https github com martijnboland MvcPaging blob master src MvcPaging PagedList cs https github com m
  • 从 JSON 字符串创建 BSON 对象

    我有一个 Java 应用程序 它从外部应用程序获取数据 传入的 JSON 位于字符串中 我想解析该字符串并创建 BSON 对象 不幸的是 我在 Java 的 BSON 实现中找不到该 API 我是否需要使用外部解析器 例如 GSON 而且
  • 如何将 JsonNode 转换为 ObjectNode

    我有一个com fasterxml JsonNode带有一些数据的对象 我需要对其数据进行一些操作 我用谷歌搜索答案但没有得到正确的答案 您能建议我如何操作 JsonNode 数据吗 我也尝试过转换JsonNode to ObjectNod
  • 如何在 iOS 企业帐户中创建开发人员配置文件请求?

    我们有 iOS 企业帐户 现在我们想要向我们的团队添加一名开发人员 该开发人员将创建一个开发人员配置文件 问题是新添加的开发人员在他的苹果帐户中看不到配置文件标签 任何人都知道新添加的开发人员如何创建配置文件 感谢您 Steps 您可以通过
  • 应用程序关闭时下载报刊亭应用程序

    我正在实现一个报摊杂志应用程序 它通过 Urban Airship 推送通知接收新期刊 只要应用程序位于前台或后台 这就可以正常工作 但据我所知 当应用程序完全关闭时也应该触发下载 但发送推送 content available 1如果我的
  • [UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]

    我正在使用表格视图来显示消息 我使用了下面的代码 UIView chatView self bubbleView NSString stringWithFormat message from YES self chatArray addOb
  • Google AJAX API - 如何获得 4 个以上结果?

    我使用下面的 google API ajax 来获取特定搜索词的图像 这是在一个WinForms app 下面的链接似乎有效 但它只返回 4 个结果 通过 JSON 有谁知道如何哄得更多吗 显然必须有另一个参数来请求更多或分页结果 但我似乎
  • 将 Php 数组编码为 json [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想对我的 php 数组进行编码 A
  • 如何为现代 C++ 迭代 JSON 中的 JSON

    我想迭代 json 对象中的每个条目 但我收到一个又一个难以理解的错误 下面的例子如何改正 include
  • 自定义选项卡栏上的“更多”菜单

    我在我的应用程序上使用选项卡栏 UITabBarController 我希望自定义单击 更多 按钮时出现的表格的外观 我已经研究出如何通过设置来更改更多屏幕上导航栏的外观 self moreNavigationController navi
  • 如何从装有 iOS 5 的新 iPhone(供个人使用)获取历史位置数据?

    过去 从 iPhone 上名为solidified db 的文件中获取历史位置数据很容易 例如 请参阅http petewarden github com iPhoneTracker http petewarden github com i
  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 如何使 UITableView 可重新排列?

    我正在尝试使我的 UITableView 可编辑 以便您可以移动单元格 现在 当我单击编辑按钮时 它只允许我删除 但不能重新排列 我有的方法有 Code BOOL tableView UITableView tableView canEdi
  • 特别分发:应用程序安装失败

    我已经为我尝试分发的应用程序创建了一个临时存档和一个 ipa 文件 我还创建了一个分发配置文件 其中包含我计划将应用程序分发到的设备的 UDID 当我将 ipa 和 mobileprovision 文件拖到 iTunes 中并尝试将应用程序
  • Vue: vue-i18n: 无法翻译 keypath 的值,使用 keypath 的值作为默认值

    我正在使用 Vue 我想展示三种语言 英语 他加禄语和宿务语 现在我有错误 无法转换键路径 NavbarMobile home 的值 使用 keypath 的值作为默认值 我通过 console log this i18n locale 检
  • 应用程序:didReceiveRemoteNotification:未调用 fetchCompletionHandler

    出现了这个功能application didReceiveRemoteNotification fetchCompletionHandler当应用程序被强制退出时不会被调用 我的印象是 无论应用程序处于什么状态 该函数都会被调用 但似乎只有
  • 如何在 iPhone 中查找本周的最后一天?

    在我的应用程序中 我使用以下代码来检索当前日期和星期 NSDate today1 NSDate date NSDateFormatter dateFormat NSDateFormatter alloc init dateFormat se
  • 如何缩放曼德尔布罗集

    我已经成功实现了维基百科文章中所述的曼德尔布罗集 但我不知道如何放大特定部分 这是我正在使用的代码 void createSetWithWidth int width Height int height Thing void int int
  • android中如何将字符串转换为unicode

    我正在解析一些unicodes from json to my android应用程序 API 给出unicodes像这样的图标 ue600 当我将这个unicode直接添加到textview like textview setText u
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize

随机推荐

  • “selectedFilters”不是有效的关键字参数

    我使用 PyQt5 当我尝试保存文件名时出现错误 csv file list QtWidgets QFileDialog getOpenFileName self Open file csv fileName csv file list f
  • 防止 AngularJs 使用 jQuery 库

    Question 如何防止 AngularJs 使用 jQuery 背景 我正在 AngularJs 中开发一个独立的应用程序 可以 插入 到现有的客户端网站中 这些客户端网站可能已经使用 jQuery 如果您使用过 AngularJs 您
  • 程序在发生任何事情之前就在调试器中崩溃了

    我正在使用 MinGW 工具链构建一个适用于 Windows XP 的应用程序 它有时会意外崩溃 因此 我尝试使用调试器 Gdb 但程序在发生任何事情之前都会以代码 03 退出 事实上 我从GDB看到的只是 新线程3184 0x7b8 新线
  • @SpringBootTest 导致“未找到给定包含的测试”

    我有简单的单元测试 它启动我的应用程序并测试某些服务是否已实例化 有点像健全性检查 但是 这些测试并未在我的完整测试套件中运行 当单独运行时 我收到错误No tests found for given includes com exampl
  • 如何忽略 new Date() 上的时区?

    我有一个名为的 JavaScript 函数updateLatestDate接收作为参数的对象数组 数组中对象的属性之一是MeasureDate日期类型的属性 功能updateLatestDate返回数组中存在的最新日期 这是函数 funct
  • spring boot/batch 通过代码禁用批量自动启动

    我正在编写一个 Spring Batch 应用程序 其中包含需要按特定顺序执行的不同作业 为了做到这一点 我通过 JobLauncher 手动运行作业 并通过在属性文件中添加以下属性来禁用 Spring 批处理提供的自动启动功能 sprin
  • Spring的未来-XD [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我听到有传言称 Spring XD 失去了开发动力 并且 Spring 转向云服务 由于我正在考虑 XD 我考虑的另一个是 Apache B
  • executeScript 未定义或不是 ManifestV3 扩展中的函数

    为什么 Chrome 的这个功能不起作用 我正在尝试这个例子 https developer chrome com docs extensions mv3 content scripts programmatic https develop
  • 将资源添加到 JAR

    我想将资源文件 图像 文本文件 包含在 JAR 中 我将资产文件夹添加到类路径中 因此当我在 netBeans 中运行我的程序时 它可以正常工作 但是如果我构建项目 我会收到错误 Not copying library C Users Fl
  • 如何将 Access-Control-Allow-Origin 添加到 jetty 服务器

    我有一个码头服务器来运行我的网络服务 最近 我开发了一个使用 Web 服务的程序 并遇到了 Access Control Allow Origin 问题 如何将 Access Control Allow Origin 添加到 jetty 嵌
  • 如何通过位置和分隔符提取字符串的子字符串

    我们如何从字符串中分割子字符串 就像我有绳子一样 String mainString Trade Time Trade Number Amount Rs 现在我有其他字符串 String subString Amount 然后我想提取子字符
  • 使用烧瓶中的数据参数重定向

    我试图学习 Flask 并遇到了以下问题 这是我试图实现的示例 app route poll methods GET POST def poll form PollForm if form validate on submit return
  • 如何将 EditText 输入限制为数字(可能是十进制和带符号)输入?

    我读过了Android 将 EditText 限制为数字 https stackoverflow com questions 5200689 android limiting edittext to numbers and 如何在 andr
  • tftp put 的 inotify 事件 IN_MODIFY 发生两次

    我正在使用 inotify 来监听对文件的修改 当我测试文件修改时 程序运行正常 echo test gt tftpboot TEST Output Read 16 data IN MODIFY 但是当我执行 tftp put 时 会生成两
  • CSS 中的“$”是什么意思?

    我看到一个动画项目 里面有一堆 我不知道美元符号在 CSS 中的用途 我猜这是为了动画 这是我正在查看的一些代码的示例 emoji base color FFDA6A emoji like color 548DFF emoji like b
  • 使用 javascript canvas 调整图像大小(平滑)

    我正在尝试用画布调整一些图像的大小 但我不知道如何平滑它们 在 Photoshop 浏览器等上 他们使用一些算法 例如双三次 双线性 但我不知道这些算法是否内置在画布中 这是我的小提琴 http jsfiddle net EWupT htt
  • python 中的多个构造函数

    如何将以下两个类合并为一个类 Rectangle 以便可以通过 rect Rectangle side a side b 或 rect Rectangle side a area 创建 Rectangle 对象 class Rectangl
  • 使用 iText 将外部图像添加到 PDF

    我无法弄清楚如何使用 iText 将外部图像 由 URL 引用 添加到 PDF 这种事情可能吗 7 1 5 中的 PDF 规范表示您应该能够使用 URL 规范通过 URL 引用 PDF 这是我到目前为止所得到的 PdfFileSpecifi
  • codeigniter 发生数据库错误

    有人能帮我吗 我是一个初学者 试图进行佩戴 CodeIgniter 身份验证 但是当我尝试犯这样的错误时 数据库发生错误 Error Number 1046 未选择数据库 SELECT FROM user WHERE user userna
  • 如何将 Google Directions API 折线字段解码为 Objective-C for iPhone 中的经纬度点?

    我想在地图上绘制与我通过 Google Directions API 获取的方向 JSON 相对应的路线 https developers google com maps documentation directions start htt