/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2015, Open Source Geospatial Foundation (OSGeo)
*
* This library 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;
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*/
package org.geotools.tile.util;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.coverage.grid.GridCoverageFactory;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.map.FeatureLayer;
import org.geotools.map.GridCoverageLayer;
import org.geotools.map.MapContent;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.geotools.styling.RasterSymbolizer;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.styling.StyleFactory;
import org.geotools.swing.JMapFrame;
import org.geotools.tile.ServiceTest;
import org.geotools.tile.Tile;
import org.geotools.tile.TileService;
import org.geotools.tile.impl.WebMercatorZoomLevel;
import org.geotools.tile.impl.osm.OSMService;
import org.geotools.tile.impl.osm.OSMTile;
import org.geotools.tile.impl.osm.OSMTileIdentifier;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.TransformException;
public class TileViewer {
private JMapFrame frame;
public TileViewer(String shapeFilename) {
// MapContent map = createMap(shapeFilename);
MapContent map = createMap(shapeFilename);
frame = new JMapFrame(map);
frame.setSize(800, 600);
frame.enableStatusBar(true);
// frame.enableTool(JMapFrame.Tool.ZOOM, JMapFrame.Tool.PAN,
// JMapFrame.Tool.RESET);
frame.enableToolBar(true);
frame.setVisible(true);
}
private MapContent createMap(String shapeFilename) {
final MapContent map = new MapContent();
map.setTitle("TileLab");
ReferencedEnvelope env = new ReferencedEnvelope(-180, 180, -80, 80,
DefaultGeographicCRS.WGS84);
env = new ReferencedEnvelope(5, 15, 45, 55, DefaultGeographicCRS.WGS84);
// Will create the CRS
ServiceTest.beforeClass();
try {
env = env.transform(ServiceTest.MERCATOR_CRS, true);
} catch (TransformException | FactoryException e1) {
e1.printStackTrace();
}
map.getViewport().setBounds(env);
// String baseURL =
// "http://ak.dynamic.t2.tiles.virtualearth.net/comp/ch/${code}?mkt=de-de&it=G,VE,BX,L,LA&shading=hill&og=78&n=z";
// map.addLayer(new TileLayer(new BingService("Road", baseURL)));
map.addLayer(new AsyncTileLayer(new OSMService("Mapnik",
"http://tile.openstreetmap.org/")));
// createTestCoverageLayer(map);
if (shapeFilename != null && shapeFilename.endsWith(".shp")) {
// addTestShape(map, shapeFilename);
}
return map;
}
private void createTestCoverageLayer(MapContent map) {
// ContrastEnhancement ce = sf.contrastEnhancement(ff.literal(1.0),
// ContrastMethod.NORMALIZE);
// SelectedChannelType sct = sf.createSelectedChannelType("1", ce);
// ChannelSelection sel = sf.channelSelection(sct);
// sym.setChannelSelection(sel);
String baseURL = "http://tile.openstreetmap.org/";
TileService service = new OSMService("OSM", baseURL);
Tile t = new OSMTile(new OSMTileIdentifier(38596, 49269,
new WebMercatorZoomLevel(17), service.getName()), service);
GridCoverageFactory gf = new GridCoverageFactory();
ReferencedEnvelope env = t.getExtent();
StyleFactory sf = CommonFactoryFinder.getStyleFactory(null);
RasterSymbolizer sym = sf.getDefaultRasterSymbolizer();
Style rasterStyle = SLD.wrapSymbolizers(sym);
GridCoverage2D coverage = gf.create("Factory", t.getBufferedImage(),
env);
GridCoverageLayer gcl = new GridCoverageLayer(coverage, rasterStyle);
// map.addLayer(gcl);
}
private void addTestShape(MapContent map, String shapeFilename) {
try {
File shpFile = new File(shapeFilename);
FileDataStore dataStore;
dataStore = FileDataStoreFinder.getDataStore(shpFile);
SimpleFeatureSource shapefileSource = dataStore.getFeatureSource();
Style shpStyle = SLD.createPolygonStyle(Color.BLUE, null, 0.50f);
map.addLayer(new FeatureLayer(shapefileSource, shpStyle));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new TileViewer(args[0]);
}
}