如何按 django 中的自定义区域过滤位置?

Vas*_*yov 5 django postgis geolocation

我将允许用户在前端(flutter)上绘制他的自定义区域并将其传递给后端(django + postgis),后端必须返回PointField位于曲线内的 s列表。那么,我应该以哪种格式将曲线传递给后端,以及如何正确过滤地点查询集?

Sim*_*tte 5

假设您的模型定义为

class Place(models.Model):
    location = PointField()
Run Code Online (Sandbox Code Playgroud)

您应该能够使用查找within检索用户提供的几何图形中包含某个位置的所有地点

Place.objects.filter(location__within=geometry)
Run Code Online (Sandbox Code Playgroud)

我建议您将用户选择从前端导出为 GeoJSON,然后将POST其导出到后端。在 Django 方面,您应该能够根据提供的数据创建一个GEOSGeometry

geometry = GEOSGeometry(request.POST['selection'])
Place.objects.filter(location__within=geometry)
Run Code Online (Sandbox Code Playgroud)

您需要验证selectionGeoJSON 是否有效,但这至少应该让您开始。