1.业务需求
查询带有经纬度数据的list列表,将其转为geojson格式给前端。
2.GeoJson格式说明
GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法(JavaScript Object Notation, 简称JSON)的地理空间信息数据交换格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面这几种几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。
3.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;}