我正计划在iPhone上徒步旅行的地图项目.
由于移动网络可能无法覆盖徒步旅行区域.因此,有必要预先缓存该区域的地图(Google).
1)MapKit Framework是否支持在本地缓存iPhone上的Google Map?2)MapKit Framework可以支持在GPS期间使用离线地图吗?
谢谢.
我想确定用户是否滚动了超过地图的某个百分比,然后禁用地图从用户位置居中(类似于地图应用的工作方式).
我不确定使用哪种方法.
我认为创建一个矩形并查看矩形是否包含当前中心点是很简单的,但是我必须以IOS 3为目标,因此我无法使用许多较新的Mapkit apis.
我已尝试使用CLLocation,并在当前mapcenter和用户位置之间使用distanceFrom,但我试图弄清楚该距离是否为某个百分比.
我一直在测试CoreLocation各个方面的准确性,并惊讶地发现传递给CLLocationMangerDelegate方法的新旧位置提供的准确性值:( void)locationManager:didUpdateToLocation:fromLocation本身非常不准确.
走一段路面(沿着一段道路,沿着建筑物的一侧)我发现,虽然CLLocationManager声称它提供的CLLocations具有5米的水平精度,实际上MKUserAnnotation显示的位置是任何高达距离我所知道的位置30米(通常显示为一排建筑物的对面).这表明精确度读数本身并不准确.CLLocationManager告诉我它的坐标精确到5米以内但实际上多达30米.
为了澄清,这不是缓存/时间戳问题它在某些领域是可重复的,而不是随着时间的推移而改进的东西.
还有其他人遇到过这个问题吗?
我需要在地图上显示MKOverlay,但无法让它实际显示.
我正在关注Apple的位置感知编程指南中的示例,并且不会显示叠加层.任何帮助将不胜感激,这是我制作的第一个iPhone应用程序,所以我可能会遗漏一些简单的东西.
NavViewController.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface NavViewController : UIViewController <MKMapViewDelegate> {
}
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@end
Run Code Online (Sandbox Code Playgroud)
NavViewController.m
#import "MSUNavViewController.h"
#import <CoreLocation/CoreLocation.h>
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKPolygon class]])
{
MKPolygonView* aView = [[MKPolygonView alloc] initWithPolygon:(MKPolygon*)overlay];
aView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2];
aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7];
aView.lineWidth = 3;
return aView;
}
return nil;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Define an overlay that covers Colorado.
CLLocationCoordinate2D …Run Code Online (Sandbox Code Playgroud) 谷歌地图现在可以在Appstore for IOS 6中使用.我有一个应用程序利用MAPKIT和WebView显示使用谷歌网络服务的驾驶方向.为了在Native Apple MAP应用程序中显示Route,我使用类似于此的代码.
MKMapItem *mapItem = [[MKMapItem alloc]initWithPlacemark:place];
NSDictionary *options = @{
MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving
};
[mapItem openInMapsWithLaunchOptions:options];
Run Code Online (Sandbox Code Playgroud)
我想在用户设备上安装的New Google MaP App中向用户显示Route,将其UI嵌入我应用中的View中.
请指导我.
我需要为地图中的每个注释添加一个 Id 以通过单击注释中的信息按钮打开新的视图控制器,我的问题是准备和执行 segue,我创建了它,但我不知道如何将 id 传递给赛格。
我为注释创建了子类来存储来自 JSON 的 ID
那是我的代码的一部分:
从 JSON 获取所有数据:
for location in self.locations {
let annotation:MyAnnotation = MyAnnotation()
annotation.title = location["truck_name"] as? String
annotation.customTruckId = location["truck_id"] as? String
annotation.coordinate = CLLocationCoordinate2D(latitude: (location["coor_x"] as! NSString).doubleValue, longitude: (location["coor_y"] as! NSString).doubleValue)
self.AllMapView.addAnnotation(annotation)
}
Run Code Online (Sandbox Code Playgroud)
我创建的子类:
class MyAnnotation : MKPointAnnotation {
var customTruckId : String?
}
Run Code Online (Sandbox Code Playgroud)
问题就在这里:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "ShowTruckFromMap") {
let des_VC = segue.destination as! TruckDetailsVC
des_VC.truck_id = "How to …Run Code Online (Sandbox Code Playgroud) 当点击地图上的集群注释时,我试图获取集群的所有成员(iOS 11)。有谁知道怎么获得吗?
以下代码添加了集群:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if #available(iOS 11.0, *) {
if annotation is MKClusterAnnotation {
var anView = mapView.dequeueReusableAnnotationView(withIdentifier: "cluster")
return anView
}
}
}
Run Code Online (Sandbox Code Playgroud)
当点击集群时无法获得集群成员
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
if #available(iOS 11.0, *) {
if view.annotation is MKClusterAnnotation {
print(view.clusteringIdentifier)
print(view.reuseIdentifier)
//*** Need array list of annotation inside cluster here ***
} else {
}
}
}
Run Code Online (Sandbox Code Playgroud)
获取集群成员的唯一方法是:
func mapView(_ mapView: MKMapView, clusterAnnotationForMemberAnnotations memberAnnotations: [MKAnnotation]) -> MKClusterAnnotation …Run Code Online (Sandbox Code Playgroud) 我想使用自定义标记图像而不是脉冲蓝点 - 有没有办法在使用用于 ios 的苹果地图和用于 Android 的谷歌地图的反应原生地图中自定义它?
我已MKUserTrackingButton在地图视图中将 Apple 的新功能添加到我的应用程序中。当用户先前已授予使用位置服务的许可(例如CLAuthorizationStatus.authorizedWhenInUse)时,它可以正常工作。
但是,当用户拒绝权限或权限状态未确定时,用户跟踪按钮会变成活动指示器(又名微调器)并且永不停止旋转。
相反,我想像在 Apple Maps 应用程序中一样显示 iOS 权限警报,或者至少显示某种警报,以向用户提示为什么它不起作用。当然,我也希望活动指示器停止并返回默认的“指南针”图标。
不幸的是,MKUserTrackingButton它不是一个 sublass,UIButton所以我不能向它添加任何目标,而且似乎没有 API 来改变按钮的视觉状态。
知道如何做到这一点吗?
我已经使用MapKit实现了 Apple SwiftUI 教程的略微更改版本。
当我运行它时,我收到错误消息并调整我得到的相应视图的大小:
[SwiftUI] NSHostingView is being laid out reentrantly while rendering its SwiftUI content. This is not supported and the current layout pass will be skipped.
查看调用代码:
MapView(coordinate: location?.coordinates)
.frame(minHeight: 200)
.overlay(
GeometryReader{
proxy in
Button("Open in Maps") {
if (self.location?.coordinates != nil){
let destination = MKMapItem(placemark: MKPlacemark(coordinate: self.location!.coordinates))
destination.name = "the car"
destination.openInMaps()
}
}
.frame(width: proxy.size.width, height: proxy.size.height, alignment: .bottomTrailing)
.offset(x: -10, y: -10)
}
)
Run Code Online (Sandbox Code Playgroud)
地图视图结构:
import SwiftUI
import MapKit
/// a …Run Code Online (Sandbox Code Playgroud)