标签: mapkit

SWIFT:IMDF 室内地图启用 3D 效果而不是平面

我正在玩新的Apple Indoor Maps Program 中的IMDF。但是,我正在试验建筑物(墙壁等)的 3D 效果。使用官方地图应用程序,我们可以通过在 89° 和 45° 之间的角度平移相机来轻松实现此效果,如下所示:

机场室内地图

现在我试图通过使间距手势来实现这一self.mapView.isPitchEnabled = true从苹果示例应用程式IMDF但结果是只有一个平坦表面。

启用音调

现在我尝试启用建筑物self.mapView.showsBuildings = true,因为我认为启用建筑物可以触发某些功能将 IMDF-Data 渲染为 3D,但结果令人失望。

启用建筑物

正如我们所看到的,IMDF-Data 仅将某种叠加层渲染到地图上。看IMDF的文档,机场室内地图也是用IMDF做的,那么诀窍在哪里呢?甚至有可能以私人开发者的身份获得 3D 效果吗?

2020 年 6 月 29 日更新:

2020 年 6 月 8 日尝试向苹果开发人员询问苹果提供的 IMDF 问题的特定电子邮件。imdfquestions@apple.com。至今没有答案。在苹果开发者论坛上问了同样的问题。也没有答案。

mapkit ios swift imdf

12
推荐指数
0
解决办法
362
查看次数

iphone缩放到mapkit上的用户位置

我正在使用地图套件并使用"showsUserLocation"显示用户的位置我使用以下代码缩放到用户的位置,但不缩放.它缩放到非洲的某个位置,尽管地图上的用户位置显示正确.

MKCoordinateRegion newRegion; 
MKUserLocation* usrLocation = mapView.userLocation; 
newRegion.center.latitude = usrLocation.location.coordinate.latitude; 
newRegion.center.longitude = usrLocation.location.coordinate.longitude;
newRegion.span.latitudeDelta = 20.0;
newRegion.span.longitudeDelta = 28.0; 
[self.mapView setRegion:newRegion animated:YES];
Run Code Online (Sandbox Code Playgroud)

为什么用户的位置正确显示而不是正确缩放.有人可以纠正我吗?

iphone zoom mapkit

11
推荐指数
1
解决办法
9814
查看次数

根据缩放级别分组/取消组合MKAnnotation(并保持快速)

我有一个有很多注释的mapview,其中大多数都非常接近.我想要做的是类似于iOS上的Photo应用程序,当它们彼此太靠近时,注释被分组,每当你缩小时,如果注释距离太远,它们就会被分组.

我已经看过这个问题,但给出的答案并不是我真正想要的.

我正在寻找可以自己实现的库或算法.

mapkit mkannotation ios

11
推荐指数
2
解决办法
3322
查看次数

当我交换参数时,为什么MKMetersBetweenMapPoints会给我不同的结果?

我实际上是在计算x和y坐标中最大和最小点之间的距离MKMapPoints.

为此,我这样做(y轴的最大距离):

MKMapPoint test1, test2;
double dist;
test1.x = 0.0;
test1.y = 0.0;
test2.x = 0.0;
test2.y = MKMapSizeWorld.height;
dist = MKMetersBetweenMapPoints(test2, test1);
NSLog(@"Distance %f",dist);
Run Code Online (Sandbox Code Playgroud)

我在控制台中得到18997878.291251.但是当我将距离计算更改为:

dist = MKMetersBetweenMapPoints(test1, test2);
Run Code Online (Sandbox Code Playgroud)

我得到18873651.664238,所以我不明白有什么区别.我甚至不知道我是否做正确的事情来获得x和y轴的最大距离值.

任何帮助将不胜感激.

iphone google-maps geolocation mapkit ios

11
推荐指数
1
解决办法
1419
查看次数

将倒圆叠加添加到地图视图

(使用iOS 5和Xcode 4.2.)

我按照这里的说明操作:http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/AnnotatingMaps/AnnotatingMaps.html#//apple_ref/doc/uid/TP40009497-CH6-SW15并使用MKCircleMKCircleView类在我的MKMapView上添加圆形覆盖.

然而我真正想要的是倒圆形叠加,就像下面草图中的左侧地图(目前我有一个像右边那样的圆形叠加):

倒置和非倒置圆形覆盖草图

对于倒圆,叠加应覆盖整个地图 - 除了可见圆.

有没有一种简单的方法可以使用MKCircle/MKCircleView类来实现这一目的?或者我是否需要更深入地定义自定义叠加对象/视图?

谢谢您的帮助 :)

mapkit ios mkoverlay ios5

11
推荐指数
2
解决办法
2001
查看次数

适用于iOS的离线MapKit解决方案

快问你的问题.我有一个我正在研究的应用程序需要使用地图,但不会有网络连接.我见过其他人就此问过类似的问题,但我的要求略有不同,所以我想发一个新问题.

以下是我对该应用的要求.

  1. 允许使用可定义的注释捏合/缩放地图
  2. 地图必须离线可用
  3. 地图应限制在某个地理区域
  4. 应用程序不必通过Apple检查.这是一个企业应用程序,将作为自助服务终端.

那么,是否存在任何人都可以建议的缓存地图图块的框架或方法?

谢谢你提前出去.

offline mapkit ipad ios

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

用户跟踪模式为MKUserTrackingModeFollowWithHeading时,MKMapView无法正确缩放

