根据数据库数据动态构造geojson

时间:2019-12-13 08:39:06

标签: java hibernate jpa

我正在尝试创建从数据库中提取数据的geojson文件。

当创建geojson时,解析为inputStream,将其存储在具有fileManager的路径中。

我的问题是,当几何和属性不是json字段时,它们是字符串字段。

例如,当我使用邮递员时,会收到以下消息:

[
    {
        "geometry": "{\"type\":\"Polygon\",\"coordinates\":[...] }",
        "type": "Feature",
        "table_id": 1,
        "properties": "{\"name\": \"Afghanistan\"}"
    }
]

我希望几何字段和属性将是一个json对象。

[
    {
        "geometry": {"type":"Polygon","coordinates":[...] }",
        "type": "Feature",
        "table_id": 1,
        "properties": "{"name": "Afghanistan"}"
    }
]

这是我的代码:

public List<Object> getGeoJsonFromTable(String nameTable) {

    String SQL = "SELECT table_id, CAST(properties AS text) as properties, ST_AsGeoJSON(geom) as geometry FROM " + nameTable + " ORDER BY table_id ASC;";               
    List<Map<String, Object>> result = jdbcTemplate.queryForList(SQL);

    JSONObject geojson = new JSONObject();
    geojson.put("type", "FeatureCollection");

    JSONArray json = new JSONArray();
    for (int i=0; i<result.size(); i++) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("type", "Feature");
        jsonObject.put("table_id", result.get(i).get("table_id"));
        jsonObject.put("properties", result.get(i).get("properties"));
        jsonObject.put("geometry", result.get(i).get("geometry"));
        json.put(jsonObject);
    }
    geojson.put("feautures", json);
    List<Object> gson = json.toList();
    return gson;
}

稍后,我会将内容解析为inputStream并将其保存在文件夹目录中。

如何将几何和属性字段作为json对象而不是字符串加载。

谢谢

解决方案:

public List<Object> getGeoJsonFromTable(String nameTable) {
    String SQL = "SELECT table_id, CAST(properties AS text) as properties, ST_AsGeoJSON(geom) as geometry FROM " + nameTable + " ORDER BY table_id ASC;";               
    List<Map<String, Object>> result = jdbcTemplate.queryForList(SQL);

    JSONObject geojson = new JSONObject();
    geojson.put("type", "FeatureCollection");

    JSONArray json = new JSONArray();
    for (int i=0; i<result.size(); i++) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("type", "Feature");
        jsonObject.put("table_id", result.get(i).get("table_id") );
        jsonObject.put("geometry",  serializeProperty( result.get(i).get("geometry").toString() ) );
        jsonObject.put("properties", serializeProperty( result.get(i).get("properties").toString() ) );
        json.put(jsonObject);
    }
    geojson.put("feautures", json);
    List<Object> gson = json.toList();
    return gson;
}

private JSONObject serializeProperty(String property) {
    JsonObject gson = new JsonParser().parse(property).getAsJsonObject();
    return new JSONObject(gson.toString());
}

0 个答案:

没有答案