나는 사용자 이름, 위도 및 경도로 cassandra 테이블을 가지고 있습니다. 주어진 위도와 경도의 원 안에있는 사용자의 목록을 주어진 거리에서 얻고 싶습니다. 예를 들어 나의 입력 Lat = 78.3232, Long = 65.3234, 거리 = 30 마일. 78.3232와 65.3234 지점에서 30 마일 거리에있는 사용자 목록을 얻고 싶습니다. 단일 CQL3 쿼리로이를 해결할 수 있습니까? 아니면 누군가 나에게이 쿼리를 해결하기위한 힌트를 제공 할 수 있습니까?CQL3을 사용하여 멀리있는 지점 찾기 (cassanda 데이터베이스)
답변
cassandra에 대한 지형 공간 지원이 없었으므로 지점 주위에 상자 좌표를 생성하여 수학적으로 구현하여 (내 작업에는 충분 함) 쿼리를 사용하여 경계 내에서 좌표를 가져 오는 방법을 찾았습니다. 다른 사람들이 참조 할 수 있도록 코드를 게시하겠습니다. 범위
내에서 좌표를 찾기 위해 간단한 CQL 사용public class GeoOperations {
public static final int UPPER_LATITUDE = 0;
public static final int LOWER_LATITUDE = 1;
public static final int UPPER_LONGITUDE = 2;
public static final int LOWER_LONGITUDE = 3;
private static final double KM_TO_MILES = 0.621371;
private final double Latitude;
private final double Longitude;
double Boundary[];
public GeoOperations(double init_latitude, double init_longitude) {
Latitude = init_latitude;
Longitude = init_longitude;
Boundary = new double[4];
}
public void GenerateBoxCoordinates(double Distance) {
Distance = Distance * KM_TO_MILES;
double Lat_Factor = (Distance)/69;
Boundary[UPPER_LATITUDE] = Latitude + Lat_Factor;
Boundary[LOWER_LATITUDE] = Latitude - Lat_Factor;
double Long_Factor = (Distance)/(3960 * 2 * Math.PI/360 * Math.cos(Latitude));
Boundary[UPPER_LONGITUDE] = Longitude + Long_Factor;
Boundary[LOWER_LONGITUDE] = Longitude - Long_Factor;
for (double x : Boundary) {
System.out.println(x);
}
}
}
그리고
값이 같은 경우이
UPPER_LATITUDE = 60
LOWER_LATITUDE = 40
UPPER_LONGITUDE = 10
LOWER_LONGITUDE = 5
쿼리가 될 것 같은 것을 (실제로 내가 Hibernate와 kundera 사용하고 JPA를 사용 쿼리. 그래서 그것을 테스트 havent하지만 작동합니다)
SELECT * FROM Points_Tablle
WHERE LATITUDE > 40
AND LATITUDE < 60
AND LONGITUDE > 5
AND LONGITUDE < 10;
가능한 경우 CQL 쿼리를 게시 해주십시오. – VijayM
@VijayM이 작업은 몇 년 전으로 거슬러 올라갑니다 .... 따라서 카산드라의 지형 공간 데이터 조작을 위해 구현 된 더 나은 솔루션이있을 수 있습니다. (쿼리 추가) – prasadmadanayake
당신의 계산을위한 이론적 기초? 예를 들어 반경과 (경도, 위도) 점 사이의 거리입니까? 그렇다면 Lat_Factor를 얻기 위해 왜 거리를 69로 나눈 것입니까? 각도 반경은 거리를 지구의 지름으로 나눈 값이어야하며 최소 및 최대 위도 값을 얻으려면 위치 찾기에서 더하고 빼야합니다. –
DataStax 엔터프라이즈를 사용하는 경우 Geospatial을 즉시 사용할 수 있습니다. 패트릭의 데모를 체크 아웃 :
https://github.com/PatrickCallaghan/datastax-geospatial-demo
당신은 "카산드라의 지리 공간"을 검색 할 수 카산드라이에 대한 해결책 및 추가 검색 플랫폼과 몇 가지 아이디어를 얻을. – BrianC
조금 오래되었지만 http://readwrite.com/2011/02/17/video-simplegeo-cassandra는 관련이 있습니다 –
@ChrisLohfink는 그 당시 simpleGeo에 대해 알지 못했습니다. 유망 해 보인다. 고맙습니다 – prasadmadanayake