Cids Featurerendering

Aus Cismet Wiki

Wechseln zu: Navigation, Suche

Dieses Dokument erläutert die Konfigurationsmöglichkeiten der Darstellung von Geometrien in cids. Die Darstellung eines Objektes, das als Attribut eine Geometrie besitzt (im Folgenden Feature genannt), kann in cids auf unterschiedliche Weise konfiguriert werden.

Standardverhalten

Wird keine Einstellung vorgenommen, so werden alle Geometrien eines Objektes mit dem Operator UNION verbunden und als graues Polygon bzw. als Standardpunktgeometrie mit der Translucency 0.5 dargestellt.

Bild:Cids_Featurerendering_Standard.jpg

Klassenattribute

Benötigt man Featureausprägungen, die nicht dem Standardverhalten entsprechen, aber nicht von Objektattributen abhängig sind, kann man diese Ausprägungsvorschriften mittels Eintragungen als Klassenattribut im ABF vornehmen.

Folgende Werte sind als attr_key gültig:

HIDE_FEATURE

Das Feature wird nicht in der Karte ausgeprägt. Die Karte wird ggf. aber trotzdem an die entsprechende Stelle bewegt. Bei einer Selektion wird das Feature blau hinterlegt dargestellt.

FEATURE_TRANSLUCENCY

Einstellung der Transparenz. Wert muss zwischen 0 und 1 liegen. (0: unsichtbar; 1 transparent)

FEATURE_BORDER / UMGEBUNG

Puffer um die Geometrie in Metern, die beim erstmaligen Zoomen berücksichtigt wird.

FEATURE_FG

Farbe der Linie einer Geometrie in R,G,B (jeweils Werte von 0-255). Hat für Punktgeometrien keine Auswirkung.

FEATURE_BG

Farbe der Fläche einer Geometrie in R,G,B (jeweils Werte von 0-255). Hat für Punktgeometrien keine Auswirkung.

FEATURE_POINT_SYMBOL

Ändert das Punktsymbol einer Punktgeometrie. Hat für Flächen oder Linien keine Auswirkung.

Die Datei mit dem Bild (z.Bsp.:point.png) muss im Classpath (z.Bsp.:de.cismet.images) liegen und muss demzufolge den vollen Pfad enthalten.

/de/cismet/images/point.png
FEATURE_POINT_SYMBOL_SWEETSPOT_X

Legt den X-Bereich des SweetSpots des FEATURE_POINT_SYMBOL fest.

FEATURE_POINT_SYMBOL_SWEETSPOT_Y

Legt den Y-Bereich des SweetSpots des FEATURE_POINT_SYMBOL fest. Der Sweetspot markiert den Punkt im Icon, der genau auf die Puktgeometrie zeigen soll.

Bild:Cids_Featurerendering_SweetSpotDescr.jpg

Beispiele (x,y):

Will man ein Feature durch einen Rasterservice visualisieren, so kann man dies mit den folgenden Parametern konfigurieren:

FEATURESUPPORTINGRASTERSERVICE_TYPE

Die Java Klasse des RasterService. (In Wuppertal im Moment immer: de.cismet.cismap.navigatorplugin.supportingrasterlayer.SicadShowMapPlSupporter)

FEATURESUPPORTINGRASTERSERVICE_SIMPLEURL

Der WMS Aufruf mit den Platzhaltern eines Simple WMS

FEATURESUPPORTINGRASTERSERVICE_RASTERLAYER

Der Layername des anzuzeigenden Layers (SicadShowMapPlSupporter spezifisch)

FEATURESUPPORTINGRASTERSERVICE_ID_ATTRIBUTE

Das Attribut, das die ID angibt (SicadShowMapPlSupporter spezifisch)

FEATURESUPPORTINGRASTERSERVICE_NAME

Der Name, der im Layersteuerelement angezeigt wird.

Definition von Featurerenderern

Mit der Definition von eigenen FeatureRenderen kann man die Darstellung von Features in der Karte mit Java-Code manipulieren. Ein FeatureRenderer implementiert entweder das Interface FeatureRenderer bzw. erbt von der abstrakten Klasse AbstractCidsFeatureRenderer. Oder der FeatureRenderer erbt von der AbstractCidsFeatureRenderer-Implementierung CustomCidsFeatureRenderer.

Das Auffinden derart definierter FeatureRenderer erfolgt per Lookup. Der Klassenname muss daher nach dem bekannten Schema für Klassen-Renderer und -Editoren aufgebaut sein, allerdings als Suffix FeatureRenderer verwenden, bspw. AlkisPointFeatureRenderer.

Wenn von der Klasse AbstractCidsFeatureRenderer geerbt wird, stehen noch zwei Variablen metaClass und metaObject zur Verfügung. Eine Unterklasse von CustomCidsFeatureRenderer verfügt zusätzlich noch über eine Variable cidsBean. Mit diesen lassen sich dann attributabhängige Visualisierungen implementieren. Interface FeatureRenderer:

public interface FeatureRenderer {
    public abstract java.awt.Stroke getLineStyle();
    public abstract java.awt.Paint getLinePaint();
    public abstract java.awt.Paint getFillingStyle();
    public abstract float getTransparency(); 
    public abstract FeatureAnnotationSymbol getPointSymbol();
}

Beispiel:

Ein Renderer der Punktgeometrien abhängig von einem Attribut darstellt. (Je größer die Hausnummer, desto größer der Kreis)

Bild:Cids_Featurerendering_CustomExample.jpg

Die entscheidende Methode:

public FeatureAnnotationSymbol getPointSymbol() {
    int size=1;
    try {
        Object attrib=metaObject.getAttributeByName("SORT_HAUSNUMMER",1).toArray()[0];
        Attribute a=(Attribute)attrib;
        int number=new Integer(a.toString());
        size+=number;
    } catch (Throwable t) {
        log.warn("Fehler in getPointSymbol()",t);
    }
    BufferedImage bi= new BufferedImage(size,size,BufferedImage.TYPE_INT_ARGB);
    Graphics2D graphics = (Graphics2D) bi.getGraphics();
    graphics.setColor(Color.orange);
    graphics.fillOval(0,0,size,size);
    FeatureAnnotationSymbol symb=new FeatureAnnotationSymbol(bi);
    symb.setSweetSpotX(0.5);
    symb.setSweetSpotY(0.5);
    return symb;
}
Persönliche Werkzeuge