objective-c - 在 map 上给定点之间绘制折线
<p><p>我正在实现一个 iOS 应用程序,我想在 map 上的几个给定坐标之间绘制一条折线。</p>
<p>我编写了代码并得到了从我的点开始绘制的多段线,到达一个无限点。换句话说,线的起点从我给定的经纬度点开始,但线的终点是无限的,而不是其他点。</p>
<p>这是我的代码...</p>
<p>我在一个名为 <code>routeLatitudes</code> 的 <code>NSMutableArray</code> 中填充了坐标。数组单元格被填充一个用于纬度,一个用于填充经度。 </p>
<pre><code>MKMapPoint* pointArr = malloc(sizeof(CLLocationCoordinate2D) * );
for(int idx = 0; idx < ; idx=idx+2)
{
CLLocationCoordinate2D workingCoordinate;
workingCoordinate.latitude=[ doubleValue];
workingCoordinate.longitude=[ doubleValue];
MKMapPoint point = MKMapPointForCoordinate(workingCoordinate);
pointArr = point;
}
// create the polyline based on the array of points.
routeLine = ];
;
free(pointArr);
</code></pre>
<p>和覆盖委托(delegate)</p>
<pre><code>- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
MKOverlayView* overlayView = nil;
if(overlay == routeLine)
{
self.routeLineView = [[ initWithPolyline:self.routeLine] autorelease];
self.routeLineView.fillColor = ;
self.routeLineView.strokeColor = ;
self.routeLineView.lineWidth = 3;
overlayView = routeLineView;
}
return overlayView;
}
</code></pre>
<p>所以我需要在 map 上的点之间画线。行的开头是第一个掉线的引脚,结尾是最后一个掉线的引脚。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>根据代码,<code>routeLatitudes</code> 数组的对象如下所示:</p>
<blockquote>
<p>index 0: latitude for point 1<br/>
index 1: longitude for point 1<br/>
index 2: latitude for point 2<br/>
index 3: longitude for point 2<br/>
index 4: latitude for point 3<br/>
index 5: longitude for point 3<br/>
...</p>
</blockquote>
<p>所以如果 <code>routeLatitudes.count</code> 为 6,实际上只有 3 个点。</p>
<p>这意味着 <code>malloc</code> 分配了错误的点数,而 <code>polylineWithPoints</code> 调用也为叠加层指定了错误的点数。</p>
<p>另一个问题是,由于 <code>pointArr</code> 将只包含 <code>routeLatitudes</code> 拥有的一半对象,因此您不能对两个数组使用相同的索引值。 </p>
<p><code>for</code> 循环索引计数器 <code>idx</code> 在每次迭代中递增 2,因为这就是 <code>routeLatitudes</code> 点的布局方式,但随后相同的 <code>idx</code> 值用于设置 <code>pointArr</code>。 </p>
<p>所以对于 <code>idx=0</code>,<code>pointArr</code> 被设置,但是对于 <code>idx=2</code>,<code>pointArr </code> 被设置(而不是 <code>pointArr</code>),依此类推。这意味着 <code>pointArr</code> 中的所有其他位置都未初始化,导致行“走向无穷大”。</p>
<p>因此修正后的代码可能如下所示:</p>
<pre><code>int pointCount = / 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 < ; idx=idx+2)
{
CLLocationCoordinate2D workingCoordinate;
workingCoordinate.latitude=[ doubleValue];
workingCoordinate.longitude=[ doubleValue];
MKMapPoint point = MKMapPointForCoordinate(workingCoordinate);
pointArr = point;
pointArrIndex++;
}
// create the polyline based on the array of points.
routeLine = ;
;
free(pointArr);
</code></pre>
<p>另外请注意,在 <code>malloc</code> 行中,我将 <code>sizeof(CLLocationCoordinate2D)</code> 更正为 <code>sizeof(MKMapPoint)</code>。这在技术上并没有造成问题,因为这两个结构恰好是相同的长度,但使用 <code>sizeof(MKMapPoint)</code> 是正确的,因为这是数组将包含的内容。</p></p>
<p style="font-size: 20px;">关于objective-c - 在 map 上给定点之间绘制折线,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/11984554/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/11984554/
</a>
</p>
页:
[1]