Java GeoTools 要素信息 Window 未正确加载要素信息

Java GeoTools Feature Information Window not correctly loading Feature information

所以我尝试了几种不同的方法来从各种不同的代码示例中为单个数据点创建 SimpleFeatures,但没有成功。

我可以成功创建一个包含信息的 FeatureCollection,以便在显示的地图上绘制点。我遇到的问题是,当我使用信息工具单击该点时,它没有显示该点的实际数据,而是显示了“Point”一词(我相信这是在告诉我它的类型 Point.class 而不是积分数据)。

相当简单的设置:

SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
typeBuilder.setName("test point information");
typeBuilder.setSRC(COORDINATE_REFERENCE_SYSTEM); // WGS84
typeBuilder.add("geom", Point.class);
typeBuilder.add("name", String.class);
typeBuilder.add("number", Integer.class);

SimpleFeatureType TYPE = typeBuilder.buildFeatureType();

DefaultFeatureCollection featureCollection = new DefaultFeatureCollection("internal",TYPE);
WKTReader2 wkt = new WKTReader2();

double longitude = positionCoordinate.getX();
double latitude = positionCoordinate.getY();

String pointString = "POINT("+longitude+" "+latitude+")";
String name = "Position"
int ID = 0;

featureCollection.add( SimpleFeatureBuilder.build(TYPE, new Object[]{ wkt.read(pointString), name, ID }, "PlatformPos"));
Style style = SLD.createPointStyle(...)
return new FeatureLayer(featureCollection, style);

信息面板中的名称和号码显示正确。但是Point显示“geom:Point”。我确保它没有在任何地方使用 awt Point 并且每个对 Point 的引用都是 org.locationtech.jts.geom.Point.

谢谢

infoTool 的设计目的是不让用户因过大的几何字符串而不知所措。请参阅 FeatureLayerHelper line 129,其中仅存储几何名称 class 以返回给用户。

                   if (value != null) {
                        if (value instanceof Geometry) {
                            result.setFeatureValue(name, value.getClass().getSimpleName());
                        } else {
                            result.setFeatureValue(name, value);
                        }
                    } else {
                        result.setFeatureValue(name, "null");
                    }

如果您想取回该点的坐标,则需要重写 class 并更改它的处理方式。

或者,如果您也可以忍受 geom: Point 出现,您可以将几何体的 WKT 作为 String 添加到您的点,使用如下代码:

typeBuilder.add("Location", String.class);
 ...
String pointString = "(" + point.getX() + " " + point.getY() + ")"; 
 ...
featureCollection.add( SimpleFeatureBuilder.build(TYPE, new Object[]{ point, pointString, name, ID }, "PlatformPos"));