neo4j将空间wgs84点添加到节点以计算距离

时间:2018-11-21 10:08:30

标签: java neo4j spring-data-neo4j neo4j-spatial

我正在尝试向节点添加一个纬度点。我找不到有关应使用哪个Java类的任何文档。

这是我所拥有的:

@NodeEntity
public class Coordination {

    @Id
    @GeneratedValue
    private Long id;

    @Index
    private Value point;


    private Double lon;
    private Double lat;
    @Relationship(type = "GEO_LOCATION", direction = Relationship.INCOMING)
    private List<GeoLocation> geoLocations;

    public Coordination(Double lon, Double lat) {
        Value point = new PointValue(new InternalPoint2D(4326, lon, lat));
        this.lon = lon;
        this.lat = lat;
    }
}

值类不适用于我。我想念什么?

1 个答案:

答案 0 :(得分:1)

使用CompositeAttributeConverter可以定义自己的类来存储纬度和经度坐标。但是,您也可以使用Spring Data Commons中定义的内置Point和相应的Distance类。

以下是Spring Data Neo4j中的测试用例的一个示例:

public class Restaurant implements Comparable<Restaurant> {

    @Id @GeneratedValue private Long id;
    private String name;
    @Convert(PointConverter.class) private Point location; //Encapsulates lat/lon 
    private int zip;
    private double score;
    private String description;
    private boolean halal;

然后可以定义方法,例如:

import org.springframework.data.geo.Point;
import org.springframework.data.neo4j.conversion.PointConverter;

public interface RestaurantRepository extends Neo4jRepository<Restaurant, Long> {

    List<Restaurant> findByNameAndLocationNear(String name, Distance distance, Point point);

    List<Restaurant> findByLocationNearAndName(Distance distance, Point point, String name);
}

finder方法将生成CYPHER,它将以下参数传递给distance函数:

  • 在节点上定义的经度和纬度属性
  • 将at和lon参数作为参数传递给finder方法。

这是您要找的东西吗?如果是的话,太好了!如果没有,请您澄清您的问题。