Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,22 @@ public static final double calcMetricResFromScale(final double scale) {
return scale * DEFAULT_PIXEL_SIZE;
}

/**
* Calculates the scale hint from the scale denominator with DEFAULT_PIXEL_SIZE
* @param scaleDenominator
* @return scaleHint calculated from scaleDenominator
*/
public static double calcScaleHint(double scaleDenominator) {
return Math.sqrt(Math.pow((scaleDenominator * DEFAULT_PIXEL_SIZE), 2) * 2);
}

/**
* Calculates the scale denominator from the scale hint with DEFAULT_PIXEL_SIZE
* @param scaleHint
* @return scaleDenominator calculated from scaleHint
*/
public static double calcScaleDenominator(double scaleHint) {
return (Math.sqrt((Math.pow(scaleHint, 2) / 2))) / DEFAULT_PIXEL_SIZE;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.deegree.commons.utils;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

/**
* @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a>
*/
public class MapUtilsTests {

@Test
public void testCalcScaleDenominatorAndScaleHint() {
double scaleDenom = 500;
double scaleHint = MapUtils.calcScaleHint(scaleDenom);
assertEquals(0.1979898987322333, scaleHint, 0d);

double scaleDenomFromHint = MapUtils.calcScaleDenominator(scaleHint);
assertEquals(scaleDenom, scaleDenomFromHint, 0d);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,17 @@
----------------------------------------------------------------------------*/
package org.deegree.protocol.wms.client;

import static java.lang.Double.NEGATIVE_INFINITY;
import static java.lang.Double.POSITIVE_INFINITY;
import static org.deegree.cs.coordinatesystems.GeographicCRS.WGS84;
import static org.deegree.protocol.i18n.Messages.get;

import javax.xml.namespace.QName;

import org.apache.axiom.om.OMElement;
import org.deegree.commons.tom.ows.Version;
import org.deegree.commons.utils.DoublePair;
import org.deegree.commons.utils.MapUtils;
import org.deegree.commons.xml.XPath;
import org.deegree.cs.persistence.CRSManager;
import org.deegree.geometry.Envelope;
Expand Down Expand Up @@ -115,4 +119,22 @@ protected String getExtendedCapabilitiesRootXPath() {
return "//WMT_MS_Capabilities/Capability/VendorSpecificCapabilities";
}

@Override
protected DoublePair parseScaleDenominators(OMElement lay) {
double minScaleHint = getNodeAsDouble(lay, new XPath(getPrefix() + "ScaleHint/@min", nsContext), -1);
double maxScaleHint = getNodeAsDouble(lay, new XPath(getPrefix() + "ScaleHint/@max", nsContext), -1);
if (minScaleHint > -1 || maxScaleHint > -1) {
double minScaleDenominator = calculateScaleDenominator(minScaleHint, NEGATIVE_INFINITY);
double maxScaleDenominator = calculateScaleDenominator(maxScaleHint, POSITIVE_INFINITY);
return new DoublePair(minScaleDenominator, maxScaleDenominator);
}
return new DoublePair(NEGATIVE_INFINITY, POSITIVE_INFINITY);
}

private double calculateScaleDenominator(double scaleHint, double defaultValue) {
if (scaleHint < 0)
return defaultValue;
return MapUtils.calcScaleDenominator(scaleHint);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,14 @@
----------------------------------------------------------------------------*/
package org.deegree.protocol.wms.client;

import static java.lang.Double.NEGATIVE_INFINITY;
import static java.lang.Double.POSITIVE_INFINITY;
import static org.deegree.cs.coordinatesystems.GeographicCRS.WGS84;
import static org.deegree.protocol.i18n.Messages.get;

import org.apache.axiom.om.OMElement;
import org.deegree.commons.tom.ows.Version;
import org.deegree.commons.utils.DoublePair;
import org.deegree.commons.xml.XPath;
import org.deegree.cs.persistence.CRSManager;
import org.deegree.geometry.Envelope;
Expand Down Expand Up @@ -116,4 +119,13 @@ protected String getExtendedCapabilitiesRootXPath() {
return "//wms:WMS_Capabilities/wms:Capability";
}

@Override
protected DoublePair parseScaleDenominators(OMElement lay) {
double minScaleDenominator = getNodeAsDouble(lay, new XPath(getPrefix() + "MinScaleDenominator", nsContext),
NEGATIVE_INFINITY);
double maxScaleDenominator = getNodeAsDouble(lay, new XPath(getPrefix() + "MaxScaleDenominator", nsContext),
POSITIVE_INFINITY);
return new DoublePair(minScaleDenominator, maxScaleDenominator);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
import org.deegree.commons.tom.ows.CodeType;
import org.deegree.commons.tom.ows.LanguageString;
import org.deegree.commons.tom.ows.Version;
import org.deegree.commons.utils.DoublePair;
import org.deegree.commons.utils.Pair;
import org.deegree.commons.xml.XMLAdapter;
import org.deegree.commons.xml.XMLParsingException;
Expand Down Expand Up @@ -404,6 +405,7 @@ private LayerMetadata extractMetadata(OMElement lay) {
}
}
md.setStyles(styles);
md.setScaleDenominators(parseScaleDenominators(lay));
return md;
}

Expand Down Expand Up @@ -618,6 +620,8 @@ public OMElement getExtendedCapabilities(String prefix, String localName, String

protected abstract String getPrefix();

protected abstract DoublePair parseScaleDenominators(OMElement lay);

public void parseWMSSpecificCapabilities(OperationsMetadata operationsMetadata) {
namedLayers = parseNamedLayers();
operationToFormats = parseFormats(operationsMetadata);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,29 +295,24 @@ public Pair<BufferedImage, String> getMap(GetMap getMap, Map<String, String> har
* @param hardParameters parameters to override in the request, may be null
* @throws IOException
*/
public Pair<BufferedImage, String> getMap(GetMap getMap, Map<String, String> hardParameters, int timeout,
public Pair<BufferedImage, String> getMap(GetMap getMap, Map<String, String> hardParameters, int timeoutInSeconds,
boolean errorsInImage) throws IOException {
if (VERSION_111.equals(wmsVersion)) {
if (VERSION_111.equals(wmsVersion) || VERSION_130.equals(wmsVersion)) {
Worker worker = new Worker(getMap.getLayers(), getMap.getStyles(), getMap.getWidth(), getMap.getHeight(),
getMap.getBoundingBox(), getMap.getCoordinateSystem(), getMap.getFormat(), getMap.getTransparent(),
errorsInImage, false, null, hardParameters);

Pair<BufferedImage, String> result;
try {
if (timeout == -1) {
result = worker.call();
}
else {
result = Executor.getInstance().performSynchronously(worker, timeout * 1000);
if (timeoutInSeconds == -1) {
return worker.call();
}
return Executor.getInstance().performSynchronously(worker, timeoutInSeconds * 1000);
}
catch (Throwable e) {
throw new IOException(e.getMessage(), e);
}

return result;
}
throw new IllegalArgumentException("GetMap request for other versions than 1.1.1 are not supported yet.");
throw new IllegalArgumentException(
"GetMap request for other versions than 1.1.1 or 1.3.0 are not supported yet.");
}

/**
Expand Down Expand Up @@ -537,7 +532,7 @@ private Pair<BufferedImage, String> getMap(List<LayerRef> layers, List<StyleRef>

Map<String, String> map = new HashMap<String, String>();
map.put("request", "GetMap");
map.put("version", "1.1.1");
map.put("version", wmsVersion.toString());
map.put("service", "WMS");
map.put("layers", join(",", layers));
String stylesParam = "";
Expand All @@ -563,7 +558,8 @@ private Pair<BufferedImage, String> getMap(List<LayerRef> layers, List<StyleRef>
map.put("height", Integer.toString(reqHeight));
map.put("bbox", reqEnv.getMin().get0() + "," + reqEnv.getMin().get1() + "," + reqEnv.getMax().get0()
+ "," + reqEnv.getMax().get1());
map.put("srs", srs.getAlias());
String crsParamKey = VERSION_130.equals(wmsVersion) ? "crs" : "srs";
map.put(crsParamKey, srs.getAlias());
map.put("format", format);
map.put("transparent", Boolean.toString(transparent));
if (hardParameters != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,13 @@
import org.apache.axiom.om.OMXMLBuilderFactory;
import org.apache.axiom.om.OMXMLParserWrapper;
import org.deegree.commons.tom.ows.Version;
import org.deegree.commons.utils.DoublePair;
import org.deegree.commons.utils.MapUtils;
import org.deegree.cs.exceptions.UnknownCRSException;
import org.deegree.cs.persistence.CRSManager;
import org.deegree.geometry.Envelope;
import org.deegree.geometry.GeometryFactory;
import org.deegree.layer.metadata.LayerMetadata;
import org.junit.Test;

/**
Expand Down Expand Up @@ -112,6 +115,15 @@ public void testWMS111CapabilitiesgetLatLonBoundingBox() throws XMLStreamExcepti
assertTrue(boundingBox.equals(bbox));
}

@Test
public void testWMS111Capabilities_scaleDenominators() throws XMLStreamException {
WMSCapabilitiesAdapter capabilities = createCapabilities();
LayerMetadata layer = capabilities.getLayer("citelayers");
DoublePair scaleDenominators = layer.getScaleDenominators();
assertEquals(0.0, scaleDenominators.first, 0);
assertEquals(2.525381361380527E10, scaleDenominators.second, 0);
}

@Override
protected String getGetGetMapUrl() {
return GETMAP_URL;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,12 @@
import org.apache.axiom.om.OMXMLBuilderFactory;
import org.apache.axiom.om.OMXMLParserWrapper;
import org.deegree.commons.tom.ows.Version;
import org.deegree.commons.utils.DoublePair;
import org.deegree.cs.exceptions.UnknownCRSException;
import org.deegree.cs.persistence.CRSManager;
import org.deegree.geometry.Envelope;
import org.deegree.geometry.GeometryFactory;
import org.deegree.layer.metadata.LayerMetadata;
import org.junit.Test;

/**
Expand Down Expand Up @@ -94,6 +96,15 @@ public void testWMS130CapabilitiesgetLatLonBoundingBox() throws XMLStreamExcepti
assertTrue(boundingBox.equals(bbox));
}

@Test
public void testWMS130Capabilities_scaleDenominators() throws XMLStreamException {
WMSCapabilitiesAdapter capabilities = createCapabilities();
LayerMetadata layer = capabilities.getLayer("citelayers");
DoublePair scaleDenominators = layer.getScaleDenominators();
assertEquals(1.0, scaleDenominators.first, 0);
assertEquals(100000.0, scaleDenominators.second, 0);
}

@Override
protected WMSCapabilitiesAdapter createCapabilities() throws XMLStreamException {
return createCapabilities("wms130.xml");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ Occam Labs UG (haftungsbeschränkt)

import static java.lang.Double.MAX_VALUE;
import static java.lang.Double.MIN_VALUE;
import static org.deegree.commons.utils.MapUtils.calcScaleHint;
import static org.deegree.commons.xml.CommonNamespaces.XLINK_PREFIX;
import static org.deegree.commons.xml.CommonNamespaces.XLNNS;
import static org.deegree.commons.xml.XMLAdapter.writeElement;
Expand Down Expand Up @@ -443,9 +444,9 @@ private void writeScaleHint(final XMLStreamWriter writer, DoublePair hint) throw
if (!hint.first.isInfinite() || !hint.second.isInfinite()) {
writer.writeStartElement("ScaleHint");
writer.writeAttribute("min",
scaleFormat.format(hint.first.isInfinite() ? MIN_VALUE : calculateScaleHint(hint.first)));
scaleFormat.format(hint.first.isInfinite() ? MIN_VALUE : calcScaleHint(hint.first)));
writer.writeAttribute("max",
scaleFormat.format(hint.second.isInfinite() ? MAX_VALUE : calculateScaleHint(hint.second)));
scaleFormat.format(hint.second.isInfinite() ? MAX_VALUE : calcScaleHint(hint.second)));
writer.writeEndElement();
}
}
Expand All @@ -459,9 +460,4 @@ private void writeOnlineResource(final XMLStreamWriter writer, final String url)
}
}

private double calculateScaleHint(double scaleDenominator) {
double pixelSize = 0.00028;
return Math.sqrt(Math.pow((scaleDenominator * pixelSize), 2) * 2);
}

}