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
相关产品推荐
相关产品推荐

