Cids Featurerendering
Aus Cismet Wiki
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.
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.
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)
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; }









