首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Geoalchemy2在给定坐标范围内找到一定距离内的位置

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

Stack Overflow用户
提问于 2019-12-21 08:01:00
回答 1查看 896关注 0票数 2

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

这是我的位置模型。

代码语言:javascript
运行
复制
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米内提交的lnglat附近有位置的条目。

代码语言:javascript
运行
复制
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()后,我得到了相同的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-21 14:17:47

您的点是geometry类型的CRS 4326,其单位是度。文件是1500度的距离限制(这是没有意义的)。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59434519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档