Cassandra 使用CQL3查找距离内的点

Cassandra 使用CQL3查找距离内的点,cassandra,cql3,Cassandra,Cql3,我有一个带有用户名、纬度和经度的cassandra表。我想得到一个在给定纬度、经度和距离范围内的用户列表 例如:我的输入Lat=78.3232,Long=65.3234,距离=30英里 我想得到一份距离78.3232点和65.3234点30英里以内的用户列表。是否可以通过单个CQL3查询解决此问题?或者有人能给我一个开始解决这个查询的提示吗?cassandra没有地理空间支持,所以我找到了一种数学实现方法来生成点周围的框坐标(这对我的工作来说已经足够好了),并使用查询来获得边界内的坐标。 我会把

我有一个带有用户名、纬度和经度的cassandra表。我想得到一个在给定纬度、经度和距离范围内的用户列表

例如:我的输入Lat=78.3232,Long=65.3234,距离=30英里


我想得到一份距离78.3232点和65.3234点30英里以内的用户列表。是否可以通过单个CQL3查询解决此问题?或者有人能给我一个开始解决这个查询的提示吗?

cassandra没有地理空间支持,所以我找到了一种数学实现方法来生成点周围的框坐标(这对我的工作来说已经足够好了),并使用查询来获得边界内的坐标。 我会把代码贴出来供别人参考

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);
    }

}
}
然后使用简单的CQL查找范围内的坐标

如果值是这样的

    UPPER_LATITUDE = 60
    LOWER_LATITUDE = 40
    UPPER_LONGITUDE = 10
    LOWER_LONGITUDE = 5
查询将是这样的(实际上我使用了JPA查询,所以我还没有测试它,但它应该可以工作)

SELECT*FROM Points\u table
其中纬度>40
纬度<60
经度>5
经度<10;

如果您使用的是DataStax enterprise,则可以直接使用地理空间。查看Patrick的演示:


您可以搜索“cassandra geospatial”,通过cassandra和其他搜索平台获得一些解决方案的想法。虽然有点老,但已经过时了relevant@ChrisLohfink当时不知道simpleGeo的事。看起来很有希望。Thanx如果需要,请发布您的CQL查询possible@VijayM这是几年前做的。。。。因此,在cassandra中可能会有更好的地理空间数据处理解决方案(添加了查询)您能为您的计算提供理论基础吗?例如,距离是距离(经度、纬度)点的半径吗?如果是这样,为什么要将距离除以69以获得Lat_系数?(角半径应为距离除以地球直径,并应从纬度中加减,以获得最小和最大纬度值。)
SELECT * FROM Points_Tablle
    WHERE  LATITUDE > 40 
    AND LATITUDE < 60 
    AND LONGITUDE > 5
    AND LONGITUDE < 10;