我正在尝试为相应的lat / lng点数组绘制多个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
}
],
每个点都与预期完全一致,只是没有画线来连接它们。很难找到处于类似情况的其他人。欢迎提供所有帮助/建议。如有必要,可以提供其他代码。
答案 0 :(得分:1)
&#34;折线&#34; element是一个字典数组(每个字典都有该行中每个点的坐标)。
pointsCount
设置为&#34;折线&#34;中的点数。然后for-i
循环填充pointsToUse
C数组。
问题是坐标始终取自polyDict
,其中 永远不会在循环内发生变化。
polyDict
设置为折线中的第一个坐标,并且永远不会在for-i
循环中更新。
因此,您最终会得到一条折线,其中所有点都具有相同的坐标。
如果您有多条折线,最终会得到&#34;点图&#34;。
要解决此问题,删除此行:
NSDictionary *polyDict = [[NSDictionary alloc] initWithDictionary:
[polyarray objectAtIndex:0]];
和在for-i
行之前的NSString *lat = ...
循环中添加此行:
NSDictionary *polyDict = [polyarray objectAtIndex:i];
现在polyDict
将在循环迭代时指向i
坐标。
此外,我假设您已经实施了rendererForOverlay
并设置了地图视图delegate
(否则不会显示任何内容)。
alloc
+ init
新NSDictionary
polyDict
- 只需获取对polyarray
的引用即可已经在polyarray
。
annotationobject
同样如此 - 只需引用NSArray *polyarray = [annnotationobject objectForKey:@"polyline"];
中的那个:
{{1}}