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 方法。
这是您要找的吗?如果是的话太好了!如果没有,请您澄清您的问题。
我正在尝试向节点添加经纬度点。我找不到任何关于应该使用 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 方法。
这是您要找的吗?如果是的话太好了!如果没有,请您澄清您的问题。