gpt4 book ai didi

ios - 通过旋转将 GroundOverlay 从 KML 添加到 MKMapView

转载 作者:行者123 更新时间:2023-12-03 18:32:28 25 4
gpt4 key购买 nike

我有一个 iOS 应用程序,我想在其中读取包含 GroundOverlays 的 KML 文件。 GroundOverlay 包含图像 href、北、南、东、西坐标以及旋转。

我按照本教程 ( http://www.raywenderlich.com/30001/overlay-images-and-overlay-views-with-mapkit-tutorial ) 在 map 上显示图像。我可以成功解析 KML 并正确显示非旋转图像。问题是,我不知道如何显示旋转的图像。

要旋转我自己,我需要知道两件事:首先,如何在绘图代码中旋转图像。这个问题只是关于在 iOS 中旋转。其次,我需要知道 KML 坐标是如何受旋转影响的。东西南北坐标是旋转图像的坐标还是未旋转图像的坐标?

我广泛搜索了有关如何执行此操作的示例,但没有找到任何有用的信息。指向执行此操作的一些教程/代码的链接会很棒!

KML 的相关部分如下所示:

<GroundOverlay>
<Icon>
<href>http://developers.google.com/kml/documentation/images/etna.jpg</href>
</Icon>
<LatLonBox>
<north>37.91904192681665</north>
<south>37.46543388598137</south>
<east>15.35832653742206</east>
<west>14.60128369746704</west>
<rotation>-0.1556640799496235</rotation>
</LatLonBox>
</GroundOverlay>

我的绘图代码(我猜旋转应该发生的地方):

- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context {

CGImageRef imageReference = self.overlayImage.CGImage;

// TODO: rotate image by self.rotation degrees around center.
MKMapRect theMapRect = self.overlay.boundingMapRect;
CGRect theRect = [self rectForMapRect:theMapRect];

CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -theRect.size.height);
CGContextDrawImage(context, theRect, imageReference);
}

最佳答案

这就是我最终解决它的方式。首先,KML 坐标是未旋转图像的坐标,因此实际上无需执行任何操作即可使它们与旋转一起使用。这是完成的 drawMapRect:zoomScale:inContext

- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context {

CGImageRef imageReference = self.overlayImage.CGImage;

MKMapRect theMapRect = self.overlay.boundingMapRect;
CGRect theRect = [self rectForMapRect:theMapRect];

CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -theRect.size.height);
// Translate to center of image. This is done to rotate around the center,
// rather than the edge of the picture
CGContextTranslateCTM(context, theRect.size.width / 2, theRect.size.height / 2);

// _rotation is the angle from the kml-file, converted to radians.
CGContextRotateCTM(context, _rotation);

// Translate back after the rotation.
CGContextTranslateCTM(context, -theRect.size.width / 2, -theRect.size.height / 2);

CGContextDrawImage(context, theRect, imageReference);
}

自从我写这段代码以来已经有一段时间了,我真的不记得比这更多的细节了,但由于有人刚刚对这个问题投了赞成票,我想我至少会在我解决它的地方发布代码。希望能帮助到你! :)

关于ios - 通过旋转将 GroundOverlay 从 KML 添加到 MKMapView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346494/

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