Geoalchemy2 在给定坐标内找到一定距离内的位置



我有一个烧瓶应用程序,它首先从谷歌地图API获取一个位置,并试图在我拥有的数据库中的1500米范围内找到离它更近的位置。

这是我的地方模型。

class Places(db.Model):
uuid = db.Column(UUID(as_uuid=True),
primary_key=True,
server_default=text("uuid_generate_v4()"))
name = db.Column(db.String(80), nullable=False)
# For Near Location Querying
geometric_point = db.Column(
Geometry(geometry_type='POINT', srid=4326), nullable=False)

我有这个查询来查找在提交的lng附近具有位置的条目,并在 1500 米内lat

def get_nearby_aqi_node(lat, lng):
distance_in_meters = 1500
geo_wkb = func.Geometry(func.ST_GeographyFromText(
'POINT({} {})'.format(lng, lat)))
point = db.session.query(Places.name,
Places.uuid).
filter(func.ST_DFullyWithin(Places.geometric_point, geo_wkb, distance_in_meters)).
order_by(
Comparator.distance_centroid(Places.geometric_point, geo_wkb)).limit(1).first()
return point

我得到的单点离这个地方更近,但它不在 1500 米的限制范围内。 删除.filter()后,我得到相同的结果。

您的积分属于 CRS4326geometry类型,其单位是度。文件管理器是 1500 度的距离约束(这毫无意义(。

即使你调用了一次func.ST_GeographyFromText(),输出仍然是geometry,两者之间的转换是自动的。

您可以对两个点使用geography类型,以便使用以米为单位的距离。

最新更新