我无法理解为什么我的MKMapView不想更改为卫星视图.这个方法被调用,案例1被调用我已经跨过它,但它根本不会改变为卫星类型,它总是变为标准.它只在返回Map类型时才有效.有人有主意吗?
- (IBAction)mapSatelliteSegmentControlTapped:(UISegmentedControl *)sender
{
switch (sender.selectedSegmentIndex)
{
case 1: //Satellite
self.mapView.mapType = MKMapTypeSatellite;
default: //Map
self.mapView.mapType = MKMapTypeStandard;
}
}
Run Code Online (Sandbox Code Playgroud) 如何在地图中显示图像而不是图钉.到目前为止,我只能添加引脚..m的示例代码非常有用,因为我还是iOS编程的新手.
我正在开发适用于iOS的示例地图套件应用程序.我有一切工作和一个工具栏按钮来切换MKUserTrackingMode.这可能看起来像一个愚蠢的问题,但我已经搜索了IB中的所有选项并查看了文档,我找不到任何按钮选项,例如iOS Maps应用程序中使用的当前位置/指南针标题.开发人员可以使用该特定按钮吗?
如何以度/弧度转换纬度和经度?你们有任何公式或任何想法吗?我想在MapKit上显示它.谢谢.....
几乎所有主要新闻媒体都报道苹果将停止在iOS6中使用谷歌地图服务.我认为没有人真正知道这些变化究竟是什么,什么时候推出,苹果将如何实施它们以及Google或Apple是否会开始为其服务收费.由于存在这些不确定因素,我无法就是否应该发布一个我已经工作了一年多的新公共汽车追踪器应用程序做出明智的决定.我已经设定了2012年6月15日的最初硬截止日期.我知道最好的办法是等待,看看将会发生什么变化以及Apple将如何实施这些变化.但我有点不耐烦并且强调要推迟发布日期,因为任何进一步的延迟都会以非常重要的方式影响我的许多其他计划.
有关该应用的更多信息:
它根据从第三方运输机构的API获得的信息提供实时公共交通信息.它在很大程度上取决于iOS MapKit框架和iOS位置服务,以实时显示给定路径上的总线的当前地理位置,并在两个位置之间提供传输信息.据Apple称,iOS MapKit框架使用Google服务提供地图数据.某些功能会调用Google地图应用以提供到最近站点的中转计划和转弯路线指示.
我的问题:
如果谣言成真,你认为Apple肯定会实施任何改变而不会影响已经使用当前MapKit框架的应用程序吗?我应该准备什么样的潜在问题?
我正在使用一个MKUserTrackingBarButtonItem按钮,允许用户自动跟踪他们在地图上的位置.问题是,当他们点击此按钮时,它会被缩放得太远.我希望它以指定的缩放级别(即跨度)开始.我怎样才能做到这一点?
当用户点击按钮进行更改时MKUserTrackingModeFollow,它似乎使用用户上次手动更改的相同缩放级别(即在地图上使用手势).尝试通过setRegion或setVisibleMapRect不影响更改模式时将使用的缩放级别来指定不同的缩放级别MKUserTrackingModeFollow.
尝试override mapView:didChangeUserTrackingMode:设置区域会导致模式更改回MKUserTrackingModeNone.例:
- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated {
if (mode == MKUserTrackingModeFollow) {
CLLocationCoordinate2D center = mapView.userLocation.location.coordinate;
MKCoordinateSpan span = MKCoordinateSpanMake(0.002306, 0.001717);
[mapView setRegion:MKCoordinateRegionMake(center, span) animated:YES];
// [mapView setUserTrackingMode:MKUserTrackingModeFollow animated:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在设置区域后立即尝试重置模式,则在用户静止时可以正常工作,但如果用户正在移动则缩小.
最简单的解决方案是,如果有一种方法可以通过发送我的跨度值来简单地为MKUserTraking指定类似缩放级别的内容.但是,由于这似乎不存在,我还能做什么?
任何人都知道如何检查Apple Maps是否已安装?我在文档中找不到任何内容.
使用iOS10,用户可以删除Apple Maps应用程序.对于谷歌地图,我们可以UIApplication.shared.canOpenURL()用来检查它是否已安装.我不知道检查Apple Maps存在这样的事情.
当然,你可以检查是否打开MKMapItem与mapItem.openInMaps()失败-但是,这并不帮助提前检查.
我正在测试iPhone上的MapKit框架,并且非常希望将显示位置的标准引脚切换到名为"location.png"的图像.
如何修改我的代码才能允许?
Maincontroller
- (void)viewDidLoad
{
[super viewDidLoad];
//
// Set the map center
//
CLLocationCoordinate2D coordinate;
coordinate.latitude = 49.2802;
coordinate.longitude = -123.1182;
mapView.region = MKCoordinateRegionMakeWithDistance(coordinate, 2000, 2000);
//
// Set 10 random locations on the map for testing purposes
//
for(int i = 0; i < 10; i++)
{
CGFloat latDelta = rand()*.035/RAND_MAX -.02;
CGFloat longDelta = rand()*.03/RAND_MAX -.015;
CLLocationCoordinate2D newCoord = { coordinate.latitude + latDelta, coordinate.longitude + longDelta };
MapAnnotation* annotation = [[MapAnnotation alloc] initWithCoordinate:newCoord];
[mapView addAnnotation:annotation];
[annotation …Run Code Online (Sandbox Code Playgroud) 更新:
使用MKOverlayView投影在MKMapView上的图像使用墨卡托投影,而我用作输入数据的图像使用WGS84投影.有没有办法将输入图像转换为正确的投影WGS84 - >墨卡托,没有平铺图像,可以在运行中完成吗?
通常,您可以使用程序gdal2tiles将图像转换为右投影.然而,输入数据每十五分钟改变一次,因此图像必须每十五分钟转换一次.所以转换必须在飞行中完成.我也想平铺由Mapkit完成,而不是通过使用gdal2tiles或GDAL框架自己.
更新结束
我目前正在开展一个项目,在世界某些地方展示降雨雷达.雷达图像是由欧洲气象卫星应用组织提供的,他们提供可以被加载到谷歌地球或谷歌地图KML文件.如果我加载在谷歌地图的KML文件,它显示完美,但如果我画上的MKMapView使用MKOverlayView的图像时,图像略微的.
例如,在左侧,Google地图和右侧,相同的图像显示在MKMapView上.


该图像覆盖可以被看作表面谷歌地图,即用于图像的卫星是"气象卫星0度"卫星.
这两个图像覆盖面大小是一样的,这是从KML文件LatLonBox,它指定了顶部,底部,右侧和左侧地面叠加的边界框的两侧对齐.
<LatLonBox id="GE_MET0D_VP-MPE-latlonbox">
<north>57.4922</north>
<south>-57.4922</south>
<east>57.4922</east>
<west>-57.4922</west>
<rotation>0</rotation>
</LatLonBox>
Run Code Online (Sandbox Code Playgroud)
我用这些参数创建了一个名为RadarOverlay的新自定义MKOverlay对象,
[[RadarOverlay alloc] initWithImageData:[[self.currentRadarData objectAtIndex:0] valueForKey:@"Image"] withLowerLeftCoordinate:CLLocationCoordinate2DMake(-57.4922, -57.4922) withUpperRightCoordinate:CLLocationCoordinate2DMake(57.4922, 57.4922)];
Run Code Online (Sandbox Code Playgroud)
自定义MKOverlay对象的实现; RadarOverlay
- (id) initWithImageData:(NSData*) imageData withLowerLeftCoordinate:(CLLocationCoordinate2D)lowerLeftCoordinate withUpperRightCoordinate:(CLLocationCoordinate2D)upperRightCoordinate
{
self.radarData = imageData;
MKMapPoint lowerLeft = MKMapPointForCoordinate(lowerLeftCoordinate);
MKMapPoint upperRight = MKMapPointForCoordinate(upperRightCoordinate);
mapRect = MKMapRectMake(lowerLeft.x, upperRight.y, upperRight.x - lowerLeft.x, lowerLeft.y - upperRight.y);
return self;
}
- (CLLocationCoordinate2D)coordinate
{
return MKCoordinateForMapPoint(MKMapPointMake(MKMapRectGetMidX(mapRect), MKMapRectGetMidY(mapRect)));
}
- (MKMapRect)boundingMapRect
{
return mapRect;
} …Run Code Online (Sandbox Code Playgroud) 所以我的代码工作正常,但我的记录器充满了这个消息.有没有办法摆脱它或抑制它?
PostAnnotation.swift
class PostAnnotation: MKPointAnnotation {
//MARK: properties
let post: Post
//MARK: initialization
init(post: Post) {
self.post = post
super.init()
self.coordinate = CLLocationCoordinate2D(latitude: post.latitude, longitude: post.longitude)
self.title = post.title
self.subtitle = post.timeString()
}
}
Run Code Online (Sandbox Code Playgroud)
添加注释
let annotation = PostAnnotation(post: post)
self.map.addAnnotation(annotation)
Run Code Online (Sandbox Code Playgroud)
func mapView
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "pin") as? MKPinAnnotationView
if annotationView == nil {
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")
} …Run Code Online (Sandbox Code Playgroud) mapkit ×10
ios ×8
iphone ×4
objective-c ×4
cocoa-touch ×2
apple-maps ×1
ios10 ×1
ios5 ×1
ios6-maps ×1
mkmapview ×1
swift ×1
xcode ×1