菜鸟教程小白 发表于 2022-12-12 22:28:53

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 &lt; ; 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 &lt;MKOverlay&gt;)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&#39;s simpler to keep a separate index for pointArr
for (int idx = 0; idx &lt; ; 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]
查看完整版本: objective-c - 在 map 上给定点之间绘制折线