标签: mapkit

在注释中用文本标签替换图标引脚?

是否可以用动态文本标签替换注释的图钉图标?

也许使用CSS,或动态创建图像?

例如,使用JavaScript在Google Maps API上使用CSS完成标签.

iphone mapkit ios

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

在iOS 7地图上显示路线:addOverlay无效

我想在我的mapView中显示一个指向点的路线,我使用此代码创建路线:

- (IBAction)backToYourCar {
    MKPlacemark *sourcePlacemark = [[MKPlacemark alloc] initWithCoordinate:self.annotationForCar.coordinate addressDictionary:nil];
    NSLog(@"coordiante : locationIniziale %f", sourcePlacemark.coordinate.latitude);
    MKMapItem *carPosition = [[MKMapItem alloc] initWithPlacemark:sourcePlacemark];
    MKMapItem *actualPosition = [MKMapItem mapItemForCurrentLocation];
    NSLog(@"coordiante : source %f, ActualPosition %f", carPosition.placemark.coordinate.latitude ,actualPosition.placemark.coordinate.latitude);
    MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
    request.source = actualPosition;
    request.destination = carPosition;
    request.requestsAlternateRoutes = YES;

    MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
        if (error) {
            NSLog(@"Error : %@", error);
        }
        else {
            [self showDirections:response]; //response is provided by the CompletionHandler …
Run Code Online (Sandbox Code Playgroud)

mapkit ios mkmapitem ios7 xcode5

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

MapKit iOS 9 detailCalloutAccessoryView用法

在观看WWDC视频206后,我认为将详细的标注视图添加到mapView注释视图是一项微不足道的任务.

所以,我认为我做错了什么.

设置了引脚视图

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {

    let view:MKAnnotationView!

    if let dequed = routeMapView.dequeueReusableAnnotationViewWithIdentifier("pin") {
        view = dequed
    }
    else {
        view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")
    }

    let x = UIView(frame: CGRectMake(0, 0, 200, 200))
    x.backgroundColor = UIColor.redColor()

    // shows the red
    //view.leftCalloutAccessoryView = x

    // working as no subtitle - but no red view
    view.detailCalloutAccessoryView = x

    view.canShowCallout = true
    return view
}
Run Code Online (Sandbox Code Playgroud)

我只能得到这个

在此输入图像描述

我知道这个观点正在发挥作用,因为如果我试着用它leftCalloutAccessoryView来做 在此输入图像描述

我肯定错过了什么.请注意,如果我只是添加图像detailCalloutAccessoryView

view.detailCalloutAccessoryView …
Run Code Online (Sandbox Code Playgroud)

mapkit mkannotationview ios

18
推荐指数
2
解决办法
9238
查看次数

如何将点击手势转换为 SwiftUI 地图视图中的坐标?

我正在尝试将一个MapAnnotation项目添加到我的Map()视图中MapKit

如果您在文本字段中手动添加坐标,则一切正常,但我找不到任何通过点击地图来添加坐标的方法。

我在互联网上阅读了很多内容,但没有找到任何有关onTap()地图事件处理的信息。

这是我到目前为止的地图视图的样子:

struct MyMap : View {
    
    @State private var myRegion:MKCoordinateRegion = {
        var newRegion = MKCoordinateRegion()
        newRegion.center.latitude = 53.7576508
        newRegion.center.longitude = -11.1811597
        newRegion.span.latitudeDelta = 0.1
        newRegion.span.longitudeDelta = 0.1
        
        return newRegion
    }()
    
    
    @State private var annotationItems : [Annotation] = [
        Annotation(name: "Pin1", description: "myDescription", coordinate: CLLocationCoordinate2D(latitude: 123.7576508, longitude: -7.2373215))
    ]
    
    var body: some View {
        
        ZStack {
            Map(coordinateRegion: self.$myRegion, interactionModes: .all, annotationItems: annotationItems){ item in
                MapAnnotation(coordinate: item.coordinate){
                    PinView(pin: item)
                } …
Run Code Online (Sandbox Code Playgroud)

mapkit swiftui

18
推荐指数
2
解决办法
3777
查看次数

适用于Mac OS X的MapKit?

在iPhone上,我们拥有Apple惊人的MapKit.Mac OS X有类似的东西吗?

如果可能的话,比简单的WebView更先进,因为我需要它至少自动管理:

  • 注释
  • 用户交互
  • 放大/缩小
  • 叠加视图

(即使地图不是来自谷歌也没关系.)

非常感谢你!

maps cocoa view mapkit

17
推荐指数
1
解决办法
8317
查看次数

iOS - 如何将MapView限制为特定区域?

我有以下问题:

我有一个"绘制的地图"(图像),我作为叠加添加到MapView.有没有问题..但我需要的MapView限制在覆盖的区域,因此用户不能滚动/缩放这个区域之外..但它应该可以滚动/变焦的"边界内"覆盖 - 意味着我不能只为MapView禁用缩放/滚动.

关于这个主题有什么想法/解决方案吗?使用MapView/-Kit的原因是我需要将各种POI添加到自定义地图.仅使用ImageView + ScrollView呈现自定义地图时,这可能会变得更加复杂.

我已经研究了很多这个主题,但我没有找到一个很好的解决方案.

任何帮助表示赞赏!

最诚挚的问候,基督徒

编辑:这是我们的解决方案: 您提供了一个topleft和一个底部坐标来限制地图.(最小)缩放级别也是有限的.我已经停用减速功能,你可以从地图中弹出一点(为了更好的性能/ ux).我在叠加层上添加了一个〜1km的灰色边框,因此用户无法看到谷歌的原始世界地图.

LimitedMapView.h:

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>


@interface LimitedMapView : MKMapView <UIScrollViewDelegate>{

}

@property (nonatomic, assign) CLLocationCoordinate2D topLeftCoordinate;
@property (nonatomic, assign) CLLocationCoordinate2D bottomRightCoordinate;


@end
Run Code Online (Sandbox Code Playgroud)

LimitedMapView.m:

#import "LimitedMapView.h"

@implementation LimitedMapView

@synthesize topLeftCoordinate, bottomRightCoordinate;

- (void)scrollViewDidZoom:(UIScrollView *)scrollView{

    if([super respondsToSelector:@selector(scrollViewDidZoom:)]) [super scrollViewDidZoom:scrollView];

    if ([self region].span.latitudeDelta > 0.002401f || [self region].span.longitudeDelta > 0.003433f) {

        CLLocationCoordinate2D center = self.centerCoordinate;
        MKCoordinateSpan span = MKCoordinateSpanMake(0.002401f, 0.003433f);

        self.region = MKCoordinateRegionMake(center, span);

    }

}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

    if([super …
Run Code Online (Sandbox Code Playgroud)

iphone region mapkit ios android-mapview

17
推荐指数
2
解决办法
2万
查看次数

检测点是否在MKPolygon覆盖范围内

我希望能够判断tap是否在MKPolygon中.

我有一个MKPolygon:

CLLocationCoordinate2D  points[4];

points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116);
points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066);
points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981);
points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267);

MKPolygon* poly = [MKPolygon polygonWithCoordinates:points count:4];

[self.mapView addOverlay:poly];  

//create UIGestureRecognizer to detect a tap
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(foundTap:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self.mapView addGestureRecognizer:tapRecognizer];
Run Code Online (Sandbox Code Playgroud)

它只是科罗拉多州的基本轮廓.

我得到了lat/long转换设置:

-(IBAction)foundTap:(UITapGestureRecognizer *)recognizer
{
    CGPoint point = [recognizer locationInView:self.mapView];

    CLLocationCoordinate2D tapPoint = [self.mapView convertPoint:point toCoordinateFromView:self.view];
}
Run Code Online (Sandbox Code Playgroud)

但如果我的分接点在MKPolygon内,我不确定如何技术.似乎没有办法做这个检查,所以我猜我需要将MKPolygon转换为CGRect并使用CGRectContainsPoint.

MKPolygon有一个.points属性,但我似乎无法让它们退出.

有什么建议?

编辑:

以下两种解决方案均适用于iOS 6或更低版本,但在iOS 7中有效.在iOS 7中,该polygon.path属性始终返回NULL.安娜女士非常友好地提供了另一个SO问题的解决方案.它涉及从多边形点创建自己的路径以进入 …

objective-c mapkit mkmapview ios

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

在iOS 6上使用mapkit usertrackingwithheading模式时遇到问题

我想我可能已经在iOS4的mapkit API中发现了一个错误,但由于我仍然认为自己是一个新手,我想我会在这里查看是否有人可以指出我可能做错了什么.

我有一个应用程序,我已经工作了几个星期,在其中使用mapview并利用MKUserTrackingButton来切换跟踪模式.在iOS 5上它工作正常但是从升级到6它有奇怪的行为.当你将mapview放入跟踪带有标题的用户之后的跟踪模式时,如果你相对静止,它会很好,但是当你开始在汽车中移动时,每次回到常规跟踪模式时它会以航向模式退出轨道.经过许多令人沮丧的时间试图找出它后,我决定使用最小的mapview制作一个新的简单应用程序并跟踪,看看它是否只是我的编码或可能的错误.新的应用程序做同样的事情.我发布了以下所有代码.希望有人可以帮我告诉我,如果我做错了.

这是app delegate标题

//  iTrackerAppDelegate.h
//  iTracker
//
//  Created by Victor Hudson on 9/22/12.
//  Copyright (c) 2012 Victor Hudson. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "TrackerViewController.h"

@interface iTrackerAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) IBOutlet UIWindow *window;

@end
Run Code Online (Sandbox Code Playgroud)

这是app委托实现

    //
    //  iTrackerAppDelegate.m
    //  iTracker
    //
    //  Created by Victor Hudson on 9/22/12.
    //  Copyright (c) 2012 Victor Hudson. All rights reserved.
    //

    #import "iTrackerAppDelegate.h"

    @implementation iTrackerAppDelegate

    @synthesize window = _window;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary …
Run Code Online (Sandbox Code Playgroud)

user-tracking mapkit ios6 ios6-maps

17
推荐指数
1
解决办法
1662
查看次数

地图的离线缓存

我非常需要为我的应用做离线地图,因为它主要是为泰国制作的,因为泰国通常很难连接互联网.我现在正在使用OpenStreetMap我的MKTileOverlay但是在实现它以供离线使用时遇到问题.我找到了一个教给子类的教程MKTileOverlay.所以,在我ViewController的地图上我有:

 - (void)viewWillAppear:(BOOL)animated {

    CLLocationCoordinate2D coord = {.latitude =  15.8700320, .longitude =  100.9925410};
    MKCoordinateSpan span = {.latitudeDelta =  3, .longitudeDelta =  3};
    MKCoordinateRegion region = {coord, span};
    [mapView setRegion:region];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.title = @"Map";
    NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
    self.overlay = [[XXTileOverlay alloc] initWithURLTemplate:template];
    self.overlay.canReplaceMapContent = YES;
    [mapView addOverlay:self.overlay level:MKOverlayLevelAboveLabels];
}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)overlay {

    return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
}
Run Code Online (Sandbox Code Playgroud)

在我的子类中MKTileOverlay,我有:

- (NSURL *)URLForTilePath:(MKTileOverlayPath)path { …
Run Code Online (Sandbox Code Playgroud)

openstreetmap mapkit offline-caching ios mktileoverlay

17
推荐指数
1
解决办法
1297
查看次数

MapKit(MKMapView):zPosition在iOS11上不再起作用

iOS11zPosition停止的annotationView.layer工作.每次地图区域发生变化.

在此输入图像描述

  • 原始解决方案没有运气:layer.zPosition = X;
  • 没有运气bringViewToFront/ SendViewToBack方法

Xcode 8.3/9

更新(解决方案感谢Elias Aalto):

创建MKAnnotationView时:

annotationView.layer.zPosition = 50;
if (IS_OS_11_OR_LATER) {
    annotationView.layer.name = @"50";
    [annotationView.layer addObserver:MeLikeSingleton forKeyPath:@"zPosition" options:0 context:NULL];

}
Run Code Online (Sandbox Code Playgroud)

在MeLikeSingleton或你在那里的任何观察者对象:

- (void)observeValueForKeyPath:(NSString *)keyPath
                         ofObject:(id)object
                           change:(NSDictionary *)change
                          context:(void *)context {

       if (IS_OS_11_OR_LATER) {

           if ([keyPath isEqualToString:@"zPosition"]) {
               CALayer *layer = object;
               int zPosition = FLT_MAX;
               if (layer.name) {
                   zPosition = layer.name.intValue;
               }
               layer.zPosition = zPosition;
               //DDLogInfo(@"Name:%@",layer.name);
           }

       } 
}
Run Code Online (Sandbox Code Playgroud)
  • 此解决方案使用layer.name值来跟踪zOrder.如果您有多个级别的zPosition(用户位置,群集,引脚,标注);)
  • 不用于循环,只有KVO
  • 我使用了一个Singleton Object来观察图层值的变化.如果您在整个应用程序中使用了多个MKMapView.

它是如何在IOS11之前工作的

..是用的

- (void)mapView:(MKMapView …
Run Code Online (Sandbox Code Playgroud)

objective-c mapkit mkannotation mkannotationview ios11

17
推荐指数
2
解决办法
2319
查看次数