gpt4 book ai didi

java - org.postgresql.util.PSQLException : ERROR: function st_dwithin(geometry, double , double )不存在

转载 作者:行者123 更新时间:2023-11-29 13:09:01 27 4
gpt4 key购买 nike

我想获取特定位置附近的所有商店,但我的查询字符串似乎有问题。我检查过 postgis 的版​​本是 postgis 2.5.2_2。我还检查了经度和纬度是否具有 double 。

我的数据库结构如下: enter image description here

我尝试将查询重写为不同的查询字符串,但我仍然遇到相同的错误。

我的实体:

@Entity
@Table(name = "seller_geolocation_ms")
public class Seller_Geolocation {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private static final long serialVersionUID = 2L;

private double latitude;
private double longitude;
private String country;
private String cityName;
private String zipCode;
private String town;
private String address;
private Long sellerId;

@JsonIgnore
@Column(columnDefinition = "geometry")
private com.vividsolutions.jts.geom.Point location;

}

我的存储库接口(interface):

@Repository
public interface SellerGeolocationRepository extends CrudRepository<Seller_Geolocation, Long> {

@Query(value="SELECT * FROM seller_geolocation_ms WHERE ST_DWithin(location,?1,?2) = true", nativeQuery = true)
public Set<Seller_Geolocation> findAllSellersInRange(double longitude, double latitude);

}

我的服务类我有这个功能:

    public Set<Seller_Geolocation> getAllSellersInLocation(Double longitude, Double latitude) {
return sellerRepository.findAllSellersInRange(longitude, latitude);
}

我收到以下错误:

ERROR: function st_dwithin(geometry, double precision, double precision) does not exist Hint: No function matches the given name and argument types. You might need to add explicit type casts.

更新:

查询字符串:

SELECT * 
FROM seller_geolocation_ms
WHERE ST_DWithin(location::geography, ST_SetSRID(ST_Point(59.393181, 5.286147), 4326), 30000);

在 postgres 数据库中工作,但在 java 应用程序中它返回一个错误:

org.postgresql.util.PSQLException: ERROR: syntax error at or near ":"

最佳答案

ST_DWithin检查两个几何图形是否在彼此给定的距离内。它需要 2 个几何图形和一个距离作为参数。

行 SQL 将是

SELECT * 
FROM myTable
WHERE ST_DWithin(mytable.geom,ST_SetSRID(ST_Point(longitude,latitude),4326), distance_degrees);

现在这需要以度为单位的距离。要使用以米为单位的距离,您可以重新投影到单位为米的 CRS,或转换到地理

SELECT * 
FROM myTable
WHERE ST_DWithin(mytable.geom::geography,ST_SetSRID(ST_Point(longitude,latitude),4326)::geography, distance_meters);

或者使用不同的地理转换方式:

SELECT * 
FROM myTable
WHERE ST_DWithin(cast(mytable.geom as geography),ST_SetSRID(ST_Point(longitude,latitude),4326)::geography, distance_meters);

关于java - org.postgresql.util.PSQLException : ERROR: function st_dwithin(geometry, double , double )不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57176354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com