转换数字纬度/经度坐标,以iPad的屏幕坐标(Convert decimal latitude/lo

2019-08-31 16:05发布

我有我想转换到,将适合在iPad的区域内的坐标系点的纬度/经度小数坐标。

我的代码需要在纬度/经度坐标,并将它们转换成直角坐标系(基于这样一个问题: 转换成直角坐标系 )转换的结果是(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屏幕上?

Answer 1:

convertLatLongCoord:方法并没有试图调整产生的点到屏幕坐标。 由于写的,你可以得到xy范围值-EARTH_RADIUS+EARTH_RADIUS 。 这些都需要进行调整以适合屏幕。

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

- (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;

这是假设你想要的地图,以填补最小屏幕尺寸。



文章来源: Convert decimal latitude/longitude coordinates to iPad screen coordinates