微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法创建包含Google加密折线的Swift URL对象

如何解决无法创建包含Google加密折线的Swift URL对象

我在Swift中创建URL对象时遇到验证问题,当我尝试通过以下字符串创建URL对象时,返回nil:

https://maps.googleapis.com/maps/api/staticmap?size=70x70&path=weight:3%7Ccolor:black%7Cenc:oo%60rG%7Bpxm@zHeW%60H%7BDjJPzKwBnKhKzHrVaExa@gWzCeNsO&path=weight:3%7Ccolor:blue%7Cenc:q|_rG%7Dnym@jJPzKwBnKhKzHrV&key=[my api键]

我需要使用Google Maps Static API来获取地图的图像,包括以加密折线形式作为参数传递给url的路径。

我尝试使用以下方法转义网址:

addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)

尽管折线已更改且不会绘制路径,但这样做可以创建URL对象。

您能给我任何建议吗?

PS。如果我输入的网址没有在浏览器中应用addingPercentEncoding,它将显示预期的图像。

PPS。选择不将GMS SDK包含在项目中

-编辑-

嗨,我尝试了Duncan C建议的URLComponents解决方案,尽管我得到的结果与google编码路径失真相同。

var urlComponents = URLComponents() 
urlComponents.scheme = "https" 
urlComponents.host = "maps.googleapis.com" 
urlComponents.path = "/maps/api/staticmap"
urlComponents.setQueryItems(with: params)
print(urlComponents.url?.absoluteString) 
if let url = urlComponents.url { // generates wrong url }

解决方法

URL的不同部分需要不同的编码规则。

我建议使用系统类URLComponents创建您的URL。这样,您可以指定URL的各个部分(不使用编码),然后查询URLComponents对象以获取URL。

编辑:

在我看来,问题在于折线参数的编码,因为您说这些参数未渲染。您应该包括指向Google静态地图API上Google文档部分的链接,该部分处理编码的折线,并显示编码折线参数的代码。

在“谷歌地图编码的折线swift”上进行的快速Google搜索产生了project on Github,该代码在Swift中实现了Google的折线编码器/解码器

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。