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

neo4j adding spatial wgs84 point to node to calculate distance

我正在尝试向节点添加经纬度点。我找不到任何关于应该使用 java class 的文档。

这是我拥有的:

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

值 class 对我不起作用。我想念什么?

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

这是 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 方法。

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