많이 연구하고 해결책을 찾지 못한 후에 물어보십시오. Mysql에서 Long/Lat 점 사이의 거리를 어떻게 계산합니까? (효율적인 방법?)두 개의 long/lat 사이의 거리를 계산하십시오.
또한 this 해결책을 찾았지만, 거기에 내가 @long가 @lat 알고 해달라고 스프링 데이터 JPA 나던 (MysqlSpatial 방언을 사용 제외) 지오메트리 유형을 수 있기 때문에 내가 포인트를 사용하고 있지 않다자바에서 나는 다음과 같이 계산하고 있습니다 :
private double getDistanceFromLatLonInKm(double lat1,double lon1,double lat2,double lon2) {
int R = 6371; //Earth Radius
double dLat = degreeToRadiant(lat2-lat1);
double dLon = degreeToRadiant(lon2-lon1);
double a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(degreeToRadiant(lat1)) * Math.cos(degreeToRadiant(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
return R * c; //Distance in km
}
그리고 내 테이블/법인 위도 하나의 경도에 대한 열 및 다른 포함되어 있습니다.
또 다른 질문은 봄 데이터 jpa로 이전에 말한 것처럼 이것을 해결할 수 있을까요?
자바 코드를 MySQL로 변환하려고했지만 거리가 길어졌습니다. 나는 솔루션 위의 내 코드에서 실수를 발견
SELECT name, (6371 * (
2 * ATAN2(
SQRT(
SIN(RADIANS((48.3069400-latitude))/2) * SIN(RADIANS((48.3069400-latitude)/2)) +
COS(RADIANS(latitude)) * COS(RADIANS(48.3069400)) * SIN(RADIANS((48.3069400-longitude)/2)) *
SIN(RADIANS((48.3069400-longitude)/2))
),SQRT(
1-(SIN(RADIANS((48.3069400-latitude))/2) * SIN(RADIANS((48.3069400-latitude)/2)) +
COS(RADIANS(latitude)) * COS(RADIANS(48.3069400)) * SIN(RADIANS((48.3069400-longitude)/2)) *
SIN(RADIANS((48.3069400-longitude)/2)))
)
)
)) as distance FROM event
[두 위도/경도 사이의 거리를 찾는 가장 빠른 방법] 가능한 복제본 (https://stackoverflow.com/questions/1006654/fastest-way-to-find-distance-between-two-lat-long- 포인트) –
나는 이미 세 번째 문장에서 링크했습니다 ... –
@ MarkusG.what는 귀하의 MySQL 버전입니까? – olegsv