- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在实现一个 iOS 应用程序,我想在 map 上的几个给定坐标之间绘制一条折线。
我编写了代码,并得到了从我的点到无限点绘制的多段线。换句话说,线的起点从我给定的纬度和经度点开始,但线的终点是无限的,而不是另一个点。
这是我的代码...
我在名为 routeLatitudes
的 NSMutableArray
中填充了坐标。数组单元格被填充一个用于纬度,一个用于经度。
MKMapPoint* pointArr = malloc(sizeof(CLLocationCoordinate2D) * [routeLatitudes count]);
for(int idx = 0; idx < [routeLatitudes count]; idx=idx+2)
{
CLLocationCoordinate2D workingCoordinate;
workingCoordinate.latitude=[[routeLatitudes objectAtIndex:idx] doubleValue];
workingCoordinate.longitude=[[routeLatitudes objectAtIndex:idx+1] doubleValue];
MKMapPoint point = MKMapPointForCoordinate(workingCoordinate);
pointArr[idx] = point;
}
// create the polyline based on the array of points.
routeLine = [MKPolyline polylineWithPoints:pointArr count:[routeLatitudes count]];
[mapView addOverlay:self.routeLine];
free(pointArr);
和覆盖委托(delegate)
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
MKOverlayView* overlayView = nil;
if(overlay == routeLine)
{
self.routeLineView = [[[MKPolylineView alloc] initWithPolyline:self.routeLine] autorelease];
self.routeLineView.fillColor = [UIColor colorWithRed:51 green:51 blue:255 alpha:1];
self.routeLineView.strokeColor = [UIColor colorWithRed:204 green:0 blue:0 alpha:1];
self.routeLineView.lineWidth = 3;
overlayView = routeLineView;
}
return overlayView;
}
所以我需要在 map 上的点之间绘制线条。该行的开头是第一个掉落的引脚,结尾是最后一个掉落的引脚。
最佳答案
根据代码,routeLatitudes
数组包含如下列出的对象:
index 0: latitude for point 1
index 1: longitude for point 1
index 2: latitude for point 2
index 3: longitude for point 2
index 4: latitude for point 3
index 5: longitude for point 3
...
所以如果 routeLatitudes.count
是 6,它实际上只有 3 个点。
这意味着 malloc
分配了错误数量的点,并且 polylineWithPoints
调用也为叠加层指定了错误数量的点。
另一个问题是,由于 pointArr
将仅包含 routeLatitudes
所具有对象的一半,因此您不能对两个数组使用相同的索引值。
for
循环索引计数器 idx
在每次迭代时递增 2,因为这就是 routeLatitudes
点的布局方式,但随后相同的 idx
值用于设置 pointArr
。
因此对于 idx=0
,pointArr[0]
已设置,但对于 idx=2
,pointArr[2]
被设置(而不是 pointArr[1]
),等等。这意味着 pointArr
中的所有其他位置都未初始化,导致这些行“走向无穷大”。
因此更正后的代码可能如下所示:
int pointCount = [routeLatitudes count] / 2;
MKMapPoint* pointArr = malloc(sizeof(MKMapPoint) * pointCount);
int pointArrIndex = 0; //it's simpler to keep a separate index for pointArr
for (int idx = 0; idx < [routeLatitudes count]; idx=idx+2)
{
CLLocationCoordinate2D workingCoordinate;
workingCoordinate.latitude=[[routeLatitudes objectAtIndex:idx] doubleValue];
workingCoordinate.longitude=[[routeLatitudes objectAtIndex:idx+1] doubleValue];
MKMapPoint point = MKMapPointForCoordinate(workingCoordinate);
pointArr[pointArrIndex] = point;
pointArrIndex++;
}
// create the polyline based on the array of points.
routeLine = [MKPolyline polylineWithPoints:pointArr count:pointCount];
[mapView addOverlay:routeLine];
free(pointArr);
另请注意,在 malloc
行中,我将 sizeof(CLLocationCoordinate2D)
更正为 sizeof(MKMapPoint)
。这在技术上不会造成问题,因为这两个结构恰好具有相同的长度,但使用 sizeof(MKMapPoint)
是正确的,因为这是数组将要包含的内容。
关于objective-c - 在 map 上的给定点之间绘制折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11984554/
当我在定点 Z3Py 中启用解释生成选项时,我收到包含以下消息的核心转储。 Error setting 'DL_GENERATE_EXPLANATIONS', reason: unknown opti
我正在开发一些代码,可以从 HW 获取浮点或定点数据。目前我们将其作为 float 。 底层API都是定点的。所以我们必须将数据作为定点传回。我们使用的算法是 Cholesky。我想知道为什么我们必须
我有一个关于在 MATLAB 中为 Texas Instruments TMS320C64xx DSP 编写算法的问题: 我在 MATLAB 中草率地实现了我的过滤器。我的目标是使用 MATLAB E
我需要将 float 转换为Q31定点,Q31表示1个符号位,0位表示整数部分,31位表示小数部分。这意味着 Q31 只能表示 [-1,0.9999] 范围内的数字。 根据定义,从浮点转换为定点时,会
我正在使用第 3 方定点 antilog() 函数来计算分贝 out_mag = 10^( in_db/20 ) 的幅度。 antilog() 采用 Q6.25 格式作为输入,并在输出时提供 Q16.
我想将一个定点数(Q31/int32 表示具有 31 个小数位的小数)除以另一个 Q31/int32。我想计算z = y/x,知道abs(x)>abs(y)。因此,z<1,因此可以表示为另一个Q31/
我是一名优秀的程序员,十分优秀!