2012-02-21 3 views
2

위치 기반 앱에서 MKMapPoints를 사용하여 위치 (예 : 현재 사용자 위치)를 저장합니다. 우리가 (사용자에 확대) 처음에 표시되는 영역을 설정하려면 MKMapView에이 위치를 사용하려고하면MKCoordinateFromMapPoint 동작 이해

우리가 convernience 방법은 그것을 위해있다 CLLocationCoordinate2D

이 변환 : namenly : MKCoordinateForMapPoint, 그러나 테스트 중에는 이상한 결과가 나타납니다.

MKMapPoint mapPoint = MKMapPointMake(51.96, 6.3); // My area ;) 
    CLLocationCoordinate2D automagicCoordinate = MKCoordinateForMapPoint(mapPoint); 
    CLLocationCoordinate2D manualCoordinate = CLLocationCoordinate2DMake(mapPoint.x, mapPoint.y); 

나는 automagicCoordinate와 manualCoordinate가 정확히 동일 할 것으로 기대합니다. 그러나 나는 다음과 같은 결과를 얻을 디버거에서 그것을 검사 할 때 :

automagicCoordinate.latitude = (CLLocationDegrees) 85.05 
automagicCoordinate.longitude = (CLLocationDegrees) -179.99 

manualCoordinate.latitude = (CLLocationDegrees) 51.96 
manualCoordinate.longitude = (CLLocationDegrees) 6.3 

이 방법으로 만든 좌표 온 방법이 잘못을?

답변

7

MKMapPoint 위도와 경도가 아닙니다. 그렇다면 좌표를 "변환"하는 함수가 필요하지 않습니다.

지도 포인트는 메르카토르지도 투영에 x와 y 값은 다음과 같습니다 안내서 Understanding Map Geometry 절에서 설명하는 위치 인식 프로그래밍으로

. 맵 포인트는 계산과 관련된 수학을 단순화하기 때문에지도 좌표 대신 많은 맵 관련 계산에 사용됩니다. 당신이 평평한 표면에 세계의 곡면을 투사하는 경우

이 는 당신이 얻을 것은 경도 라인에 표시지도의 2 차원 버전 :

documentation for MKMapPoint은 명확 평행하다. ...

맵 포인트의 실제 단위는 으로 사용 된 기본 단위와 연결되어 MKMapView의 내용을 그리지 만, 단위는 직접적으로 걱정할 필요가 없습니다. ...

지도 관련 데이터를 파일로 저장할 때 좌표 값 (위도 및 경도)을 저장하고지도 지점을 저장하지 않아야합니다.

지도 지점 51.96, 6.3은지도 투영 상단 왼쪽의 좌표에 해당합니다. 좌표 (위도, 경도)로 작업하려면 혼동을 피하기 위해 CLLocationCoordinate2D을 사용하십시오.

는 (당신은 기술적으로 당신의 좌표 값을 저장하기 위해 MKMapPoint 구조체를 사용할 수 있지만 그들은 좌표로 변환하고 잘못된 유형의 사용은 단지 혼란으로 이어질 것입니다 필요가 없습니다.)