org.geowebcache.service.kml.KMLDebugGridLayer.java Source code

Java tutorial

Introduction

Here is the source code for org.geowebcache.service.kml.KMLDebugGridLayer.java

Source

/**
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * @author Arne Kepp, The Open Planning Project, Copyright 2008
 */
package org.geowebcache.service.kml;

import java.io.IOException;
import java.util.Hashtable;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.geowebcache.GeoWebCacheException;
import org.geowebcache.conveyor.ConveyorTile;
import org.geowebcache.grid.BoundingBox;
import org.geowebcache.grid.GridSetBroker;
import org.geowebcache.grid.GridSubset;
import org.geowebcache.grid.GridSubsetFactory;
import org.geowebcache.grid.SRS;
import org.geowebcache.io.ByteArrayResource;
import org.geowebcache.layer.AbstractTileLayer;
import org.geowebcache.layer.BadTileException;
import org.geowebcache.layer.TileLayer;
import org.geowebcache.mime.MimeType;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;

/**
 * 
 * Creates a grid of tiles and puts the grid index on each of them
 * 
 */
public class KMLDebugGridLayer extends AbstractTileLayer {

    public static final String LAYERNAME = "debugGrid";

    public static final int IS_KMZ = 100;

    // private static Log log =
    // LogFactory.getLog(org.geowebcache.service.kml.KMLDebugGridLayer.class);

    // This is completely isolated anyway
    private static GridSetBroker gridSetBroker = new GridSetBroker(false, false);

    private static KMLDebugGridLayer instance;

    private KMLDebugGridLayer() {
        super.subSets = new Hashtable<String, GridSubset>();
        subSets.put(gridSetBroker.WORLD_EPSG4326.getName(),
                GridSubsetFactory.createGridSubSet(gridSetBroker.WORLD_EPSG4326, BoundingBox.WORLD4326, 0, 3));
    }

    synchronized static public KMLDebugGridLayer getInstance() {
        if (instance == null) {
            instance = new KMLDebugGridLayer();
        }
        return instance;
    }

    public void acquireLayerLock() {
    }

    public ConveyorTile doNonMetatilingRequest(ConveyorTile tile) throws GeoWebCacheException {
        return null;
    }

    public BoundingBox getBounds(SRS srs) {
        return new BoundingBox(-180.0, -90.0, 180.0, 90.0);
    }

    public MimeType getDefaultMimeType() {
        return null;
    }

    public int[] getMetaTilingFactors() {
        return null;
    }

    public List<MimeType> getMimeTypes() {
        return null;
    }

    public String getName() {
        return "Debug grid";
    }

    public SRS[] getProjections() {
        SRS[] srsList = { SRS.getEPSG4326() };
        return srsList;
    }

    public double[] getResolutions(int srsIdx) {
        return null;
    }

    public ConveyorTile getTile(ConveyorTile tile) throws GeoWebCacheException, IOException {
        long[] gridLoc = tile.getTileIndex();

        BoundingBox bbox = tile.getGridSubset().boundsFromIndex(gridLoc);

        String data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                + "<kml xmlns=\"http://earth.google.com/kml/2.1\">\n" + "<Document>\n"
                // +"<!-- Name>DocumentName</Name --->"
                + "<Placemark id=\"PlaceMarkId\">\n"
                // +"<styleUrl>#square</styleUrl>\n"
                + "<name>" + gridLoc[0] + "," + gridLoc[1] + "," + gridLoc[2] + "</name>"
                + "<Style id=\"square\">\n" + "<PolyStyle><color>7fffffff</color><colorMode>random</colorMode>\n"
                + "</PolyStyle>\n"
                + "<IconStyle><Icon><href>http://icons.opengeo.org/dynamic/circle/aaffaa_aaffaa_2.png</href></Icon></IconStyle>\n"
                + "<LabelStyle id=\"name\"><color>ffffffff</color><colorMode>normal</colorMode><scale>1.0</scale></LabelStyle>\n"
                + "</Style>\n" + "<MultiGeometry>\n" + "<Point><coordinates>"
                + ((bbox.getMinX() + bbox.getMaxX()) / 2) + "," + ((bbox.getMinY() + bbox.getMaxY()) / 2)
                + ",0</coordinates></Point>\n" + "<Polygon><outerBoundaryIs><LinearRing>\n"
                + "<coordinates decimal=\".\" cs=\",\" ts=\" \">\n" + bbox.getMinX() + "," + bbox.getMinY() + " "
                + bbox.getMaxX() + "," + bbox.getMinY() + " " + bbox.getMaxX() + "," + bbox.getMaxY() + " "
                + bbox.getMinX() + "," + bbox.getMaxY() + "</coordinates>\n"
                + "</LinearRing></outerBoundaryIs></Polygon>\n" + "</MultiGeometry>\n" + "</Placemark>\n"
                + "</Document>\n" + "</kml>";

        tile.setBlob(new ByteArrayResource(data.getBytes()));
        tile.setStatus(200);
        return tile;
    }

