SPRING :: NOTE
[ANDROID] LLH Degree를 ECEF 좌표료 변환 본문
반응형
아래와 같이 안드로이드의 LatLng 객체를 입력으로 받아 ECEF 좌표를 배열로 출력하는 Java 코드의 예 이다.
본 코드는 수학적인 계산을 수행하므로 추가적인 외부 라이브러리는 필요하지 않다.
import android.location.Location;
public class LLHtoECEFConverter {
public static double[] convertLLHtoECEF(Location location) {
double lat = Math.toRadians(location.getLatitude());
double lon = Math.toRadians(location.getLongitude());
double alt = location.getAltitude() + 10.0; // 고도는 10m 추가 (가정)
double a = 6378137.0; // 지구의 반경 (WGS84 타원체의 장축)
double f = 1 / 298.257223563; // 타원체의 편평률
double sinLat = Math.sin(lat);
double cosLat = Math.cos(lat);
double sinLon = Math.sin(lon);
double cosLon = Math.cos(lon);
double eSq = 2 * f - f * f; // 타원체의 이심률 제곱
double N = a / Math.sqrt(1 - eSq * sinLat * sinLat); // 주요반경
double x = (N + alt) * cosLat * cosLon;
double y = (N + alt) * cosLat * sinLon;
double z = (N * (1 - eSq) + alt) * sinLat;
return new double[]{x, y, z};
}
public static void main(String[] args) {
// 예시 위치
Location location = new Location("dummyProvider");
location.setLatitude(37.123456); // 위도
location.setLongitude(127.123456); // 경도
location.setAltitude(10.0); // 고도 (가정)
double[] ecef = convertLLHtoECEF(location);
System.out.println("ECEF X: " + ecef[0]);
System.out.println("ECEF Y: " + ecef[1]);
System.out.println("ECEF Z: " + ecef[2]);
}
}
위 코드에서 convertLLHtoECEF 함수는 LatLng 객체를 입력으로 받아 ECEF 좌표를 double 배열로 반환한다.
LatLng 객체에서 경도(longitude)와 위도(latitude) 값을 가져와서 LLH 좌표로 사용합니다. ECEF 좌표의 높이(height)는 10m로 가정한다.
변환된 ECEF 좌표는 double 배열로 [x, y, z] 형태로 출력된다.
main 메소드에서는 예시로 LatLng 객체를 생성하고, 해당 객체를 이용하여 ECEF 좌표를 계산하여 출력
반응형
'Development Language > JAVA · ANDROID' 카테고리의 다른 글
[붕괴:스타레일] '봉쇄 섹터 II' 그래피티 위치 (0) | 2023.06.08 |
---|---|
[ANDROID] OS13부터 적용되는 File 입출력 적용하기 (0) | 2023.05.11 |
[JAVA] ArrayList 중간배열 삭제하고 나머지 데이터 시프트 (Shift) 시키기 (0) | 2023.04.28 |
[JAVA] ArrayList에서 값이 들어있는 만큼 개수 세기 (0) | 2023.04.27 |
[ANDROID] 'android.useAndroidX' 관련 에러 (0) | 2022.11.22 |
Comments