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 Original file line Diff line number Diff line change
Expand Up @@ -6,44 +6,16 @@
*/ */
package org.geoserver.sldservice.utils.classifier.impl; package org.geoserver.sldservice.utils.classifier.impl;


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


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


private int classNum = 0; protected Color getColorForIndex(double step, int idx) {

return new Color(0, 0, (int) (step * idx + 30));
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)));
} }
} }
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,47 +6,17 @@
*/ */
package org.geoserver.sldservice.utils.classifier.impl; package org.geoserver.sldservice.utils.classifier.impl;


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


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


private int classNum = 0; @Override

protected Color getColorForIndex(double step, int i) {
private List<Color> colors = new ArrayList<Color>(); return new Color((int) (step * i + 30), (int) (step * i + 30), (int) (step * i + 30));

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)));
} }
} }
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,45 +6,17 @@
*/ */
package org.geoserver.sldservice.utils.classifier.impl; package org.geoserver.sldservice.utils.classifier.impl;


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


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


private int classNum = 0; @Override

protected Color getColorForIndex(double step, int i) {
private List<Color> colors = new ArrayList<Color>(); return new Color((int) (step * i + 30), 0, 0);

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));
} }
} }
Original file line number Original file line 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 Original file line Diff line number Diff line change
Expand Up @@ -214,8 +214,8 @@ public void testClassifyForFeatureDefault() throws Exception {
checkRules( checkRules(
resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix), resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix),
DEFAULT_INTERVALS); DEFAULT_INTERVALS);
checkRule(rules[0], "#680000", org.opengis.filter.And.class); checkRule(rules[0], "#8E0000", org.opengis.filter.And.class);
checkRule(rules[1], "#B20000", org.opengis.filter.And.class); checkRule(rules[1], "#FF0000", org.opengis.filter.And.class);


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


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


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


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


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


@Test @Test
Expand All @@ -598,7 +598,7 @@ public void testNormalize() throws Exception {
checkRules( checkRules(
resultXml.replace("<Rules>", sldPrefix).replace("</Rules>", sldPostfix), 3); 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 filter =
(org.opengis.filter.PropertyIsLessThanOrEqualTo) rules[0].getFilter(); (org.opengis.filter.PropertyIsLessThanOrEqualTo) rules[0].getFilter();
assertTrue(filter.getExpression1() instanceof FilterFunction_parseDouble); assertTrue(filter.getExpression1() instanceof FilterFunction_parseDouble);
Expand Down Expand Up @@ -674,9 +674,9 @@ public void testRasterUniqueBinary() throws Exception {
ColorMapEntry[] entries = cm.getColorMapEntries(); ColorMapEntry[] entries = cm.getColorMapEntries();
assertEquals(2, entries.length); assertEquals(2, entries.length);
assertEquals(CQL.toExpression("0.0"), entries[0].getQuantity()); 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("1.0"), entries[1].getQuantity());
assertEquals(CQL.toExpression("'#0000B2'"), entries[1].getColor()); assertEquals(CQL.toExpression("'#0000FF'"), entries[1].getColor());
} }


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


@Test @Test
Expand Down

0 comments on commit ccbce66

Please sign in to comment.