Latitude / Longitude 에 따라 방위, 거리 등 을 계산 합 니 다.

3134 단어 long
상세 한 설명 이 들 어 있 습 니 다.
http://www.movable-type.co.uk/scripts/latlong.html
거 리 를 계산 하 다
방법 1.
double dist = 0.0; 
             double deltaLat = Math.toRadians(latVal2 - latVal1); 
             double deltaLon = Math.toRadians(lonVal2 - lonVal1); 
             latVal1 = Math.toRadians(latVal1); 
             latVal2 = Math.toRadians(latVal2); 
             lonVal1 = Math.toRadians(lonVal1); 
             lonVal2 = Math.toRadians(lonVal2); 
                double earthRadius = 6371; 
                double a = Math.sin(deltaLat/2) * Math.sin(deltaLat/2) + 
Math.cos(latVal1) * Math.cos(latVal2) * Math.sin(deltaLon/2) * Math.sin 
(deltaLon/2); 
                double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
                dist = earthRadius * c;

방법 2.
public static double calculateHaversineMI(double lat1, double long1, double lat2,double long2) {
	    double dlong = (long2 - long1) * (Math.PI / 180.0f);
	    double dlat = (lat2 - lat1) * (Math.PI / 180.0f);
	    double a = Math.pow(Math.sin(dlat / 2.0), 2)
	        + Math.cos(lat1 * (Math.PI / 180.0f))
	        * Math.cos(lat2 * (Math.PI / 180.0f))
	        * Math.pow(Math.sin(dlong / 2.0), 2);
	    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
	    double d = 6367* c;

	    return d;
	}

그리고 방위 계산.
double dLong = picLongitude - mLongitude; 
double y =  (Math.sin(dLong) * Math.cos(picLatitude)); 
double x =  (Math.cos(mLatitude) * Math.sin(picLatitude) - 
Math.sin(mLatitude)*Math.cos(picLatitude)*Math.cos(dLong)); 
double angleDegreesWrongRange = Math.abs(Math.toDegrees(Math.atan2(y, 
x))); 
float angleDegrees = (float) ((angleDegreesWrongRange+360) % 360); 
	public static String getDirection(float baseAzimuth){
		String bearingText = "";
	    if ( (360 >= baseAzimuth && baseAzimuth >= 337.5) || (0 <= baseAzimuth && baseAzimuth <= 22.5) ) bearingText = "N";
	    else if (baseAzimuth > 22.5 && baseAzimuth < 67.5) bearingText = "NE";
	    else if (baseAzimuth >= 67.5 && baseAzimuth <= 112.5) bearingText = "E";
	    else if (baseAzimuth > 112.5 && baseAzimuth < 157.5) bearingText = "SE";
	    else if (baseAzimuth >= 157.5 && baseAzimuth <= 202.5) bearingText = "S";
	    else if (baseAzimuth > 202.5 && baseAzimuth < 247.5) bearingText = "SW";
	    else if (baseAzimuth >= 247.5 && baseAzimuth <= 292.5) bearingText = "W";
	    else if (baseAzimuth > 292.5 && baseAzimuth < 337.5) bearingText = "NW";
	    
	    return bearingText;
	}

안에서 답 을 찾 을 수 있어 요.

좋은 웹페이지 즐겨찾기