gpt4 book ai didi

ios - MKPolyline 仅绘图点

转载 作者:行者123 更新时间:2023-11-29 12:41:07 27 4
gpt4 key购买 nike

我正在尝试为相应的纬度/经度点数组绘制多条 MKPolylines。但是,当我将 addOverlay 添加到我的 mapView 时,点被绘制但未连接。

-(void)addAllRoutes:(NSData *)routedata{

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:routedata options:0 error:NULL];



for (NSDictionary *annnotationobject in json) {

NSArray *polyarray = [[NSArray alloc] initWithArray:[annnotationobject objectForKey:@"polyline"]];
NSDictionary *polyDict = [[NSDictionary alloc] initWithDictionary:[polyarray objectAtIndex:0]];
//NSLog(@"keys = %@",[polyDict allKeys]);
//NSLog(@"values = %@",[polyDict allValues]);

NSInteger pointsCount = polyarray.count;

CLLocationCoordinate2D pointsToUse[pointsCount];

for(int i = 0; i < pointsCount; i++){
NSString *lat = polyDict[@"lat"];
NSString *lng = polyDict[@"lng"];
CLLocationDegrees latitude = [lat doubleValue];
CLLocationDegrees longitude = [lng doubleValue];
pointsToUse[i] = CLLocationCoordinate2DMake(latitude, longitude);


}


MKPolyline *myPolyline = [MKPolyline polylineWithCoordinates:pointsToUse count:pointsCount];

[self.mapView addOverlay:myPolyline];


}

}

路由数据来自 json 文本:

    "polyline": [
{
"lat": 43.02038,
"lng": -87.897706
},
{
"lat": 43.008363,
"lng": -87.892578
},
{
"lat": 43.006454,
"lng": -87.891977
},
{
"lat": 43.005188,
"lng": -87.891827
},
{
"lat": 43.004029,
"lng": -87.891891
},
{
"lat": 43.00302,
"lng": -87.89202
},
{
"lat": 43.00184,
"lng": -87.892106
}
],

每个点都按预期绘制,只是没有画线连接它们。很难找到其他有类似情况的人。欢迎所有帮助/建议。如有必要,可以提供额外的代码。

最佳答案

“折线”元素是一个字典数组(每个字典都有直线中每个点的坐标)。

pointsCount 设置为“折线”中的点数,然后 for-i 循环填充 pointsToUse C 数组。

问题是坐标总是取自 polyDict在循环内永远不会改变。

polyDict 设置为多段线中的第一个坐标,并且永远不会在 for-i 循环中更新。
因此,您最终会得到一条所有点都具有相同坐标的多段线。

如果您有多条折线,您最终会得到“点图”。


要解决此问题,请删除此行:

NSDictionary *polyDict = [[NSDictionary alloc] initWithDictionary:
[polyarray objectAtIndex:0]];

for-i 循环中的 NSString *lat = ...之前添加这一行:

NSDictionary *polyDict = [polyarray objectAtIndex:i];

现在 polyDict 将在循环迭代时指向第 i 个坐标。


另外,我假设您已经实现了 rendererForOverlay 并设置了 map View 的 delegate(否则什么都不会显示)。



无关但请注意,您不需要为 polyDict alloc+ init 一个新的 NSDictionary - 只需获取对 polyarray 中已有的那个的引用。

对于 polyarray 也是如此——只需引用 annotationobject 中的那个:

NSArray *polyarray = [annnotationobject objectForKey:@"polyline"];

关于ios - MKPolyline 仅绘图点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24898441/

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