Не удается загрузить сервис для категории "ExternalGraphicFactory" - PullRequest
0 голосов
/ 25 сентября 2018

Я использую geotools-18.5 с JavaFx в Inteliji IDE.Когда я хочу создать PointSymbolizer из изображения SVG или PNG.

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

Я строю код в порядке, но при запуске я получил предупреждение:

ПРЕДУПРЕЖДЕНИЕ: не удается загрузить службу для категории "ExternalGraphicFactory".Поставщик org.geotools.renderer.style.ImageGraphicFactory не может быть создан.

Может кто-нибудь помочь мне?

Вот полный код:

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);

1 Ответ

0 голосов
/ 28 сентября 2018

Вы неправильно установили тип изображения 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();
}
...