Skip to content

Commit

Permalink
[GEOS-9026] SLDService built-in color ramps become the more dark, the…
Browse files Browse the repository at this point in the history
… more classes there are in the ramp
  • Loading branch information
aaime committed Nov 29, 2018
1 parent 7a9852c commit ccbce66
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 143 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,44 +6,16 @@
*/
package org.geoserver.sldservice.utils.classifier.impl;

import java.awt.Color;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.geoserver.sldservice.utils.classifier.ColorRamp;
import java.awt.*;

/**
* Blue Color Ramp Implementation
*
* @author Alessio Fabiani, GeoSolutions SAS
*/
public class BlueColorRamp implements ColorRamp {
public class BlueColorRamp extends SingleColorRamp {

private int classNum = 0;

private List<Color> colors = new ArrayList<Color>();

public int getNumClasses() {
return classNum;
}

public void revert() {
Collections.reverse(colors);
}

public void setNumClasses(int numClass) {
classNum = numClass + 1; // +1 for transparent
createRamp();
}

public List<Color> getRamp() throws Exception {
if (colors == null) throw new Exception("Class num not setted, color ramp null");
return colors;
}

private void createRamp() {

double step = (225.0 / (double) classNum - 1);
for (int i = 1; i < classNum; i++) colors.add(new Color(0, 0, (int) (step * i + 30)));
protected Color getColorForIndex(double step, int idx) {
return new Color(0, 0, (int) (step * idx + 30));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,47 +6,17 @@
*/
package org.geoserver.sldservice.utils.classifier.impl;

import java.awt.Color;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.geoserver.sldservice.utils.classifier.ColorRamp;
import java.awt.*;

/**
* Gray Color Ramp Implementation
*
* @author Alessio Fabiani, GeoSolutions SAS
*/
public class GrayColorRamp implements ColorRamp {
public class GrayColorRamp extends SingleColorRamp {

private int classNum = 0;

private List<Color> colors = new ArrayList<Color>();

public int getNumClasses() {

return classNum;
}

public void revert() {
Collections.reverse(colors);
}

public void setNumClasses(int numClass) {
classNum = numClass + 1; // +1 for transparent
createRamp();
}

public List<Color> getRamp() throws Exception {
if (colors == null) throw new Exception("Class num not setted, color ramp null");
return colors;
}

private void createRamp() {

double step = (225.0 / (double) classNum - 1);
for (int i = 1; i < classNum; i++)
colors.add(
new Color((int) (step * i + 30), (int) (step * i + 30), (int) (step * i + 30)));
@Override
protected Color getColorForIndex(double step, int i) {
return new Color((int) (step * i + 30), (int) (step * i + 30), (int) (step * i + 30));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,45 +6,17 @@
*/
package org.geoserver.sldservice.utils.classifier.impl;

import java.awt.Color;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.geoserver.sldservice.utils.classifier.ColorRamp;
import java.awt.*;

/**
* Red Color Ramp Implementation
*
* @author Alessio Fabiani, GeoSolutions SAS
*/
public class RedColorRamp implements ColorRamp {
public class RedColorRamp extends SingleColorRamp {

private int classNum = 0;

private List<Color> colors = new ArrayList<Color>();

public int getNumClasses() {

return classNum;
}

public void revert() {
Collections.reverse(colors);
}

public void setNumClasses(int numClass) {
classNum = numClass + 1; // +1 for transparent
createRamp();
}

public List<Color> getRamp() throws Exception {
if (colors == null) throw new Exception("Class num not setted, color ramp null");
return colors;
}

private void createRamp() {

double step = (225.0 / (double) classNum - 1);
for (int i = 1; i < classNum; i++) colors.add(new Color((int) (step * i + 30), 0, 0));
@Override
protected Color getColorForIndex(double step, int i) {
return new Color((int) (step * i + 30), 0, 0);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.geoserver.sldservice.utils.classifier.impl;

import java.awt.Color;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.geoserver.sldservice.utils.classifier.ColorRamp;

public abstract class SingleColorRamp implements ColorRamp {

private int classNum = 0;

private List<Color> colors = new ArrayList<>();

public int getNumClasses() {
return classNum;
}

public void revert() {
Collections.reverse(colors);
}

public void setNumClasses(int numClass) {
classNum = numClass;
createRamp();
}

public List<Color> getRamp() throws Exception {
if (colors == null) throw new Exception("Class num not set, color ramp null");
return colors;
}

private void createRamp() {
double step = (225.0 / (double) classNum);
for (int i = 1; i <= classNum; i++) {
colors.add(getColorForIndex(step, i));
}
}

/**
* Creates the color for the i-th class, using the provided color step
*
* @param step The color step
* @param i The class counter
* @return A color for this combination
*/
protected abstract Color getColorForIndex(double step, int i);
}
Original file line number Diff line number Diff line change
Expand Up @@ -214,8 +214,8 @@ public void testClassifyForFeatureDefault() throws Exception {
checkRules(
resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix),
DEFAULT_INTERVALS);
checkRule(rules[0], "#680000", org.opengis.filter.And.class);
checkRule(rules[1], "#B20000", org.opengis.filter.And.class);
checkRule(rules[0], "#8E0000", org.opengis.filter.And.class);
checkRule(rules[1], "#FF0000", org.opengis.filter.And.class);

assertFalse(resultXml.indexOf("StyledLayerDescriptor") != -1);
}
Expand All @@ -238,8 +238,8 @@ public void testCustomStroke() throws Exception {
checkRules(
resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix),
DEFAULT_INTERVALS);
checkRule(rules[0], "#680000", org.opengis.filter.And.class);
checkRule(rules[1], "#B20000", org.opengis.filter.And.class);
checkRule(rules[0], "#8E0000", org.opengis.filter.And.class);
checkRule(rules[1], "#FF0000", org.opengis.filter.And.class);
checkStroke(rules[0], "#FF0000", "5.0");
checkStroke(rules[1], "#FF0000", "5.0");
}
Expand Down Expand Up @@ -378,9 +378,9 @@ public void testClassifyOpenRange() throws Exception {
Rule[] rules =
checkRules(
resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix), 3);
checkRule(rules[0], "#550000", org.opengis.filter.PropertyIsLessThanOrEqualTo.class);
checkRule(rules[1], "#8C0000", org.opengis.filter.And.class);
checkRule(rules[2], "#C30000", org.opengis.filter.PropertyIsGreaterThan.class);
checkRule(rules[0], "#690000", org.opengis.filter.PropertyIsLessThanOrEqualTo.class);
checkRule(rules[1], "#B40000", org.opengis.filter.And.class);
checkRule(rules[2], "#FF0000", org.opengis.filter.PropertyIsGreaterThan.class);
}

@Test
Expand Down Expand Up @@ -521,9 +521,9 @@ public void testUnique() throws Exception {
Rule[] rules =
checkRules(
resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix), 3);
checkRule(rules[0], "#550000", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[1], "#8C0000", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[2], "#C30000", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[0], "#690000", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[1], "#B40000", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[2], "#FF0000", org.opengis.filter.PropertyIsEqualTo.class);
TreeSet<String> orderedRules = new TreeSet<String>();
orderedRules.add(rules[0].getTitle());
orderedRules.add(rules[1].getTitle());
Expand Down Expand Up @@ -552,9 +552,9 @@ public void testBlueRamp() throws Exception {
checkRules(
resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix), 3);

checkRule(rules[0], "#000055", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[1], "#00008C", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[2], "#0000C3", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[0], "#000069", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[1], "#0000B4", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[2], "#0000FF", org.opengis.filter.PropertyIsEqualTo.class);
}

@Test
Expand All @@ -575,9 +575,9 @@ public void testReverse() throws Exception {
checkRules(
resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix), 3);

checkRule(rules[0], "#0000C3", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[1], "#00008C", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[2], "#000055", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[0], "#0000FF", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[1], "#0000B4", org.opengis.filter.PropertyIsEqualTo.class);
checkRule(rules[2], "#000069", org.opengis.filter.PropertyIsEqualTo.class);
}

@Test
Expand All @@ -598,7 +598,7 @@ public void testNormalize() throws Exception {
checkRules(
resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix), 3);

checkRule(rules[0], "#550000", org.opengis.filter.PropertyIsLessThanOrEqualTo.class);
checkRule(rules[0], "#690000", org.opengis.filter.PropertyIsLessThanOrEqualTo.class);
org.opengis.filter.PropertyIsLessThanOrEqualTo filter =
(org.opengis.filter.PropertyIsLessThanOrEqualTo) rules[0].getFilter();
assertTrue(filter.getExpression1() instanceof FilterFunction_parseDouble);
Expand Down Expand Up @@ -674,9 +674,9 @@ public void testRasterUniqueBinary() throws Exception {
ColorMapEntry[] entries = cm.getColorMapEntries();
assertEquals(2, entries.length);
assertEquals(CQL.toExpression("0.0"), entries[0].getQuantity());
assertEquals(CQL.toExpression("'#000068'"), entries[0].getColor());
assertEquals(CQL.toExpression("'#00008E'"), entries[0].getColor());
assertEquals(CQL.toExpression("1.0"), entries[1].getQuantity());
assertEquals(CQL.toExpression("'#0000B2'"), entries[1].getColor());
assertEquals(CQL.toExpression("'#0000FF'"), entries[1].getColor());
}

@Test
Expand All @@ -693,10 +693,9 @@ public void testRasterUniqueByte() throws Exception {
ColorMapEntry[] entries = cm.getColorMapEntries();
assertEquals(167, entries.length);
assertEquals(CQL.toExpression("1.0"), entries[0].getQuantity());
assertEquals(CQL.toExpression("'#00001E'"), entries[0].getColor());
assertEquals(CQL.toExpression("'#00001F'"), entries[0].getColor());
assertEquals(CQL.toExpression("178.0"), entries[166].getQuantity());
// this color is too dark, believe there is a bug in the ramps
assertEquals(CQL.toExpression("'#000056'"), entries[166].getColor());
assertEquals(CQL.toExpression("'#0000FF'"), entries[166].getColor());
}

@Test
Expand Down

0 comments on commit ccbce66

Please sign in to comment.