    public String getStyles() {
        return null;
    }

    public int[][] getZoomInGridLoc(SRS srs, int[] gridLoc) {
        // log.warn("done - getZoomInGridLoc(srsIdx, gridLoc)");

        int[][] retVal = new int[4][3];

        int x = gridLoc[0] * 2;
        int y = gridLoc[1] * 2;
        int z = gridLoc[2] + 1;

        // Don't link to tiles past the last zoomLevel
        if (z > 25) {
            z = -1;
        }

        // Now adjust where appropriate
        retVal[0][0] = retVal[2][0] = x;
        retVal[1][0] = retVal[3][0] = x + 1;

        retVal[0][1] = retVal[1][1] = y;
        retVal[2][1] = retVal[3][1] = y + 1;

        retVal[0][2] = retVal[1][2] = retVal[2][2] = retVal[3][2] = z;

        return retVal;
    }

    public int getZoomStart() {
        return 0;
    }

    public int getZoomStop() {
        return 25;
    }

    public boolean initializeInternal(GridSetBroker gridSetBroker) {
        return true;
    }

    public void releaseLayerLock() {
    }

    public void setExpirationHeader(HttpServletResponse response, int zoomLevel) {
    }

    public String supportsBbox(SRS srs, BoundingBox bounds) throws GeoWebCacheException {
        return null;
    }

    public boolean supportsFormat(String formatStr) throws GeoWebCacheException {
        return false;
    }

    public boolean supportsSRS(SRS srs) throws GeoWebCacheException {
        return false;
    }

    public void setApplicationContext(ApplicationContext arg0) throws BeansException {

    }

    //
    // public Object createKey(Tile tile) {
    // Vector<Integer> lst = new Vector<Integer>();
    // if(tile.getMimeType() == XMLMime.kmz) {
    // lst.add(KMLDebugGridLayer.IS_KMZ);
    // } else {
    // lst.add(0);
    // }
    // int[] tileIndex = tile.getTileIndex();
    // lst.add(tileIndex[0]);
    // lst.add(tileIndex[1]);
    // lst.add(tileIndex[2]);
    //
    // return (Object) lst;
    // }

    public int getType() {

        return 0;
    }

    public void init() {

    }

    public BoundingBox getBboxForGridLoc(SRS srs, int[] gridLoc) {
        double tileWidth = 180.0 / Math.pow(2, gridLoc[2]);

        BoundingBox bbox = new BoundingBox(-180.0 + tileWidth * gridLoc[0], -90.0 + tileWidth * gridLoc[1],
                -180.0 + tileWidth * (gridLoc[0] + 1), -90.0 + tileWidth * (gridLoc[1] + 1));

        return bbox;
    }

    public int[][] getCoveredGridLevels(SRS srs, BoundingBox bounds) {
        return null;
    }

    public int[] getGridLocForBounds(SRS srs, BoundingBox bounds) throws BadTileException {
        return null;
    }

    public int[] getZoomedOutGridLoc(SRS srs) {
        // log.warn("done - getZoomedOutGridLoc");
        int[] zoomedOutGridLoc = new int[3];
        zoomedOutGridLoc[0] = -1;
        zoomedOutGridLoc[1] = -1;
        zoomedOutGridLoc[2] = -1;

        return zoomedOutGridLoc;

    }

    @Override
    public Integer getBackendTimeout() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public ConveyorTile getNoncachedTile(ConveyorTile tile) throws GeoWebCacheException {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Boolean isCacheBypassAllowed() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void seedTile(ConveyorTile tile, boolean tryCache) throws GeoWebCacheException, IOException {
        // TODO Auto-generated method stub

    }

    @Override
    public void setBackendTimeout(int seconds) {
        // TODO Auto-generated method stub

    }

    @Override
    public void setCacheBypassAllowed(boolean allowed) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public void setEnabled(boolean enabled) {
        // TODO Auto-generated method stub

    }
}