在 java 中返回 GeoJSON 对象
Returning a GeoJSON object in java
我是 GeoJSON 的新手,我目前 运行 遇到一个我不知道该怎么做的问题。
这是我的 FeatureCollection 的片段
FeatureCollection fc = new FeatureCollection();
Map<String, Object> properties = new HashMap<String, Object>();
for(int i = 0; i < platforms.size(); i ++) {
Feature feature = new Feature();
Point geometry = new Point();
Dto dto = platforms.get(i);
Position position = new Position(dto.getLat(), dto.getLon());
fc.addFeature(feature);
geometry.setCoordinates(position);
feature.setGeometry(geometry);
feature.setProperties(properties);
properties.put("name", dto.getName());
properties.put("msl", dto.getMsl());
properties.put("id", dto.getId());
}
return fc.toString();
我希望我的输出看起来像这样:
{
"type":"FeatureCollection"
features":[
{
"type":"Feature"
"geometry": {
"type":"Point"
"coordinates":[
-120.200000,
10.100000
]
},
"properties": {
"name": "1"
"height": "100.00"
"id": "null"
}
}
{
"type":"Feature"
"geometry": {
"type":"Point"
"coordinates\":[
-130.200000,
20.100000
] \n "
}, \n "
"properties": { "
"name": "2"
"height": "100.00"
"id": "null"
}
}
]
}
据我所知,通过调试,正确的信息被放入功能中,但每当我 return featureCollection 我得到这个:
mil.nga.sf.geojson.FeatureCollection@366ac49b
我对 geojson 了解不多,但似乎我错误地 returning 了 FeatureCollection 并打印了它的名称或其他内容。
简单地说,如何打印 FeatureCollection 的内容?
编辑:
这是我在实施 gson 后得到的输出。
{
"features": [
{
"feature": {
"geometry": {
"x": 10.1,
"y": -120.2,
"z": null,
"m": null,
"geometryType": "POINT",
"hasZ": false,
"hasM": false
},
"properties": {
"msl": 100.0,
"name": "1",
"id": null
}
},
"id": null,
"bbox": null,
"foreignMembers": {}
},
{
"feature": {
"geometry": {
"x": 20.1,
"y": -130.2,
"z": null,
"m": null,
"geometryType": "POINT",
"hasZ": false,
"hasM": false
},
"properties": {
"msl": 100.0,
"name": "2",
"id": null
}
},
"id": null,
"bbox": null,
"foreignMembers": {}
}
],
"bbox": null,
"foreignMembers": {}
我不确定下一步该怎么做才能让它反映出我想要的输出。
您的问题是您正在调用 fc.toString();
,这将触发默认的 Object.toString() 方法。这将转储一些 classname+address/id-like 字符串,具体取决于使用的 JVM。
而不是调用 toString(),你应该使用像 google gson 这样的 JSON 库,并添加
代码底部的几行:
final GsonBuilder gb = new GsonBuilder();
gb.setPrettyPrinting();
gb.serializeNulls();
// gb.excludeFieldsWithoutExposeAnnotation(); // maybe use for more control
final Gson gson = gb.create();
final String jsonText = gson.toJson(fc);
return jsonText;
还可以考虑编写一个实用程序 class,使用您选择的默认设置为您执行此操作:
public class MyJsonUtil {
static public String toJSON(final Object pObject) {
final GsonBuilder gb = new GsonBuilder();
gb.setPrettyPrinting();
gb.serializeNulls();
// gb.excludeFieldsWithoutExposeAnnotation(); // maybe use for more control
final Gson gson = gb.create();
final String jsonText = gson.toJson(pObject);
return jsonText;
}
}
然后在代码的末尾调用 return MyJsonUtil.toJSON(fc)
.
我是 GeoJSON 的新手,我目前 运行 遇到一个我不知道该怎么做的问题。
这是我的 FeatureCollection 的片段
FeatureCollection fc = new FeatureCollection();
Map<String, Object> properties = new HashMap<String, Object>();
for(int i = 0; i < platforms.size(); i ++) {
Feature feature = new Feature();
Point geometry = new Point();
Dto dto = platforms.get(i);
Position position = new Position(dto.getLat(), dto.getLon());
fc.addFeature(feature);
geometry.setCoordinates(position);
feature.setGeometry(geometry);
feature.setProperties(properties);
properties.put("name", dto.getName());
properties.put("msl", dto.getMsl());
properties.put("id", dto.getId());
}
return fc.toString();
我希望我的输出看起来像这样:
{
"type":"FeatureCollection"
features":[
{
"type":"Feature"
"geometry": {
"type":"Point"
"coordinates":[
-120.200000,
10.100000
]
},
"properties": {
"name": "1"
"height": "100.00"
"id": "null"
}
}
{
"type":"Feature"
"geometry": {
"type":"Point"
"coordinates\":[
-130.200000,
20.100000
] \n "
}, \n "
"properties": { "
"name": "2"
"height": "100.00"
"id": "null"
}
}
]
}
据我所知,通过调试,正确的信息被放入功能中,但每当我 return featureCollection 我得到这个:
mil.nga.sf.geojson.FeatureCollection@366ac49b
我对 geojson 了解不多,但似乎我错误地 returning 了 FeatureCollection 并打印了它的名称或其他内容。
简单地说,如何打印 FeatureCollection 的内容?
编辑: 这是我在实施 gson 后得到的输出。
{
"features": [
{
"feature": {
"geometry": {
"x": 10.1,
"y": -120.2,
"z": null,
"m": null,
"geometryType": "POINT",
"hasZ": false,
"hasM": false
},
"properties": {
"msl": 100.0,
"name": "1",
"id": null
}
},
"id": null,
"bbox": null,
"foreignMembers": {}
},
{
"feature": {
"geometry": {
"x": 20.1,
"y": -130.2,
"z": null,
"m": null,
"geometryType": "POINT",
"hasZ": false,
"hasM": false
},
"properties": {
"msl": 100.0,
"name": "2",
"id": null
}
},
"id": null,
"bbox": null,
"foreignMembers": {}
}
],
"bbox": null,
"foreignMembers": {}
我不确定下一步该怎么做才能让它反映出我想要的输出。
您的问题是您正在调用 fc.toString();
,这将触发默认的 Object.toString() 方法。这将转储一些 classname+address/id-like 字符串,具体取决于使用的 JVM。
而不是调用 toString(),你应该使用像 google gson 这样的 JSON 库,并添加 代码底部的几行:
final GsonBuilder gb = new GsonBuilder();
gb.setPrettyPrinting();
gb.serializeNulls();
// gb.excludeFieldsWithoutExposeAnnotation(); // maybe use for more control
final Gson gson = gb.create();
final String jsonText = gson.toJson(fc);
return jsonText;
还可以考虑编写一个实用程序 class,使用您选择的默认设置为您执行此操作:
public class MyJsonUtil {
static public String toJSON(final Object pObject) {
final GsonBuilder gb = new GsonBuilder();
gb.setPrettyPrinting();
gb.serializeNulls();
// gb.excludeFieldsWithoutExposeAnnotation(); // maybe use for more control
final Gson gson = gb.create();
final String jsonText = gson.toJson(pObject);
return jsonText;
}
}
然后在代码的末尾调用 return MyJsonUtil.toJSON(fc)
.