java实现List对象转geojson文本返回前端

1.业务需求

查询带有经纬度数据的list列表,将其转为geojson格式给前端。

2.GeoJson格式说明

GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法(JavaScript Object Notation, 简称JSON)的地理空间信息数据交换格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面这几种几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。

3.JAVA代码实现:

java 复制代码
public Map getSectionStringGeojson(DataBaseSection dataBaseSection) {
        Map map = new HashMap();
        //查询断面数据
        List<DataBaseSection> dataBaseSectionList = dataBaseSectionMapper.selectDataBaseSectionListNoGeom(dataBaseSection);
        if(dataBaseSectionList == null || dataBaseSectionList.size() == 0) {
            return map;
        }
        //使用stream方法,获取dataBaseSectionList中lgtd的最大值和最小值
        BigDecimal maxLgtd = dataBaseSectionList.stream().map(DataBaseSection::getLgtd).max(BigDecimal::compareTo).get();
        BigDecimal minLgtd = dataBaseSectionList.stream().map(DataBaseSection::getLgtd).min(BigDecimal::compareTo).get();
        BigDecimal maxLttd = dataBaseSectionList.stream().map(DataBaseSection::getLttd).max(BigDecimal::compareTo).get();
        BigDecimal minLttd = dataBaseSectionList.stream().map(DataBaseSection::getLttd).min(BigDecimal::compareTo).get();
        map.put("maxLgtd", maxLgtd);
        map.put("minLgtd", minLgtd);
        map.put("maxLttd", maxLttd);
        map.put("minLttd", minLttd);
        //创建一个空的 SimpleFeatureTypeBuilder 对象,并添加属性字段:
        SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder();
        builder.setName("Section");
        builder.add("geometry", Point.class);
        builder.add("bscd", String.class);
        builder.add("bscnm", String.class);
        builder.add("sttp", String.class);
        builder.add("fcd", String.class);
        builder.add("ocd", String.class);
        //使用 SimpleFeatureBuilder 创建一个 SimpleFeatureType 对象:
        SimpleFeatureType featureType = builder.buildFeatureType();
        SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(featureType);
        DefaultFeatureCollection featureCollection = new DefaultFeatureCollection();
        //遍历查询结果集,将每一行数据转换为一个 SimpleFeature 对象,并将其添加到 SimpleFeatureCollection 中:
        for(int i = 0; i < dataBaseSectionList.size(); i++) {
            DataBaseSection obj = dataBaseSectionList.get(i);
            //存储数据
            double x = obj.getLgtd().doubleValue();
            double y = obj.getLttd().doubleValue();
            // 创建一个 Point 对象
            GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
            Coordinate coordinate = new Coordinate(x, y);
            Point point = geometryFactory.createPoint(coordinate);
            // 将坐标和属性数据设置到 SimpleFeature 对象中
            featureBuilder.add(point);
            featureBuilder.add(obj.getBscd());
            featureBuilder.add(obj.getBscnm());
            featureBuilder.add(obj.getSttp());
            featureBuilder.add(obj.getFcd());
            featureBuilder.add(obj.getOcd());
            SimpleFeature feature = featureBuilder.buildFeature(null);
            // 将 SimpleFeature 对象添加到 SimpleFeatureCollection 中
            featureCollection.add(feature);
        }
        //使用 FeatureJSON 将 SimpleFeatureCollection 转换为 GeoJSON 字符串:
        String geojson = "";
        try {
            if(featureCollection != null && featureCollection.size() > 0){
                geojson = new FeatureJSON().toString(featureCollection);
            }
        }catch (IOException e){
            System.out.println("基础断面geojson文件保存异常!");
        }
        map.put("geojson", geojson);
        return map;
    }
相关推荐
小二·4 小时前
Python Web 开发进阶实战 :AI 原生数字孪生 —— 在 Flask + Three.js 中构建物理世界实时仿真与优化平台
前端·人工智能·python
Whisper_Sy4 小时前
Flutter for OpenHarmony移动数据使用监管助手App实战 - 网络状态实现
android·java·开发语言·javascript·网络·flutter·php
乂爻yiyao4 小时前
1.1 JVM 内存区域划分
java·jvm
Amumu121384 小时前
Vue组件化编程
前端·javascript·vue.js
We་ct5 小时前
LeetCode 6. Z 字形变换:两种解法深度解析与优化
前端·算法·leetcode·typescript
没有bug.的程序员5 小时前
Spring Cloud Eureka:注册中心高可用配置与故障转移实战
java·spring·spring cloud·eureka·注册中心
CryptoRzz5 小时前
如何高效接入日本股市实时数据?StockTV API 对接实战指南
java·python·kafka·区块链·状态模式·百度小程序
码农水水5 小时前
中国邮政Java面试被问:容器镜像的多阶段构建和优化
java·linux·开发语言·数据库·mysql·面试·php
若鱼19195 小时前
SpringBoot4.0新特性-BeanRegistrar
java·spring
小二·5 小时前
Python Web 开发进阶实战(终章):从单体应用到 AI 原生生态 —— 45 篇技术演进全景与未来开发者生存指南
前端·人工智能·python