2

위도/경도 십진수 좌표를 iPad 좌표계 영역에 맞출 포인트로 변환하고 싶습니다.십진 위도/경도 좌표를 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); 
} 

어떻게 변환 할 수 있습니다 진수가 아이 패드 화면에 표시됩니다 좌표 좌표 : 여기

내 코드 (아무 컴파일 또는 런타임 오류)인가?

+0

대신 'EARTH_RADIUS' 대신 화면 너비와 높이를 곱하십시오. –

+0

@ H2CO3 - 그게 무슨 뜻이야? 망막 iPad 해상도는 2048 X 1536입니다. 그 숫자를 곱해서 생성 된 좌표는 이전보다 훨씬 커졌습니다. – tentmaking

+0

Nah, 1024 * 768 ** 점입니다. ** Quartz는 픽셀에서 작동하지 않으며, 점으로 작동합니다. –

답변

7

convertLatLongCoord: 메서드는 결과 점을 화면 좌표로 조정하지 않습니다. 서면에 따르면 및 y 값은 -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; 

.

+0

그게 효과가! 고마워. – tentmaking