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;
    }
相关推荐
CoderYanger1 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
C++业余爱好者1 小时前
Java 提供了8种基本数据类型及封装类型介绍
java·开发语言·python
想用offer打牌1 小时前
RocketMQ如何防止消息丢失?
java·后端·架构·开源·rocketmq
皮卡龙1 小时前
Java常用的JSON
java·开发语言·spring boot·json
PineappleCoder2 小时前
还在重复下载资源?HTTP 缓存让二次访问 “零请求”,用户体验翻倍
前端·性能优化
拉不动的猪2 小时前
webpack编译中为什么不建议load替换ast中节点删除consolg.log
前端·javascript·webpack
李姆斯2 小时前
Agent时代下,ToB前端的UI和交互会往哪走?
前端·agent·交互设计
利刃大大2 小时前
【JavaSE】十三、枚举类Enum && Lambda表达式 && 列表排序常见写法
java·开发语言·枚举·lambda·排序
float_六七2 小时前
Java反射:万能遥控器拆解编程
java·开发语言
han_hanker2 小时前
java 异常类——详解
java·开发语言