Java GeoTools要素信息窗口点击点要素时无法正确加载Point几何实际数据
问题原因
- GeoTools默认属性展示逻辑未对JTS几何类型做专门的序列化处理,仅调用默认
toString()方法输出类名标识,你看到的Point就是org.locationtech.jts.geom.Point默认toString的输出前缀。 - 你创建
SimpleFeatureType时未显式标记geom为默认几何字段,大部分地图组件的信息工具会默认不对非标记的几何字段做坐标格式化处理。 - 部分地图渲染端的属性面板默认会简化几何字段的展示内容,仅输出类型标识而非完整坐标。
解决方法
方案1:补充默认几何字段标记(首选)
修改SimpleFeatureType构建逻辑,新增默认几何字段的声明,大部分地图组件会自动对默认几何字段做坐标格式化展示:
SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder(); typeBuilder.setName("test point information"); typeBuilder.setSRC(COORDINATE_REFERENCE_SYSTEM); // WGS84 typeBuilder.add("geom", Point.class); // 新增此行,标记geom为默认几何字段 typeBuilder.setDefaultGeometry("geom"); typeBuilder.add("name", String.class); typeBuilder.add("number", Integer.class); SimpleFeatureType TYPE = typeBuilder.buildFeatureType();
方案2:自定义几何类型转换器
如果补充默认几何标记后仍不生效,可全局注册JTS几何类型的字符串转换器,将几何对象自动转为WKT格式输出:
// 全局注册Point到字符串的转换规则 ConverterFactory pointConverterFactory = new ConverterFactory() { @Override public Converter createConverter(Class<?> source, Class<?> target, Hints hints) { if (Point.class.isAssignableFrom(source) && String.class.equals(target)) { return (src, tgt, h) -> ((Point) src).toText(); } return null; } }; Hints.putSystemDefault(Hints.CONVERTER_FACTORY, pointConverterFactory);
方案3:新增独立坐标字段展示
如果不想修改全局配置,可直接在Feature属性中新增独立的坐标字段存储WKT字符串,信息面板直接展示该字段即可:
// 1. 新增coordinate字段定义 typeBuilder.add("coordinate", String.class); // 2. 构建Feature时传入WKT坐标字符串 featureCollection.add(SimpleFeatureBuilder.build(TYPE, new Object[]{ wkt.read(pointString), name, ID, pointString }, "PlatformPos"));
内容的提问来源于stack exchange,提问作者Kris Rice
相关产品推荐
相关产品推荐

