【问题标题】:Can't figure out how to encode string into URL for Google Static Map API iOS无法弄清楚如何将字符串编码为 Google Static Map API iOS 的 URL
【发布时间】:2017-08-05 04:40:32
【问题描述】:

我现在真的很绝望。我已经连续进行了 7 个小时的编码和调试,从弄清楚如何在 Google 静态地图中画一个圆圈,将代码从 PHP 和 Java 转换为 Swift,只是为了看看解决方案是否可行。

幸运的是,我很幸运,能够正确生成带有 Circle 的 Google 静态地图。但是,我现在的问题是如何将它(字符串 URL)正确编码为 URL。我已经尝试了我在 SO 上找到的几乎所有东西。

以下是我的日志中浏览器中的示例工作 URL:

WORKING GOOGLE STATIC MAP LINK

https://maps.googleapis.com/maps/api/staticmap?size=640x320&&path=color:0x2EB7FCDD%7Cweight:1%7Cfillcolor:0x2EB7FC80%7Cenc:umdxAip_bVFqARmA^iAl@aAt@w@`Ao@dAa@jASlAGlAFjARdA`@`An@t@v@l@`A^hARlAFpAGnASlA_@hAm@`Au@x@aAl@eA`@kARmAFmAGkASeAa@aAm@u@y@m@aA_@iASmA&key=AIzaSyDLDkhgnS5gUjlXl5Jqt8fxJq87Figz8co&zoom=15

我已经尝试了每个CharacterSet 将该字符串编码为 URL。

部分结果如下:

GPKit???????????? -- JobLocationTableViewCell 2017-08-04 19:55:53 +0000: -- HOST --> https%3A%2F%2Fmaps.googleapis.com%2Fmaps%2Fapi%2Fstaticmap%3Fsize=640x320&&path=color%3A0x2EB7FCDD%257Cweight%3A1%257Cfi ... &zoom=15
GPKit???????????? -- JobLocationTableViewCell 2017-08-04 19:55:53 +0000: -- QUERY --> https://maps.googleapis.com/maps/api/staticmap?size=640x320&&path=color:0x2EB7FCDD%257Cweight:1%257Cfillcolor:0x2EB7FC80%257Cenc:umdxAip_bVFqARmA%5EiAl@aAt@w@%60Ao@dAa@jASlAGlAFjARdA%60@%60An@t@v@l@%60A%5EhARlAFpAGnASlA_@hAm@%60Au@x@aAl@eA%60@kARmAFmAGkASeAa@aAm@u@y@m@aA_@iASmA&key=AIzaSyDLDkhgnS5gUjlXl5Jqt8fxJq87Figz8co&zoom=15
GPKit???????????? -- JobLocationTableViewCell 2017-08-04 19:55:53 +0000: -- WHITE SPACES --> %68%74%74%70%73%3A%2F%2F%6D%61%70%73%2E%67%6F%6F%67%6C%65%61%70%69%73%2E%63%6F%6D%2F%6D%61%70%73%2F%61%70%69%2F%73%74%61 ... 3D%31%35
GPKit???????????? -- JobLocationTableViewCell 2017-08-04 19:55:53 +0000: -- nonBaseCharacters --> %68%74%74%70%73%3A%2F%2F%6D%61%70%73%2E%67%6F%6F%67%6C%65%61%70%69%73%2E%63%6F%6D%2F%6D%61%70%73%2F%61%70%69%2F%73%74%61 ... 3D%31%35
GPKit???????????? -- JobLocationTableViewCell 2017-08-04 19:55:53 +0000: -- alphanumerics --> https%3A%2F%2Fmaps%2Egoogleapis%2Ecom%2Fmaps%2Fapi%2Fstaticmap%3Fsize%3D640x320%26%26path%3Dcolor%3A0x2EB7FCDD%257Cweigh ... oom%3D15
GPKit???????????? -- JobLocationTableViewCell 2017-08-04 19:55:53 +0000: -- urlFragmentAllowed --> https://maps.googleapis.com/maps/api/staticmap?size=640x320&&path=color:0x2EB7FCDD%257Cweight:1%257Cfillcolor:0x2EB7FC80%257Cenc:umdxAip_bVFqARmA%5EiAl@aAt@w@%60Ao@dAa@jASlAGlAFjARdA%60@%60An@t@v@l@%60A%5EhARlAFpAGnASlA_@hAm@%60Au@x@aAl@eA%60@kARmAFmAGkASeAa@aAm@u@y@m@aA_@iASmA&key=AIzaSyDLDkhgnS5gUjlXl5Jqt8fxJq87Figz8co&zoom=15
GPKit???????????? -- JobLocationTableViewCell 2017-08-04 19:55:53 +0000: -- decomposables --> %68%74%74%70%73%3A%2F%2F%6D%61%70%73%2E%67%6F%6F%67%6C%65%61%70%69%73%2E%63%6F%6D%2F%6D%61%70%73%2F%61%70%69%2F%73%74%61 ... 3D%31%35

