无法加载类别 "ExternalGraphicFactory" 的服务

Can't load a service for category "ExternalGraphicFactory"

我正在使用 geotools-18.5,在 Inteliji 中使用 JavaFx IDE。 当我想从 svg 或 png 图像创建 PointSymbolizer 时。

StyleBuilder builder = new StyleBuilder();
ExternalGraphic extGraphic = builder.createExternalGraphic("file:/home/cuongnv/test.svg", "svg");

我构建代码正常,但是当 运行 时,我收到警告:

WARNING: Can't load a service for category "ExternalGraphicFactory". Provider org.geotools.renderer.style.ImageGraphicFactory could not be instantiated.

有人可以帮助我吗?

完整代码如下:

private Style createStyleBuilder(){
        StyleBuilder builder = new StyleBuilder();
        FilterFactory2 ff = builder.getFilterFactory();

        // RULE 1
        // first rule to draw cities

        // define a point symbolizer representing a city
        Graphic city = builder.createGraphic();
        city.setSize(ff.literal(50));
        ExternalGraphic extGraphic =        builder.createExternalGraphic("file:/home/cuongnv/Javafx/GeoTool/geotools_fx_tutorial-master/geotools-fx/src/main/resources/images/console.svg", "svg"); // svg
        city.addExternalGraphic(extGraphic);
        PointSymbolizer pointSymbolizer = builder.createPointSymbolizer(city);
        Rule rule1 = builder.createRule(pointSymbolizer);
        rule1.setName("rule1");
        rule1.getDescription().setTitle("City");
        rule1.getDescription().setAbstract("Rule for drawing cities");
        Rule rules[] = new Rule[] {rule1};
        FeatureTypeStyle featureTypeStyle = builder.createFeatureTypeStyle("Feature", rules);
        Style style = builder.createStyle();
        style.setName("style");
        style.getDescription().setTitle("User Style");
        style.getDescription().setAbstract("Definition of Style");
        style.featureTypeStyles().add(featureTypeStyle);
        return style;

    }

TYPE = DataUtilities.createType(
                    "Dataset",
                    "geometry:Geometry:srid=4326"
                            + ","
                            + "name:String,"
                            + "id:String"
            );
            SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE);
            GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
            com.vividsolutions.jts.geom.Point point = geometryFactory.createPoint(new Coordinate(x,y));

            featureBuilder.add(point);
            SimpleFeature feature = featureBuilder.buildFeature(null);


            DefaultFeatureCollection featureCollection = new DefaultFeatureCollection("internal", TYPE);
            featureCollection.add(feature);

            Style style = createStyleBuilder();
            Layer layer = new FeatureLayer(featureCollection, style);
            layer.setTitle("New Point");
            mapContent.layers().add(layer);

你设置的图片mime类型有误,应该是:

ExternalGraphic extGraphic = builder.createExternalGraphic("file:/stuff/ian/geoserver/data/styles/burg02.svg", "image/svg"); // svg

一切正常。

编辑

如果您仍然遇到问题,请尝试将此代码添加到 createStyle 模块的末尾并查看生成的 SVG,可能在 GeoServer 中对其进行测试。

SLDTransformer styleTransform = new SLDTransformer();
StyledLayerDescriptor sld = sf.createStyledLayerDescriptor();
UserLayer layer = sf.createUserLayer();
layer.setLayerFeatureConstraints(new FeatureTypeConstraint[] {null});
sld.addStyledLayer(layer);
layer.addUserStyle(style);

try {
  String xml = styleTransform.transform(sld);
  System.out.println(xml);
} catch (TransformerException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}