IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL Geometry的使用 —— 任意多边形范围搜索 -> 正文阅读

[大数据]MySQL Geometry的使用 —— 任意多边形范围搜索

地图相关服务选择的是四维图新
本文记录的是,地图上任意多边形搜索,后端逻辑和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 String polygonFormat(String ssfwStr) {
        //截取
        String str1 = StringUtils.substringBeforeLast(str, "]");
        String str2 = StringUtils.substringAfter(str1, "[");
        // "[]" ——> "()"
        String str3 = "POLYGON" + str2.replace("[", "(").replace("]", ")");
        String str4 = str3.replace(",", " ");
        String polygonString = str4.replace(") (", ",");
        return polygonString;
    }
/**
     * 地图数据分类统计
     *
     * @param map 地图数据集合
     * @return cn.hutool.json.JSONObject
     */
    @Override
    public cn.hutool.json.JSONObject mapCount(List<Mapdata> map) {

        // 统计
        cn.hutool.json.JSONArray data = new cn.hutool.json.JSONArray();
        HashMap<String, Integer> hashMap = new HashMap<>();
        HashMap<String, String> hashMap2 = new HashMap<>();

        HashMap<String, String> hashMap3 = new HashMap<>();
        // 循环遍历,获得数据有多少种地图数据类别,并统计
        for (Mapdata m : map) {
        	// codeName 为地图数据分类名称,例如:建筑物、实有单位、水域、桥梁、隧道等
            Integer codeNames = hashMap.get(m.getCodename());
            hashMap.put(m.getCodename(), codeNames == null ? 1 : codeNames + 1);
            // iconCode 为地图图标分类名称,例如:医院、学校、派出所等
            hashMap2.put(m.getCodename(), m.getIconCode());
            // code 为分类编码,例如:医院(00010)、学校(00007)、派出所(00015)
            hashMap3.put(m.getCodename(), m.getCode());
        }

        Set<String> codeNames = hashMap.keySet();
        // 处理数据,返回符合前端上图要求的数据
        for (String codeName : codeNames) {
            cn.hutool.json.JSONObject datas = new cn.hutool.json.JSONObject();
            datas.putOpt("name", codeName);
            datas.putOpt("icon", hashMap2.get(codeName));
            datas.putOpt("code", hashMap3.get(codeName));
            datas.putOpt("count", hashMap.get(codeName));
            data.put(datas);
        }

        GeoJson geoJson = new GeoJson();
        cn.hutool.json.JSONObject mapdata = geoJson.SplicingGeoJSON(map);

        cn.hutool.json.JSONObject result = new cn.hutool.json.JSONObject();
        result.putOpt("data", data);
        result.putOpt("mapdata", mapdata);

        return result;
    }
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:44:36  更:2021-09-22 14:47:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:21:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码