快速拟合注释
Posted
技术标签:
【中文标题】快速拟合注释【英文标题】:Swift fit annotations 【发布时间】:2015-06-01 18:35:45 【问题描述】:我在解析中有几个正在查询的位置。它显示所有注释,但仅缩放最后一个注释。如何找到最大和最小纬度和经度并使它们适合?
*** 上有很多这些,但它们几乎都在 Objective-c 中。
【问题讨论】:
请不要发布代码截图。相反,复制并粘贴代码本身。 【参考方案1】:Objective-C 中的示例基本上仍然有效,因为底层 SDK/API 仍然相同——只是使用不同的语言调用(并且总是有文档)。
要显示所有注释,基本上有两种方法:
使用方便的showAnnotations
方法。您将一组注释传递给它,它会自动计算一个合理的区域来显示。您在添加所有注释后调用它(在您的 for
循环之后)。事实上,showAnnotations
甚至会添加注释本身,如果它们还没有出现在地图上的话。要显示地图上已经存在的所有注释,只需将地图自己的annotations
数组传递给它。示例:
self.mapView.showAnnotations(self.mapView.annotations, animated: true)
如果您对showAnnotations
计算的默认区域不满意,您可以自己计算一个。与其计算最小/最大纬度和经度等,我更喜欢使用内置的MKMapRectUnion
函数来创建一个适合所有注释的MKMapRect
,然后调用setVisibleMapRect(mapRect,edgePadding,animated)
,它可以方便地在屏幕点周围定义填充拟合的地图矩形。这种技术最初是在 Apple 的一个非常早期的地图视图示例应用程序中发现的。示例:
var allAnnMapRect = MKMapRectNull
for object in objects!
//existing code that creates annotation...
//existing code that calls addAnnotation...
let thisAnnMapPoint = MKMapPointForCoordinate(annotation.coordinate)
let thisAnnMapRect = MKMapRectMake(thisAnnMapPoint.x, thisAnnMapPoint.y, 1, 1)
allAnnMapRect = MKMapRectUnion(allAnnMapRect, thisAnnMapRect)
//Set inset (blank space around all annotations) as needed...
//These numbers are in screen CGPoints...
let edgeInset = UIEdgeInsetsMake(20, 20, 20, 20)
self.mapView.setVisibleMapRect(allAnnMapRect, edgePadding: edgeInset, animated: true)
【讨论】:
谢谢你,Anna,这就像一个魅力 :) 我不擅长objective-c,所以有时会很困惑,我刚学了15天的swift以上是关于快速拟合注释的主要内容,如果未能解决你的问题,请参考以下文章
Python 时间序列异常点检测 | tsmoothie 基于数据平滑/拟合的方法 简单却快速有效