Improve GIS for release
[gpl/argeo-suite.git] / org.argeo.app.geo / src / org / argeo / app / geo / ux / OpenLayersMapPart.java
index 829b343a38bccd88dffe60f99899e9e22263e4dd..a856bccd188fd1b9ed8d4fe5893aee5a6cf6e53f 100644 (file)
@@ -1,11 +1,21 @@
 package org.argeo.app.geo.ux;
 
+import java.util.Map;
+
+import org.argeo.app.ol.AbstractOlObject;
+import org.argeo.app.ol.Layer;
 import org.argeo.app.ol.OlMap;
-import org.argeo.app.ux.js.AbstractJsObject;
+import org.argeo.app.ol.TileLayer;
+import org.argeo.app.ol.VectorLayer;
 import org.argeo.app.ux.js.JsClient;
+import org.locationtech.jts.geom.Envelope;
 
+/**
+ * A wrapper around an OpenLayers map, adding specific features, such as SLD
+ * styling.
+ */
 public class OpenLayersMapPart extends AbstractGeoJsObject {
-       private String mapPartName;
+       private final String mapPartName;
 
        public OpenLayersMapPart(JsClient jsClient, String mapPartName) {
                super(mapPartName);
@@ -16,4 +26,41 @@ public class OpenLayersMapPart extends AbstractGeoJsObject {
        public OlMap getMap() {
                return new OlMap(getJsClient(), getReference() + ".getMap()");
        }
+
+       public void setSld(String xml) {
+               executeMethod(getMethodName(), JsClient.escapeQuotes(xml));
+       }
+
+       public void setCenter(Double lat, Double lon) {
+               executeMethod(getMethodName(), lat, lon);
+       }
+
+       public void fit(double[] extent, Map<String, Object> options) {
+               executeMethod(getMethodName(), extent, options);
+       }
+
+       public void fit(Envelope extent, Map<String, Object> options) {
+               fit(new double[] { extent.getMinX(), extent.getMinY(), extent.getMaxX(), extent.getMaxY() }, options);
+       }
+
+       public void applyStyle(String layerName, String styledLayerName) {
+               executeMethod(getMethodName(), layerName, styledLayerName);
+       }
+
+       public Layer getLayer(String name) {
+               // TODO deal with not found
+               String reference = getReference() + ".getLayerByName('" + name + "')";
+               if (getJsClient().isInstanceOf(reference, AbstractOlObject.getJsClassName(VectorLayer.class))) {
+                       return new VectorLayer(getJsClient(), reference);
+               } else if (getJsClient().isInstanceOf(reference, AbstractOlObject.getJsClassName(TileLayer.class))) {
+                       return new TileLayer(getJsClient(), reference);
+               } else {
+                       return new Layer(getJsClient(), reference);
+               }
+       }
+
+       public String getMapPartName() {
+               return mapPartName;
+       }
+
 }