标签: mapkit

如何清除MKMapView的地图图块缓存?

我正在开发一个基于MKMapView的iPhone/iPad地图应用程序,它覆盖了我自己的基本底图,即使在用户离线且无法访问Google的地图图块服务器时也能提供一些有限的功能.

这个功能正在运行 - 但是我很难在每次新构建之后测试它,因为我找不到刷新/重置iOS地图图块缓存的方法.iOS缓存甚至可以在电源循环和iOS设备重启后幸存下来.我过去放大的任何地方都会使用先前测试会话中的内存中的切片进行渲染.

有没有办法强制iOS刷新其地图缓存?现在,我能想到的唯一选择是每次需要进行测试时重新刷新操作系统.

谢谢!

顺便说一句:这几乎是这个问题的重复,但在这种情况下,问题不是使用空缓存进行测试,而是释放内存.那里接受的答案集中在RAM问题上,而不是我在这里遇到的问题.

iphone caching mapkit mkmapview ios

7
推荐指数
1
解决办法
4533
查看次数

如何计算用户从当前位置到iPhone特定位置的当前速度和平均速度?

我有一个地图应用程序.当一个人从当前位置旅行到特定位置时,我想计算该人所覆盖的距离,该人的当前速度,该人的平均速度.

iphone performance distance objective-c mapkit

7
推荐指数
1
解决办法
9150
查看次数

更改已添加到mapview的MKOverlay的颜色

我有一些MKOverlays(实际上它们是MKPolygons),一旦地图出现就会加载.我想动态改变它们的颜色.我可以看到这样做的唯一方法是删除叠加层然后用新颜色添加它.在现有的叠加层上有更好的方法吗?

我是objective-c/xcode/ios的全新...所以请温柔:)

objective-c mapkit ios4 xcode4

7
推荐指数
2
解决办法
2761
查看次数

将UIButton和其他UIControl对象放在MKAnnotationView中并允许用户交互

我在地图上有一个自定义注释视图,其中有一个UIButton,但UIButton按下后没有响应.我在注释视图上有两个主要的用户交互问题:

  1. 按钮和其他控件没有响应.
  2. 我希望注释根据我的实现来阻止触摸- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event- 也就是说,如果我返回YES,那么我不希望触摸被发送到MKMapView(可能选择其他注释,这是注释我的注释视图),我想处理在这种情况下触摸自己.

我确定userInteractionEnabled已设置为YES并且我已经调查了如何MKAnnotationView通过覆盖touchesBegan等将触摸发送到自定义注释视图(我的子类)- 但似乎触摸通常被取消(我以为我设法得到touchesEnded了几次) - 所以看起来甚至很难手动实现与自定义注释视图的任何用户交互.

有没有人有任何关于允许更多用户与MKAnnotationView对象交互的见解?

iphone mapkit mkannotation ipad mkannotationview

7
推荐指数
1
解决办法
2144
查看次数

MKMapRect并显示跨越第180个子午线的地图叠加层

我正在处理从Google Geocoding API返回的视口和边界.当对给定坐标进行反向地理编码时,服务返回具有各种粒度(国家,行政区域,地点,子地点,路线等)的若干结果.我想在给定地图上当前可见区域的结果上选择最合适的.

我已经确定了比较MKMapPoint位置视口,当前地图视口和它们的交点(使用MKMapRectIntersection函数)的面积比(²)的算法.只要位置视口不跨越180子午线,这就可以很好地工作.在那种情况下,他们的交集是0.

我已经开始调查原因并作为调试辅助工具我MKPolygon在地图上显示叠加层,以便为我提供有关正在发生的事情的视觉线索.为了避免我的代码在地理坐标之间进行转换而引入的错误MKMapRect,我使用Google结果中的原始坐标构建了多边形叠加,如下所示:

CLLocationCoordinate2D sw, ne, nw, se;
sw = location.viewportSouthWest.coordinate;
ne = location.viewportNorthEast.coordinate;
nw = CLLocationCoordinate2DMake(ne.latitude, sw.longitude);
se = CLLocationCoordinate2DMake(sw.latitude, ne.longitude);
CLLocationCoordinate2D coords[] = {nw, ne, se, sw};
MKPolygon *p = [MKPolygon polygonWithCoordinates:coords count:4];
Run Code Online (Sandbox Code Playgroud)

例如,有问题的位置,这里是为美国返回的视口,类型为country的最后结果,当在弗吉尼亚州的某处进行地理编码坐标时:

Southwest: 18.9110643, 172.4546967  
Northeast: 71.3898880, -66.9453948
Run Code Online (Sandbox Code Playgroud)

注意位于视口左下角的西南坐标是如何跨越180子午线的.当在地图上显示覆盖为多边形的此位置时,它会错误地显示在USA边框的右侧(大的棕色矩形,只有左下角可见):

