Package org.geomajas.plugin.rasterizing.layer

Source Code of org.geomajas.plugin.rasterizing.layer.GeometryDirectLayerTest

package org.geomajas.plugin.rasterizing.layer;

import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.OutputStream;

import javax.imageio.ImageIO;

import org.geomajas.configuration.FeatureStyleInfo;
import org.geomajas.configuration.client.ClientMapInfo;
import org.geomajas.geometry.Bbox;
import org.geomajas.geometry.Geometry;
import org.geomajas.global.GeomajasException;
import org.geomajas.layer.LayerType;
import org.geomajas.plugin.rasterizing.command.dto.ClientGeometryLayerInfo;
import org.geomajas.plugin.rasterizing.command.dto.MapRasterizingInfo;
import org.geomajas.service.DtoConverterService;
import org.geomajas.service.GeoService;
import org.geomajas.testdata.TestPathBinaryStreamAssert;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.geometry.jts.WKTReader2;
import org.geotools.map.DefaultMapContext;
import org.geotools.map.DirectLayer;
import org.geotools.map.MapContext;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.vividsolutions.jts.io.ParseException;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/org/geomajas/spring/geomajasContext.xml" })
public class GeometryDirectLayerTest {

  @Autowired
  private GeometryLayerFactory layerFactory;

  @Autowired
  private DtoConverterService converterService;

  @Autowired
  private GeoService geoService;

  // changing this to true and running the test from the base directory will generate the images !
  private boolean writeImages = false;

  private static final double DELTA = 1E-6;

  private static final String IMAGE_CLASS_PATH = "org/geomajas/plugin/rasterizing/images/geometrylayer";

  @Test
  public void testPolygon() throws Exception {
    ClientGeometryLayerInfo geo = new ClientGeometryLayerInfo();
    geo.getGeometries().add(createPolygon());
    geo.setStyle(createPolygonStyle());
    geo.setLayerType(LayerType.POLYGON);

    ClientMapInfo mapInfo = new ClientMapInfo();
    mapInfo.setCrs("EPSG:4326");
    MapRasterizingInfo mapRasterizingInfo = new MapRasterizingInfo();
    mapRasterizingInfo.setBounds(new Bbox(0, 0, 100, 100));
    mapRasterizingInfo.setScale(1);
    mapRasterizingInfo.setTransparent(true);
    mapInfo.getWidgetInfo().put(MapRasterizingInfo.WIDGET_KEY, mapRasterizingInfo);

    DefaultMapContext mapContext = new DefaultMapContext();
    mapContext.setCoordinateReferenceSystem(geoService.getCrs2("EPSG:4326"));
    mapContext.getViewport().setBounds(
        new ReferencedEnvelope(0, 100, 0, 100, mapContext.getCoordinateReferenceSystem()));
    mapContext.getViewport().setCoordinateReferenceSystem(mapContext.getCoordinateReferenceSystem());
    mapContext.getViewport().setScreenArea(new Rectangle(0, 0, 100, 100));
    GeometryDirectLayer layer = (GeometryDirectLayer) layerFactory.createLayer(mapContext, geo);
    BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_4BYTE_ABGR);
    layer.draw(image.createGraphics(), mapContext, mapContext.getViewport());
    new DirectLayerAssert(layer, mapContext).assertEqualImage("polygon.png", writeImages, DELTA);
  }

  private FeatureStyleInfo createPolygonStyle() {
    FeatureStyleInfo style = new FeatureStyleInfo();
    style.setFillColor("#D2691E");
    style.setFillOpacity(0.5f);
    style.setStrokeColor("#D2691E");
    style.setStrokeOpacity(1f);
    style.setStrokeWidth(3);
    return style;
  }

  private Geometry createPolygon() throws GeomajasException, ParseException {
    WKTReader2 reader = new WKTReader2();
    return converterService.toDto(reader.read("POLYGON((10 10,90 10,90 90,10 90,10 10 ))"));
  }

  class DirectLayerAssert extends TestPathBinaryStreamAssert {

    private DirectLayer layer;

    private MapContext mapContext;

    public DirectLayerAssert(DirectLayer layer, MapContext mapContext) {
      super(IMAGE_CLASS_PATH);
      this.layer = layer;
      this.mapContext = mapContext;
    }

    public void generateActual(OutputStream out) throws Exception {
      Rectangle rect = mapContext.getViewport().getScreenArea();
      BufferedImage image = new BufferedImage((int) rect.getWidth(), (int) rect.getHeight(),
          BufferedImage.TYPE_4BYTE_ABGR);
      layer.draw(image.createGraphics(), mapContext, mapContext.getViewport());
      ImageIO.write(image, "PNG", out);
    }

  }

}
TOP

Related Classes of org.geomajas.plugin.rasterizing.layer.GeometryDirectLayerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.