这些都不适用于我的浏览器或图像下载功能。欢迎使用 Swift 或 Objective-C 的答案。

编辑:当然,我使用 URL 来下载生成的静态地图图像,就像这样(我使用的是一个名为 Kingfisher 的库)

let mapURL = URL(string: staticMapUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
self.imageView_Map.kf.setImage(
    with: mapURL,
    placeholder: nil,
    options: [.transition(.fade(1))],
    progressBlock: { (receivedSize, totalSize) in
    }, completionHandler: { (_, _, _, _) in })

【问题讨论】:

  • 输入您的代码以及您要对 URL 执行的操作。
  • 虽然我觉得没必要,但还是这样吧。
  • 这次调用中mapURL的值是多少?当您说您尝试了每个 CharacterSet 时,您的意思是什么?
  • mapURL 应该是我在上面发布的工作字符串中的一个 URL。我已经尝试了每个可用于编码所述字符串的CharacterSet,只是试试我的运气,因为这是我第一次遇到这样的问题 - 一个不可编码的字符串到 URL。这就是我需要帮助的原因。
  • 你应该展示你的代码来创建mapURL。我不知道你为什么需要关心 CharacterSet。

标签: ios objective-c swift google-maps


【解决方案1】:

翠鸟文档说:

  let url = URL(string: "url_of_your_image")
  imageView.kf.setImage(with: url)

所以,你需要做的就是

  let url = URL(string: "https://maps.googleapis.com/maps/api/staticmap?size=640x320&&path=color:0x2EB7FCDD%7Cweight:1%7Cfillcolor:0x2EB7FC80%7Cenc:umdxAip_bVFqARmA%5EiAl@aAt@w@%60Ao@dAa@jASlAGlAFjARdA%60@%60An@t@v@l@%60A%5EhARlAFpAGnASlA_@hAm@%60Au@x@aAl@eA%60@kARmAFmAGkASeAa@aAm@u@y@m@aA_@iASmA&key=AIzaSyDLDkhgnS5gUjlXl5Jqt8fxJq87Figz8co&zoom=15")
  imageView.kf.setImage(with: url)

我看不出你需要编码什么。

【讨论】:

  • 我认为必须对每个字符串 url 进行编码才能转换为 URL,因为我每次都这样做,并且在发布此问题之前我一直在尝试您发布的解决方案。它返回给我一个nil。凌晨 4 点 45 分在这里。我对自己很失望,哈哈。
  • 您发布的网址已编码。如果您需要从各个部分创建 URL,则需要对每个部分进行编码
  • 确实,因为我使用了一个用于编码大量 CLLocationCoordinate2D 的库来生成如此可爱的字符串 URL。先生,您现在所说的真正解决方案是什么?
  • 我什至不能说我理解你的问题,所以我没有更多的解决方案。如果您希望我们帮助您正确创建 mapURL,则需要展示您是如何创建它的
  • 13 分钟前,当您在上面发布最后一条评论时,我刚刚编辑了问题。我不明白为什么我需要展示我尝试制作可加载 URL 对象的无数方法。就像我所说的那样,在去这里之前,我也尝试了您的解决方案。试过编码什么的。为了使问题更直接,我只需要知道如何使我生成的WORKING GOOGLE STATIC MAP LINK 可以加载到我的UIImageView 中。或者也许我会尝试放弃这个Kingfisher 只是为了我项目的这一部分。
猜你喜欢
  • 2015-07-04
  • 1970-01-01
  • 2012-11-14
  • 2013-04-03
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 2012-11-26
相关资源
最近更新 更多