工具:json.simple、wowtools

json.simple用于读取json文件,wowtools自动适配地解析geojson格式。

1.引入依赖

代码如下(示例):

       <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.wowtools</groupId>
            <artifactId>giscat-vector-pojo</artifactId>
            <version>1.1.1-STABLE</version>
        </dependency>

2.读取并解析数据

比如现有geojson文件格式如下:
在这里插入图片描述
代码如下(示例):

 public static void main(String[] args) {
        //创建一个JSONParser对象
        JSONParser jsonParser = new JSONParser();
        //解析JSON文件的内容
        try {
            //先用json.simple读取geojson文件
            JSONObject obj = (JSONObject) jsonParser.parse(new FileReader("E:\\河南省乡镇点\\FieldPolygon.geojson"));
            //删除除features以外其它对象,方便下面所需的geojson字符串
            obj.remove("type");
            obj.remove("name");
            obj.remove("crs");
            //获取features对象json字符串
            String strGeoJson =obj.toString();
            GeometryFactory geometryFactory = new GeometryFactory();// jts GeometryFactory
            //获取要素集合
            FeatureCollection featureCollection = GeoJsonFeatureConverter.fromGeoJsonFeatureCollection(strGeoJson, geometryFactory);
            //遍历feature集合,取出其geometry或属性字段
            for (Feature feature : featureCollection.getFeatures()) {
                System.out.println(feature.getGeometry());//POLYGON (.....)
                System.out.println(feature.getProperties().get("name"));//"properties": { "id": 1, "name": "田块" }
            }
            System.out.println(obj.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

总结

如若想提取除“Feature”之外的对象的值时,可在执行remove之前将值提取出来即可。
如提取name:

 String obj2=(String) obj.get("name");

如提取crs中的name,需要将json对象转为map,再取值。

 JSONObject obj = (JSONObject) jsonParser.parse(new FileReader("E:\\河南省乡镇点\\FieldPolygon.geojson"));
 //根据结构一层层取值
 Map map = (Map) JSON.parse(obj.toString());
 Map map1 =(Map) JSON.parse (map.get("crs").toString());
 Map map2 =(Map) JSON.parse (map1.get("properties").toString());
 String name = (String) map2.get("name");
 System.out.println(name);

除上述方法外,还可以将json中各个对象封装成java类:参考https://www.cnblogs.com/dabenhou/p/14451224.html?ivk_sa=1024320u

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