gpt4 book ai didi

ios - 折线不是从用户位置绘制的(蓝点)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:12 25 4
gpt4 key购买 nike

- (void)viewDidLoad
{
[super viewDidLoad];

CLLocationCoordinate2D currentLocation;
currentLocation.latitude = self.mapView.userLocation.location.coordinate.latitude;
currentLocation.longitude = self.mapView.userLocation.location.coordinate.longitude;

CLLocationCoordinate2D otherLocation;
otherLocation.latitude = [lati doubleValue];
otherLocation.longitude = [longi doubleValue];

MKPointAnnotation *mka = [[MKPointAnnotation alloc]init];
mka.Coordinate = otherLocation;
mka.title = @"!";
[self.mapView addAnnotation:mka];

self.mapView.delegate = self;

MKMapPoint *pointsArray = malloc(sizeof(CLLocationCoordinate2D));
pointsArray[0]= MKMapPointForCoordinate(currentLocation);
pointsArray[1]= MKMapPointForCoordinate(otherLocation);
routeLine = [MKPolyline polylineWithPoints:pointsArray count:2];
free(pointsArray);

[self.mapView addOverlay:routeLine];
}

我正在使用这段代码来显示坐标之间的多段线,但我得到的是这条直线。如何解决此问题。

enter image description here

最佳答案

根据您的屏幕截图,该屏幕截图显示该行不是从用户位置开始,而是显然在东部的某个偏远位置(可能是 0,0,位于非洲海岸外的大西洋中)...

您的潜在问题是您正在尝试读取 viewDidLoad 中的 userLocation 坐标,但 map 可能尚未获得位置,在这种情况下您将从 0,0 开始绘制。

确保 showsUserLocationYES 并读取 userLocation 并改为在 didUpdateUserLocation 委托(delegate)方法中创建折线。

另请记住,如果设备正在移动或操作系统获得更好的位置,则可以多次调用 didUpdateUserLocation。如果您不考虑它,这可能会导致绘制多条线(在您将叠加创建移动到那里之后)。您可以在添加新覆盖之前删除现有覆盖,或者如果已经完成,则不添加覆盖。


此外,请注意以下事项:

发布的代码试图在两个 点之间画一条线,但是:

MKMapPoint *pointsArray = malloc(sizeof(CLLocationCoordinate2D));

仅为一个点分配空间。

另一个问题是它使用 CLLocationCoordinate2D 的大小而不是 MKMapPoint,这是您要放入数组中的内容(尽管从技术上讲这不会造成问题,因为这两个结构恰好大小相同)。

尝试将该行更改为:

MKMapPoint *pointsArray = malloc(sizeof(MKMapPoint) * 2);


请注意,您也可以只使用 polylineWithCoordinates 方法,这样您就不必将 CLLocationCoordinate2D 转换为 MKMapPoints。

关于ios - 折线不是从用户位置绘制的(蓝点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20350685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com