我有一个烧瓶应用程序,它首先从Google中获取一个位置,并试图在我的数据库中的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)
我有这个查询,以找到在1500米内提交的lng
和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()
后,我得到了相同的结果。
发布于 2019-12-21 14:17:47
您的点是geometry
类型的CRS 4326
,其单位是度。文件是1500度的距离限制(这是没有意义的)。
即使您已经调用过一次func.ST_GeographyFromText()
,输出仍然是一个geometry
,两者之间的转换是自动的。
您可以对两个点使用geography
类型,以便使用以米为单位的距离。
https://stackoverflow.com/questions/59434519
复制相似问题