美国的视口覆盖在地图上 俄罗斯的视口覆盖在地图上

类似地,显示俄罗斯的位置视口显示矩形位于俄罗斯边界左侧的错误位置.

当我将位置视口转换为MKMapPoints并且MKMapRect在地图视口(上图中的白色矩形)和位置视口之间没有找到交叉点时,这在视觉上确认存在类似的问题.

我计算地图rect的方式类似于这个SO问题中的答案:
如何将由NE和SW坐标组成的特定边界拟合到可见地图视图中?
... 除非坐标跨越第180个子午线,否则工作正常.测试MKMapRectMKMapRectSpans180thMeridian返回false,使构造方法不正确. …

mapkit ios

7
推荐指数
2
解决办法
6229
查看次数

用MKMapView显示当前用户位置?

我试图通过的属性设置来显示用户的当前位置MKMapViewsetShowsUserLocationYES.默认情况下,当应用程序开始更新用户位置时,iPhone屏幕左上方会出现一个箭头.但是在显示当前位置后,箭头应该消失,但只要应用程序正在运行,它仍然存在,这意味着应用程序仍处于静止状态在后台更新位置?那我怎么能停止更新当前位置?我已经实现了立即调用的委托..

iphone mapkit ios

7
推荐指数
1
解决办法
1万
查看次数

当userLocation的视图是自定义时,不会调用didUpdateUserLocation

我有一个MKMapView应该使用自定义视图(而不是蓝点)跟踪用户的位置.为了将此视图替换为蓝点,我将其返回:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if (annotation == [mapView userLocation])
    {
        return userLocationView;
    }
}
Run Code Online (Sandbox Code Playgroud)

为了初始化跟踪,我打电话

[mapView setShowsUserLocation: YES];
[mapView setUserTrackingMode: MKUserTrackingModeFollow animated: NO];
[mapView setDelegate: self];
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,-mapView:didUpdateUserLocation:当应用程序加载时会调用一次.不幸的是,除非我-mapView:viewForAnnotation:改为具有以下实现,否则它永远不会被再次调用:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if (annotation == [mapView userLocation])
    {
        return nil;
    }
}
Run Code Online (Sandbox Code Playgroud)

通过这些更改,地图会加载蓝点作为用户位置的指示符,并且-mapView:didUpdateUserLocation:会像预期的那样频繁调用.

是否有某种互斥性来跟踪用户的位置并拥有自定义用户位置视图?我怎么能让两者都发生?

资源

该项目证明了这个问题.https://dl.dropbox.com/u/2338382/MapKitFuckery.zip

窃听器

这很可能是一个错误,我已将其作为雷达提交.在此期间,接受的答案应该证明是充分的.然而,值得注意的是,我必须完全放弃,[mapView userLocation]并且[mapView showsUserLocation]仅仅支持自定义注释和CLLocationManager.

geolocation mapkit mkmapview ios mkmapviewdelegate

7
推荐指数
1
解决办法
8526
查看次数

在Apple Maps中绘制GeoJson作为叠加层

有人能告诉我如何在Apple地图中绘制GeoJson文件作为叠加层?我想要一个完整的例子,我有多边形或多边形的形状?

如果您向我提供了用于渲染它的代码或库,那么这个文件Countries GeoJSON就足够了MKMapView

mapkit geojson mkmapview ios

7
推荐指数
1
解决办法
4841
查看次数

Swift 3 - MKPointAnnotation自定义图像

这是我的代码,我想添加自定义引脚(.png文件)而不是红色引脚.我试图使用MKPinAnnotationView和MKAnnotationView,但我无法添加坐标,字幕和标题.我是iOS开发的新手.

override func viewDidLoad() {
    super.viewDidLoad()
    // Handle the text field’s user input through delegate callbacks.
    commentTextField.delegate = self

    coreLocationManager.delegate = self
    //desired accuracy is the best accuracy, very accurate data for the location
    coreLocationManager.desiredAccuracy = kCLLocationAccuracyBest
    //request authorization from the user when user using my app
    coreLocationManager.requestWhenInUseAuthorization()

    coreLocationManager.startUpdatingLocation()

    dbRef = FIRDatabase.database().reference()

    struct Location {
        let title: String
        let latitude: Double
        let longitude: Double
        let subtitle: String
    }
    // Locations array
    let locations = [
        Location(title: "Dio Con Dio",    latitude: …
Run Code Online (Sandbox Code Playgroud)

mapkit ios mkpointannotation swift

7
推荐指数
1
解决办法
6178
查看次数

Nil drawable for layer <Metal Layer:0x17069b850>

在运行我的应用程序时Nil drawable for layer <Metal Layer: 0x17069b850>出现错误MKMapViewController.

xcode calayer mapkit mkmapview ios

7
推荐指数
1
解决办法
601
查看次数