저는 PostgreSQL을 사용하여 내 안드로이드 앱이 서버에 보내는 사용자의 위치를 저장하고 있습니다. 나는 특정 시간 동안 사용자가 여행 한 총 거리를 찾아야했다.PostgreSQL 쿼리를 사용하여 이동 거리를 계산하십시오.
사용자 위치는 아래의 표에 저장된다
CREATE TABLE userlocation
(
latitude character varying,
longitude character varying,
geopoint point,
userid integer,
locationtime timestamp
)
내가 레코드를 검색하고 다음 하버 사인 거리 방법을 사용하여 자바의 거리를 계산 :
public double getdistance(final double lat1, final double lon1, final double lat2, final double lon2, final char unit) {
final double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
* Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
if (unit == 'K') {
dist = dist * 1.609344;
} else if (unit == 'N') {
dist = dist * 0.8684;
}
if (Double.isNaN(dist)) {
dist = 0.0;
}
return (dist);
}
그러나이 계산 시간 특히 레코드가 많아서 며칠 동안 거리를 계산하는 동안 소모합니다. 계산 시간을 줄이기 위해 데이터베이스 수준에서 거리 계산을 시도하기로 결정했습니다.
SELECT latitude, longitude, geopoint <-> '19.23,72.89' AS distance FROM userlocation ORDER BY distance;
내가 총 주행 거리 반환을 얻거나, 두 개의 연속 된 행과 상점 사이의 거리를 계산하는 것 중 하나 쿼리를 만들려고 : 나는 나 특정 지점까지의 거리를 계산할 수있는 다음 쿼리를 발견 그것은 다른 열에 있으므로 거리 계산 대신 Java에서 합계를 계산합니다.
해결 방법을 찾으려고했지만 아직 찾을 수 없습니다. SO에 관한 대부분의 질문은 두 점 사이의 거리 계산을 처리합니다.
현재 PostGIS가 없습니다. PostgreSQL에서 거리를 계산하는 것이 가능할까요, 아니면 현재의 방식대로 진행해야합니까? 이 경우 거리 계산 시간을 줄이기위한 대안이 있습니다.
안녕 Joyson을하는 데 도움이
희망! earthdistance 설치를 시도 했습니까? 방금 설치 과정에서 답을 수정했습니다. – Abincepto