You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何查询落在指定坐标矩形范围内的PolygonField数据

Django djgeojson 筛选完全落在指定矩形范围内的多边形记录

步骤1:处理前端传入的坐标数据

前端传入的坐标是JSON字符串格式,且坐标顺序为lat(纬度)、lng(经度),需要转换为GeoJSON要求的lng(经度)、lat(纬度)顺序,同时补全多边形闭合点(最后一个点与第一个点坐标一致):

import json

# 前端传入的原始矩形坐标字符串
raw_rect_str = "[[{\"lat\":45.36324254131911,\"lng\":2.471923828125},{\"lat\":46.667815881216754,\"lng\":2.471923828125},{\"lat\":46.667815881216754,\"lng\":6.50390625},{\"lat\":45.36324254131911,\"lng\":6.50390625}]]"

# 解析JSON得到原始点列表
raw_points = json.loads(raw_rect_str)[0]

# 转换坐标顺序为 [lng, lat],补全闭合点
formatted_coords = [[p["lng"], p["lat"]] for p in raw_points]
formatted_coords.append(formatted_coords[0])

# 构造符合GeoJSON规范的筛选用多边形
filter_polygon = {
    "type": "Polygon",
    "coordinates": [formatted_coords]
}

步骤2:通过Django查询集筛选记录

使用djgeojson兼容的空间查询过滤器__contained,判断geom字段的多边形是否完全落在我们构造的矩形多边形内部:

# 筛选完全落在矩形范围内的MyCords记录
matched_records = MyCords.objects.filter(geom__contained=filter_polygon)

注意事项

  • 空间查询默认基于WGS84坐标系(EPSG:4326),如果你的项目使用其他坐标系,需要先做坐标转换再查询
  • 如果查询结果不符合预期,优先检查坐标顺序是否转换正确、多边形是否闭合

内容的提问来源于stack exchange,提问作者rudra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:27:03