使用 MapboxStatic api 时,标记叠加层必须是 png、jpg 或 webp
Posted
技术标签:
【中文标题】使用 MapboxStatic api 时,标记叠加层必须是 png、jpg 或 webp【英文标题】:Marker overlays must be png, jpg, or webp while using MapboxStatic api 【发布时间】:2020-01-13 14:23:00 【问题描述】:这就是我创建标记并将其添加到叠加层数组的方式:
let text = "1"
let url = URL(string: "http://texttopng.azurewebsites.net/Home/TextToPng?text=\(text)")!
let marker = CustomMarker(coordinate: label.location.coordinate, url: url)
但是当我尝试做快照时:
_ = Snapshot(options: options, accessToken: nil).image image, error in
//error: Error Domain=MBStaticErrorDomain Code=-1 "Marker overlays must be png, jpg, or webp" UserInfo=NSLocalizedFailureReason=Marker overlays must be png, jpg, or webp
为什么会这样?
这是我尝试过的:
let image = UIImage(named: "icon-card")!
let png = UIImagePNGRepresentation(image)!
let newurl = png.write(withName: "\(text).png")
let marker = CustomMarker(coordinate: label.location.coordinate, url: newurl)
extension Data
func write(withName name: String) -> URL
let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(name)
try! write(to: url, options: .atomicWrite)
return url
【问题讨论】:
尝试下载,保存在本地并使用fileURL 好主意。我会试试... 好像不能是本地文件url;( 您可以编辑您的帖子并展示您尝试过的内容吗? 我只是编辑。结果我得到错误Custom image not found
。
【参考方案1】:
我想分享我的代码,它可以正常工作:
let text = "Hello"
let urlWithText = URL(string: "http://texttopng.azurewebsites.net/Home/TextToPng?text=\(text)")!
let marker = CustomMarker(coordinate: CLLocationCoordinate2D(latitude: 53.705912, longitude: 23.840836), url: urlWithText)
let camera = SnapshotCamera(
lookingAtCenter: CLLocationCoordinate2D(latitude: 53.705912, longitude: 23.840836),
zoomLevel: 12)
let options = SnapshotOptions(
styleURL: URL(string: "mapbox://styles/mapbox/satellite-streets-v9")!,
camera: camera,
size: CGSize(width: 400, height: 200))
options.overlays = [marker]
_ = Snapshot(options: options, accessToken: nil).image image, error in
_ = image?.jpegData(compressionQuality: 1.0)?.write(withName: "my_snapshot.jpg")
我用你的extension
代替Data
保存jpg
文件
extension Data
func write(withName name: String) -> URL
let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(name)
print(url.path)
try! write(to: url, options: .atomicWrite)
return url
结果我有一个这样的截图:
我想您可以尝试使用我的代码或其中的一部分并检查您的环境。我使用MapboxStatic.swift (0.11.0)
Mapbox pod
【讨论】:
是的,它确实从今天开始工作;)我不知道为什么它现在可以工作;)但是谢谢你的回复。我会很感激的。以上是关于使用 MapboxStatic api 时,标记叠加层必须是 png、jpg 或 webp的主要内容,如果未能解决你的问题,请参考以下文章
Google Maps API v3 - 单击标记时如何“提醒”标记ID [重复]
添加大量标记时,Google Maps Android API v2 非常慢