我用几行代码和两个组件创建了一个测试项目:MKMapViewUIButton.我勾选了mapView选项 - Shows user location.我还为按钮定义了一个动作,它将地图缩放到用户位置.

这是来自控制器的代码:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    self.mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
    self.mapView.delegate = self;
}

- (IBAction)changeRegion:(id)sender {
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.userLocation.coordinate, 200.0f, 200.0f);
    [self.mapView setRegion:region animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

非常简单明了,不是吗?但是当我点击按钮时,我看到了奇怪的行为:地图视图缩放到指定区域然后返回到原始缩放.有什么问题?如何同时保持缩放和跟踪用户位置?

我注意到MKUserTrackingModeFollow跟踪模式的类似行为.

PS我忘了提到它主要是iOS7的问题

objective-c mapkit ios

11
推荐指数
1
解决办法
7092
查看次数

在MKUserTrackingModeFollowWithHeading地图模式下设置MKMapCamera时奇怪的MKMapView行为

我在使用MKMapView和MKMapCamera时注意到了奇怪的行为.我需要实现一些Apple Maps应用程序的标准行为.基本上,我需要的是当Map View的用户跟踪模式设置为MKUserTrackingModeFollowWithHeading时能够在2D和3D模式之间切换.

目前,我的解决方案在userTrackingMode设置为MKUserTrackingModeNone时工作正常,但它在其他模式下执行奇怪的动画(无论我使用setCamera:动画:是或否)都会发生这种情况.当我在设置new之前和之后记录相机参数时,唯一的区别是我的音高变化.

另一个问题是改变摄像机的高度以编程方式放大或缩小.我试图在IBAction方法中使用捏合或缩小手势来模仿缩放.在followWithHeadingMode中,地图始终返回"默认"缩放级别(摄像机的高度),而在其他模式下效果很好.

我启动了示例项目来检查发生了什么,这是我的单视图应用程序的视图控制器,带有地图视图,其中出现问题:

#import "CCViewController.h"

@interface CCViewController ()
@end

@implementation CCViewController

- (void)viewDidLoad{
    [super viewDidLoad];
}

- (void)setUpMap{
    [self.mapView setShowsUserLocation: YES];
}

- (void)viewDidAppear:(BOOL)animated{
    [self setUpMap];
}

- (IBAction)mapModeSwitchClicked:(id)sender {
    MKMapCamera *newCamera = [MKMapCamera camera];
    newCamera.centerCoordinate = self.mapView.camera.centerCoordinate;
    newCamera.heading = self.mapView.camera.heading;
    newCamera.altitude = self.mapView.camera.altitude;

    if(!self.mapView.camera.pitch){
        newCamera.pitch = 50;
        self.mapModeSwitch.title = @"2D";
    }
    else{
        newCamera.pitch = 0;
        self.mapModeSwitch.title = @"3D";
    }

    [self.mapView setCamera:newCamera animated:YES];
}

- (IBAction)locateMeButtonClicked:(id)sender {

        if(self.mapView.userTrackingMode != MKUserTrackingModeFollowWithHeading)
            [self.mapView …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch mapkit mkmapview ios

11
推荐指数
1
解决办法
5183
查看次数

了解CLLocation是代表陆地还是海洋

我正在尝试构建一个API,以便了解是否CLLocation代表土地.我需要这个离线工作,因为我希望我的大多数用户都没有连接.我使用MapBox作为tile服务器,但这仍然是一个MapKit问题,因为我没有使用MapBox SDK.

我已经尝试了几种方法来确定给定坐标是代表陆地还是海洋位置:

  • 离线数据库的坐标大致构成了世界的海岸线.确定给定点是否在轮廓内部或外部仍然是一个问题.
  • png tile资源的颜色分析(必须有更好的方法!还需要大量的离线数据才能成为一种有效的方法)

另外(在上面的处理之后)是否有一种有效的方法来决定给定一个瓦片坐标(x,y,z)是否是陆地/海洋/海岸瓦片?

如果有人一直在努力解决这个问题,我会在此提出一些建议.

geo mapkit ios mapbox

11
推荐指数
2
解决办法
1097
查看次数

iOS Swift MapKit自定义注释

当我尝试放置一个引脚时,我在使用自定义注释加载到地图视图中时遇到了一些麻烦.

import UIKit
import MapKit
import CoreLocation
class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate{
@IBAction func ReportBtn(sender: AnyObject) {
    //MARK: Report Date And Time Details
    let ReportTime = NSDate()
    let TimeStamp = NSDateFormatter()
    TimeStamp.timeStyle = NSDateFormatterStyle.ShortStyle
    TimeStamp.dateStyle = NSDateFormatterStyle.ShortStyle
    TimeStamp.stringFromDate(ReportTime)
    //MARK: Default Point Annotation Begins
    let ReportAnnotation = MKPointAnnotation()
    ReportAnnotation.title = "Annotation Created"
    ReportAnnotation.subtitle = ReportTime.description
    ReportAnnotation.coordinate = locationManager.location!.coordinate
    mapView(MainMap, viewForAnnotation: ReportAnnotation)
    MainMap.addAnnotation(ReportAnnotation)
}

@IBOutlet weak var MainMap: MKMapView!
let locationManager = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()
    self.locationManager.requestWhenInUseAuthorization()
    self.locationManager.delegate = self …
Run Code Online (Sandbox Code Playgroud)

mapkit ios mapkitannotation swift

11
推荐指数
4
解决办法
4万
查看次数