gpt4 book ai didi

ios - 将十进制纬度/经度坐标转换为 iPad 屏幕坐标

转载 作者:可可西里 更新时间:2023-11-01 06:25:00 24 4
gpt4 key购买 nike

我有一个纬度/经度小数坐标,我想将其转换为适合 iPad 坐标系区域的点。

我的代码接受纬度/经度坐标并将它们转换为笛卡尔坐标(基于这个问题:convert to cartesian coordinates)转换的结果是 (2494.269287, 575.376465)。

这是我的代码(没有编译或运行时错误):

#define EARTH_RADIUS 6371

- (void)drawRect:(CGRect)rect
{
CGPoint latLong = {41.998035, -116.012215};

CGPoint newCoord = [self convertLatLongCoord:latLong];

NSLog(@"Cartesian Coordinate: (%f, %f)",newCoord.x, newCoord.y);

//Draw dot at coordinate
CGColorRef darkColor = [[UIColor colorWithRed:21.0/255.0
green:92.0/255.0
blue:136.0/255.0
alpha:1.0] CGColor];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, darkColor);
CGContextFillRect(context, CGRectMake(newCoord.x, newCoord.y, 100, 100));

}

-(CGPoint)convertLatLongCoord:(CGPoint)latLong
{
CGFloat x = EARTH_RADIUS * cos(latLong.x) * cos(latLong.y);
CGFloat y = EARTH_RADIUS * cos(latLong.x) * sin(latLong.y);

return CGPointMake(x, y);
}

如何将小数坐标转换为将显示在 iPad 屏幕上的坐标?

最佳答案

您的convertLatLongCoord: 方法不会尝试将结果点调整为屏幕坐标。如所写,您可以获得 -EARTH_RADIUS+EARTH_RADIUS 范围内的 xy 值。这些需要缩放以适合屏幕。

类似下面的内容应该有所帮助:

- (CGPoint)convertLatLongCoord:(CGPoint)latLong {
CGFloat x = EARTH_RADIUS * cos(latLong.x) * cos(latLong.y) * SCALE + OFFSET;
CGFloat y = EARTH_RADIUS * cos(latLong.x) * sin(latLong.y) * SCALE + OFFSET;

return CGPointMake(x, y);
}

SCALEOFFSET 应该是一个按如下方式确定的值:

CGSize screenSize = [UIScreen mainScreen].applicationFrame.size;
CGFloat SCALE = MIN(screenSize.width, screenSize.height) / (2.0 * EARTH_RADIUS);
CGFloat OFFSET = MIN(screenSize.width, screenSize.height) / 2.0;

这假设您希望 map 填充最小的屏幕尺寸。

关于ios - 将十进制纬度/经度坐标转换为 iPad 屏幕坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16124171/

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