|
3 | 3 | GeoScript Groovy Releases
|
4 | 4 | =========================
|
5 | 5 |
|
| 6 | +1.7.0 |
| 7 | +----- |
| 8 | + The 1.7.0 release of GeoScript is built on Grooovy 2.4.6, GeoTools 15.0, and the Java Topology Suite 1.13. |
| 9 | + It also requires Java 8. |
| 10 | + |
| 11 | + This version focused on making GeoScript more modular and extensible. GeoScript is more extensible by |
| 12 | + providing Service Provider Interface (SPI) end points for Readers, Writer, Formats, TileLayers and Workspaces. |
| 13 | + GeoScript is more modular by using Groovy's Extension Modules to add methods dynamically. |
| 14 | + |
| 15 | + Most of the other features of 1.7 were contributed by the community (thank you sbortman, blackrez, and gnafu) |
| 16 | + or drive by the development of `geoc <https://github.com/jericks/geoc>`_ (a geospatial commandline application), |
| 17 | + `geo-shell <https://github.com/jericks/geo-shell>`_ (an interactive shell for geospatial analysis), |
| 18 | + and `MBTilesServer <https://github.com/jericks/MBTilesServer>`_ (a Spring Boot based web app for serving |
| 19 | + mbtiles maps). |
| 20 | + |
| 21 | + **Tile** |
| 22 | + |
| 23 | + MBTiles got methods to access metdata and minimum and maximum zoom levels.:: |
| 24 | + |
| 25 | + MBTiles layer = new MBTiles(new File("states.mbtiles")) |
| 26 | + println layer.metadata |
| 27 | + println layer.minZoom |
| 28 | + println layer.maxZoom |
| 29 | + |
| 30 | + GeoPackage and MBTiles both got a new getTileCount() method that returns statistics on the number of tiles present |
| 31 | + per zoom level.:: |
| 32 | + |
| 33 | + GeoPackage layer = new GeoPackage(new File("states.gpkg"), "states") |
| 34 | + List stats = layer.tileCounts |
| 35 | + stats.eachWithIndex { Map stat, int index -> |
| 36 | + println "${index}). ${stat.zoom} ${stat.tiles} ${stat.total} ${stat.percent}" |
| 37 | + } |
| 38 | + |
| 39 | + The Tile module got a new TileLayer called GeneratingTileLayer that can generate Tiles on demand.:: |
| 40 | + |
| 41 | + Layer layer = new Shapefile("states.shp") |
| 42 | + layer.style = new Fill("wheat") + new Stroke("navy", 0.1) |
| 43 | + File file = folder.newFile("states.mbtiles") |
| 44 | + TileLayer tileLayer = new MBTiles(new File("states.mbtiles"), "states", "A map of the united states") |
| 45 | + ImageTileRenderer tileRenderer = new ImageTileRenderer(tileLayer, layer) |
| 46 | + GeneratingTileLayer generatingTileLayer = new GeneratingTileLayer(tileLayer, tileRenderer) |
| 47 | + |
| 48 | + The ImageTileLayer base class now makes sure that the Bounds passed to the getRaster() method |
| 49 | + is in the correct projection. |
| 50 | + |
| 51 | + Finally, the OSM TileLayer has a static method for creating TileLayers with well known OSM based web serivces.:: |
| 52 | + |
| 53 | + OSM.getWellKnownOSM("osm") |
| 54 | + OSM.getWellKnownOSM("stamen-toner") |
| 55 | + OSM.getWellKnownOSM("stamen-toner") |
| 56 | + OSM.getWellKnownOSM("stamen-toner-lite") |
| 57 | + OSM.getWellKnownOSM("stamen-watercolor") |
| 58 | + OSM.getWellKnownOSM("mapquest-street") |
| 59 | + OSM.getWellKnownOSM("mapquest-satellite") |
| 60 | + |
| 61 | + **Style** |
| 62 | + |
| 63 | + The Style module added a YSLD Reader and Writer.:: |
| 64 | + |
| 65 | + Symbolizer sym = new Fill("wheat") + new Stroke("brown") |
| 66 | + YSLDWriter writer = new YSLDWriter() |
| 67 | + String yaml = writer.write(sym) |
| 68 | + |
| 69 | + The Style module also got a new SimpleStyleReader that can easily create simple styles.:: |
| 70 | + |
| 71 | + SimpleStyleReader styleReader = new SimpleStyleReader() |
| 72 | + // Fill and Stroke |
| 73 | + Style style = styleReader.read("fill=#555555 fill-opacity=0.6 stroke=#555555 stroke-width=0.5") |
| 74 | + // Shape with Fill and Stroke |
| 75 | + style = styleReader.read("fill=navy stroke=yellow shape-type=circle") |
| 76 | + // Shape with Fill and Stroke with Label |
| 77 | + style = styleReader.read("fill=#554466 stroke=255,255,0 shape-type=triangle label=NAME label-size=12") |
| 78 | + // Just fill |
| 79 | + style = styleReader.read("fill=#554466") |
| 80 | + // Just stroke |
| 81 | + style = styleReader.read("stroke=#554466") |
| 82 | + // Just shape |
| 83 | + style = styleReader.read("shape=#554466") |
| 84 | + |
| 85 | + This version also updated default style and inherited a perpendicular offset for Strokes from the GeoTools project. |
| 86 | + |
| 87 | + **Renderer** |
| 88 | + |
| 89 | + sbortman added a new GeoTIFF Renderer.:: |
| 90 | + |
| 91 | + Layer layer = new Shapefile(new File("states.shp")) |
| 92 | + layer.style = new Stroke('black', 0.1) + new Fill('gray', 0.75) |
| 93 | + Map map = new Map(layers: [layer], backgroundColor: "white") |
| 94 | + GeoTIFF geotiff = new GeoTIFF() |
| 95 | + def img = geotiff.render(map) |
| 96 | + |
| 97 | + Users can now configure MapWindow and Window's do when the ui is closed (hide, exit, dispose).:: |
| 98 | + |
| 99 | + Map map = new Map(layers:[new Shapefile("states.shp")]) |
| 100 | + Window window = new Window() |
| 101 | + window.display(map, close: 'hide') |
| 102 | + |
| 103 | + The Map now guards against null projections in Bounds. |
| 104 | + |
| 105 | + **Geometry** |
| 106 | + |
| 107 | + The Geometry IO package received a Google Polygon Encoder.:: |
| 108 | + |
| 109 | + GooglePolylineEncoder encoder = new GooglePolylineEncoder() |
| 110 | + LineString lineString = new LineString([-120.2, 38.5], [-120.95, 40.7], [-126.453, 43.252]) |
| 111 | + String str = encoder.write(lineString) |
| 112 | + |
| 113 | + The Bounds expand method is now more robust. |
| 114 | + |
| 115 | + An offset method was added to the Geometry class.:: |
| 116 | + |
| 117 | + Geometry g = Geometry.fromWKT("LINESTRING (0 5, 5 5)").offset(2) |
| 118 | + |
| 119 | + **IO** |
| 120 | + |
| 121 | + Several optional parameters were added to the Feature GeoJSON Writer to control the number of decimals and how |
| 122 | + to encode feature bounds, feature collection bounds, feature collection crs, feature crs, and whether to encode |
| 123 | + null values. |
| 124 | + |
| 125 | + The CSVReader can handle multiple geometry types. |
| 126 | + |
| 127 | + The GeoScript.zip method now includes nested directories and GeoScript.unzip creates directories if necessary. |
| 128 | + |
| 129 | + **Workspace** |
| 130 | + |
| 131 | + Workspaces have much better connection string and maps. |
| 132 | + |
| 133 | + Users of the OGR Workspace can now use the static setErrorHandler(quiet, logging, or default) method to control OGR's logging. |
| 134 | + |
| 135 | + All workspaces now include a Workspace.remove(String name) method that can remove a Layer from the Workspace. |
| 136 | + |
| 137 | + The Shapefile module inherited a Shapefile.dump(File,Layer) method from GeoTools. |
| 138 | + |
| 139 | + Shapefile and Property layers can look up side car SLD or CSS files. |
| 140 | + |
| 141 | + The Property Workspace got a getFile() method. |
| 142 | + |
| 143 | + The WFS Workspace can optionally take user and password parameters. |
| 144 | + |
6 | 145 | 1.6.0
|
7 | 146 | -----
|
8 | 147 |
|
9 |
| - The 1.6.0 release of GeoScript is build on Groovy 2.4.4, GeoTools 14.0, and the Java Topology Suite 1.13. |
| 148 | + The 1.6.0 release of GeoScript is built on Groovy 2.4.4, GeoTools 14.0, and the Java Topology Suite 1.13. |
10 | 149 |
|
11 | 150 | Significant new features include support for Geobuf, a OGR Workspace, and improvements to the Tile module.
|
12 | 151 |
|
|
0 commit comments