地图相关服务选择的是四维图新
本文记录的是,地图上任意多边形搜索,后端逻辑和SQL(后端),前端相关接口服务可看 MineMap for 2D
地图上任意多边形搜索
一、搜索效果
自定义选择多边形,搜索出范围内的数据
二、搜索处理逻辑
- 前端调用地图服务接口,获得多边形的点坐标数据,数据例如:[1 1,2 2,3 3,4 4,1 1]
- 后端获得范围坐标数据,同时取得范围坐标的2个极点(坐标最大最小,可先通过Double类型的经纬度大小判断,将搜索范围缩小),使用
Geometry
包含函数ST_CONTAINS()
,获得符合函数坐标的数据 - 将搜索结果返给前端
三、SQL
假设点坐标 (103,35)、(104,36)为多边形点坐标极点,即所有符合要求范围内的数据,必定在极点之内
select m.name, ST_AsGeoJSON(m.geometry) as geometry
FROM mapdata m
WHERE jd < 104 and jd > 103 and wd < 36 and wd > 35
and ST_CONTAINS(ST_POLYGONFROMTEXT('POLYGON(103 35,104 35,104 36,103 36,103 35)'),m.geometry)
四、Java代码中部分工具类
String ssfwStr= net.sf.json.getJSONArray("搜索范围坐标,json格式");
List<List<Double>> maxPolygon = new getMaxPolygonDate().getMaxPolygonByJsonObject(ssfwStr);
/**
* 多边形数据格式转换
* "[[1,1][1,2][2,2]]" ——> "POLYGON(1 1,1 2,2 2)"
*
* @param ssfwstr 搜索范围坐标字符串
* @return java.lang.String
* @Author: changge
* @date 2021/6/13 20:29
**/
public