Geoalchemy2 在给定坐标内的一定距离内找到一个位置
Geoalchemy2 Find a location within certain distance within given coordinate
我有一个 Flask 应用程序,它首先从 Google 地图 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
和 lat
附近 1500 米以内的条目。
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()
相同的结果。
您的积分属于 geometry
类型,带有 CRS 4326
,单位为度。 filer是1500度的距离约束(无意义)。
即使您调用了一次 func.ST_GeographyFromText()
,输出仍然是 geometry
,两者之间的转换是自动的。
您可以对两个点都使用 geography
类型,以便使用以米为单位的距离。
我有一个 Flask 应用程序,它首先从 Google 地图 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
和 lat
附近 1500 米以内的条目。
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()
相同的结果。
您的积分属于 geometry
类型,带有 CRS 4326
,单位为度。 filer是1500度的距离约束(无意义)。
即使您调用了一次 func.ST_GeographyFromText()
,输出仍然是 geometry
,两者之间的转换是自动的。
您可以对两个点都使用 geography
类型,以便使用以米为单位的距离。