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)

我有这个查询来查找位置在提交的 lnglat 附近 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 类型,以便使用以米为单位的距离。