gpt4 book ai didi

iphone - 从来自网络服务的位置创建多个 MKOverlays 折线

转载 作者:行者123 更新时间:2023-11-29 13:19:49 26 4
gpt4 key购买 nike

我的应用程序是实时跟踪器,多个用户登录并通过将他们的坐标发送到我们的网络服务来更新他们的位置,然后每 2 分钟回调一次,让我们在我的 MapView 上显示所有用户。

每次我在 connectionDidFinishLoading 方法中从 Web 服务获取用户的位置时,我都在解析、创建 polylinepointsArray 并将它们添加到 overlay 中:

-(void) connectionDidFinishLoading: (NSURLConnection *) connection
{
userLatitudeArray = [[NSMutableArray alloc]init];
userLongitudeArray = [[NSMutableArray alloc]init];
userIdArray = [[NSMutableArray alloc]init];
userNameArray = [[NSMutableArray alloc]init];
userProfilePicArray = [[NSMutableArray alloc]init];
profilePicURLStringArray = [[NSMutableArray alloc]init];

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

NSArray *trackingDict = [NSJSONSerialization JSONObjectWithData:empJsonData options:kNilOptions error:nil];

if ([trackingDict count] >= 2) {
for (trackUsersCount = 0; trackUsersCount< trackingDict.count; trackUsersCount++) {
NSLog(@"trackUsersCount %i", trackUsersCount);

NSMutableArray *latlongArray = [[NSMutableArray alloc]init];
latlongArray = [[trackingDict objectAtIndex:trackUsersCount]objectForKey:@"latlong"];

[userLongitudeArray removeAllObjects];
[userLatitudeArray removeAllObjects];

for (int i = 0; i<latlongArray.count; i++) {
[userLatitudeArray addObject:[[latlongArray objectAtIndex:i]objectForKey:@"lat"]];
[userLongitudeArray addObject:[[latlongArray objectAtIndex:i]objectForKey:@"long"]];

}

NSString *name = [[trackingDict objectAtIndex:trackUsersCount]objectForKey:@"user_firstName"];

// ProfilePIC URL
profilePicURLString = [[trackingDict objectAtIndex:trackUsersCount]objectForKey:@"user_profilePicture"];


[userNameArray addObject:name];
[profilePicURLStringArray addObject:profilePicURLString];

int i;
if (userLatitudeArray.count>1) {

for (i = 0; i<userLatitudeArray.count; i++) {
CLLocationCoordinate2D userLocation;
userLocation.latitude = [[userLatitudeArray objectAtIndex:i]doubleValue];
userLocation.longitude = [[userLongitudeArray objectAtIndex:i] doubleValue];
MKMapPoint * pointsArray = malloc(sizeof(CLLocationCoordinate2D)*userLongitudeArray.count);
pointsArray[i] = MKMapPointForCoordinate(userLocation);
polyline = [MKPolyline polylineWithPoints:pointsArray count:i];
free(pointsArray);
}
polyline.title = name;
[mapView addOverlay:polyline];
}
}
}
}

我想做的是控制为每个用户创建的每个 polyline,这样我就可以更改它的颜色并通过单击按钮隐藏/显示它们(一个用于显示/隐藏我的轨道,另一个用于所有其他用户),这就是我为其添加标题的原因。我现在可以看到我将 polyline 添加到同一个 overlay ,我认为这是错误的。但我不知道 Web 服务中会有多少用户,因此可以添加它们的多个叠加层。

最初我以为我可以删除带有标题的特定 polyline,但后来我意识到它正在删除所有 polyline.title 属性得到更新。

如有任何帮助,我们将不胜感激!

最佳答案

您可以收集一系列与其他用户相关的轨道,并为当前用户保留一个轨道。如果您在 connectionDidFinishLoading 函数的开头清理数组并将其填充到您当前将叠加层添加到 map 的位置,那么您将 addOverlay 移动到一个新函数你在最后打电话。

- (void) resetMap
{
if (showOtherTracks)
{
[mapView addOverlays:otherUserTracks];
} else {
[mapView removeOverlays:otherUserTracks];
}
if (showMyTrack)
{
[mapView addOverlay:myTrack];
} else {
[mapView removeOverlay:myTrack];
}
}

您也可以在按下按钮并且状态发生变化时调用它。

关于iphone - 从来自网络服务的位置创建多个 MKOverlays 折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14640256/

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