forked from locationtech/geotrellis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG.rst
1143 lines (858 loc) · 54.1 KB
/
CHANGELOG.rst
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Changelog
=========
2.0.0
-----
API Changes
^^^^^^^^^^^
- ``geotrellis.spark``
- **Deprecation:** ``geotrellis.slick`` is being deprecated and will likely be moved to an external repo
- **Change:** ``geotrellis.slick.Projected`` has been moved to ``geotrellis.vector.Projected``
- **Change:** The length of the key (the space-filling curve index or address) used for layer reading and writing has
been extended from a fixed length of 8 bytes to an arbitrary length. This change affects not only the
``geotrellis.spark`` package, but all backends (excluding ``geotrellis.geowave`` and ``geotrellis.geomesa``).
- **New:** All focal operations now except an optional ``partitioner`` parameter.
- **New:** ``BufferTiles``\s ``apply`` methods and the ``bufferTiles`` methods now except an optional ``partitioner`` parameter.
- **Change:** Reprojection has improved performance due to one less shuffle stage and lower memory usage.
``TileRDDReproject`` loses dependency on ``TileReprojectMethods`` in favor of ``RasterRegionReproject``
- **New:** CollectionLayerReader now has an SPI interface.
- **New:** ``ZoomResample`` can now be used on ``MultibandTileLayerRDD``\s.
- **New:** A ``Partitioner`` can be specified in the ``reproject`` methods of ``TileLayerRDD``.
- **New:** Compression ``level`` of GeoTiffs can be specified in the ``DeflateCompression`` constructor.
- **Change:**: The Ascii draw methods are now method extensions of ``Tile``.
- **Change:** Replace `geotrellis.util.Functor` with `cats.Functor`
- **Change:** Specifying the ``maxTileSize`` for a COGLayer that's to be written is now done via ``COGLayerWriter.Options``
which can be passed directly to the ``write`` methods.
- **New:** The ``resampleMethod`` parameter has been added to ``COGLayerWriter.Options``.
- **Change:** Specifying the ``compression`` for a COGLayer that's to be written is now done via ``COGLayerWriter.Options``
which can be passed directly to the ``write`` methods.
- **New:** A new type called ``LayerType`` has been created to help identify the nature of a layer (either Avro or COG).
- **New:** ``LayerHeader``\s now have an additional parameter: ``layerType``.
- **Change:** The attribute name for ``COGLayerStorageMetadata`` is now ``metadata`` instead of ``cog_metadata``.
- **New:** ``AttributeStore`` now has four new methods: ``layerType``, ``isCOGLayer``, ``readCOGLayerAttributes``,
and ``writeCOGLayerAttributes``.
- **New:** Kryo serialization of geometry now uses a binary format to reduce shuffle block size
- **Change:** Scalaz streams were replaced by fs2 streams
- **Change:** Replace `geotrellis.util.Functor` with `cats.Functor`.
- ``geotrellis.raster``
- **Change:** Removed ``decompress`` option from `GeoTiffReader` functions.
Fixes
^^^^^
- `StreamingHistogram.binCount now returns non-zero counts <https://github.com/locationtech/geotrellis/pull/2590>`__
- `HilbertSpatialKeyIndex index offset <https://github.com/locationtech/geotrellis/pull/2586>`__
- **Note:** Existing spatial layers using Hilbert index will need to be updated, see PR for directions.
- Fixed ``CastException`` that sometimes occured when reading cached attributes.
- Uncompressed GeoTiffMultibandTiles will now convert to the correct CellType.
- Calculating the Slope of a ``Tile`` when ``targetCell`` is ``Data`` will now produce the correct result.
- Introduce new hooks into AttributeStore API to allow for better performance in certain queries against catalogs with many layers
- ``GeoTiffReader`` can now read tiffs that are missing the ``NewSubfileType`` tag.
- Pyramiding code will once again respect resampling method and will now actually reduce shuffle volume by resampling
tiles on map side of pyramid operation
- Uncompressed GeoTiffMultibandTiles will now convert to the correct CellType.
- COGLayer attributes can be accessed via the various read attribute methods in
``AttributeStore`` (ie ``readMetadata``, ``readHeader``, etc)
- The regex used to match files for the ``HadoopLayerAttributeStore`` and ``FileLayerAttributeStore`` has been
expanded to include more characters.
- ``HadoopAttributeStore.availableAttributes`` has been fixed so that it'll now list all attribute files.
- Allow for simple features to be generated with a specified or random id with geometry stored in the standard
field, "the_geom"
- Use a new Amazon SDK API to remove deprecation warnings.
1.2.1
_____
*2018 Jan 3*
Fixes
^^^^^
- `GeoTiffSegmentLayout.getIntersectingSegments bounds checking <https://github.com/locationtech/geotrellis/pull/2534>`__
- `Fix for area of vectorizer that can throw topology exceptions <https://github.com/locationtech/geotrellis/pull/2530>`__
- `Fix Tile.flipHorizontal for floating point tiles <https://github.com/locationtech/geotrellis/pull/2535>`__
1.2.0
-----
*2017 Nov 6*
This release cycle saw a regular contributor `Simeon Fitch <https://github.com/metasim>`__
elevated to official *Committer* status within GeoTrellis.
The team would like to thank him, along with our newest contributors `Aaron Santos <https://github.com/aaron-santos>`__,
`Austin Heyne <https://github.com/aheyne>`__, `Christos Charmatzis <https://github.com/Charmatzis>`__,
`Jessica Austin <https://github.com/jessicaaustin>`__, and `@mteldridge <https://github.com/mteldridge>`__
for helping make this release possible.
API Changes
^^^^^^^^^^^
- ``geotrellis.raster``
- **Deprecation:** ``GridBounds.size`` in favor of ``GridBounds.sizeLong``.
- **Deprecation:** ``GridBounds.coords`` in favor of ``GridBounds.coordsIter``.
- **New:** ``GridBounds.offset`` and ``GridBounds.buffer`` for creating a
modified ``GridBounds`` from an existing one.
- **New:** ``ColorRamps.greyscale: Int => ColorRamp``, which will generate
a ramp when given some number of stops.
- **New:** ``ConstantTile.fromBytes`` to create any type of ``ConstantTile``
from an ``Array[Byte]``.
- **New:** ``Tile.rotate90: Int => Tile``, ``Tile.flipVertical: Tile`` and
``Tile.flipHorizontal: Tile``.
- ``geotrellis.vector``
- **New:** ``Geometry.isEmpty: Boolean``. This incurs much less overhead than
previous ways of determining emptiness.
- **New:** ``Line.head`` and ``Line.last`` for **efficiently** grabbing the first or
last ``Point`` in the ``Line``.
- ``geotrellis.spark``
- **Deprecation:** The ``LayerUpdater`` trait hierarchy. Use ``LayerWriter.update`` or
``LayerWriter.overwrite`` instead.
- **Deprecation:** Every cache provided by ``geotrellis.spark.util.cache``.
These will be removed in favor of a pluggable cache in 2.0.
- **New:** ``SpatialKey.extent: LayoutDefinition => Extent``
- **New:** ``ValueReader.attributeStore: AttributeStore``
- **New:** ``TileLayerRDD.toSpatialReduce: ((V, V) => V) => TileLayerRDD[SpatialKey]`` for smarter
folding of 3D tile layers into 2D tile layers.
- The often-used ``apply`` method overloads in ``MapKeyTransform`` have been given
more descriptive aliases.
- **Change:** Querying a layer will now produce a result whose metadata will have an ``Extent`` and
``KeyBounds`` of the queried region and not of the whole layer.
- ``geotrellis.vectortile`` (experimental)
- **New:** ``VectorTile.toGeoJson`` and ``VectorTile.toIterable``.
- Library simplified by assuming the codec backend will always be Protobuf.
New Features
^^^^^^^^^^^^
Rasterizing ``Geometry`` Layers
*******************************
Finally, the full marriage of the ``vector``, ``raster``, and ``spark`` packages!
You can now transform an ``RDD[Geometry]`` into a writable GeoTrellis layer of
``(SpatialKey, Tile)``!
.. code-block:: scala
val geoms: RDD[Geometry] = ...
val celltype: CellType = ...
val layout: LayoutDefinition = ...
val value: Double = ... /* Value to fill the intersecting pixels with */
val layer: RDD[(SpatialKey, Tile)] with Metadata[LayoutDefinition] =
geoms.rasterize(value, celltype, layout)
Clipping ``Geometry`` Layers to a Grid
**************************************
In a similar vein to the above, you can now transform an arbitrarily large
collection of Geometries into a proper GeoTrellis layer, where the sections
of each Geometry are clipped to fit inside their enclosing Extents.
.. figure:: img/cliptogrid.png
Here we can see a large ``Line`` being clipped into nine sublines. It's
one method call:
.. code-block:: scala
import geotrellis.spark._
val layout: LayoutDefinition = ... /* The definition of your grid */
val geoms: RDD[Geometry] = ... /* Result of some previous work */
/* There are likely many clipped Geometries per SpatialKey... */
val layer: RDD[(SpatialKey, Geometry)] = geoms.clipToGrid(layout)
/* ... so we can group them! */
val grouped: RDD[(SpatialKey, Iterable[Geometry])] = layer.groupByKey
If clipping on the Extent boundaries is not what you want, there are ways
to customize this. See `the ClipToGrid entry in our Scaladocs <https://geotrellis.github.io/scaladocs/latest/#geotrellis.spark.clip.ClipToGrid$>`__.
Sparkified Viewshed
*******************
A `Viewshed <https://en.wikipedia.org/wiki/Viewshed>`__ shows "visibility" from some
set vantage point, given an Elevation raster. Prior to GeoTrellis 1.2 this was possible
at the individual ``Tile`` level but not the Layer (``RDD``) level. Now it is.
First, we need to think about the ``Viewpoint`` type:
.. code-block:: scala
import geotrellis.spark.viewshed._
val point: Viewpoint(
x = ..., // some coordinate.
y = ..., // some coordinate.
viewHeight = 4000, // 4 kilometres above the surface.
angle = Math.PI / 2, // direction that the "camera" faces (in radians). 0 == east.
fieldOfView = Math.PI / 2, // angular width of the "view port".
altitude = 0 // the height of points you're interested in seeing.
)
In other words:
- x, y, viewHeight: where are we?
- angle: what direction are we looking?
- fieldOfView: how wide are we looking?
- altitude: how high/low is the "target" of our viewing?
Given a ``Seq[Viewpoint]`` (the algorithm supports multiple simultaneous view points),
we can do:
.. code-block:: scala
// Recall this common alias:
// type TileLayerRDD[K] = RDD[(K, Tile)] with Metadata[TileLayerMetadata[K]]
val layer: TileLayerRDD[SpatialKey] = ... /* Result of previous work */
val viewshed: TileLayerRDD[SpatialKey] = layer.viewshed(Seq(point))
Sparkified Euclidean Distance
*****************************
We use *Euclidean Distance* to render a collection of points into a heatmap of
proximities of some area. Say, of two roads crossing:
.. figure:: img/euclid.png
Prior to GeoTrellis 1.2, this was possible at the individual ``Tile`` level
but not the Layer (``RDD``) level. Now it is.
.. code-block:: scala
/* Result of previous work. Potentially millions of points per SpatialKey. */
val points: RDD[(SpatialKey, Array[Coordinate])] = ...
val layout: LayoutDefinition = ... /* The definition of your grid */
val layer: RDD[(SpatialKey, Tile)] = points.euclideanDistance(layout)
Polygonal Summaries over Time
*****************************
The following was possible prior to GeoTrellis 1.2:
.. code-block:: scala
val layer: TileLayerRDD[SpatialKey] = ...
val polygon: Polgyon = ...
/* The maximum value within some Polygon overlaid on a Tile layer */
val summary: Double = layer.polygonalMaxDouble(polygon)
The above is also now possible for layers keyed by ``SpaceTimeKey`` to form
a "time series":
.. code-block:: scala
val layer: TileLayerRDD[SpaceTimeKey] = ...
val polygon: MultiPolygon = ...
/* The maximum value within some Polygonal area at each time slice */
val summary: Map[ZonedDateTime, Double] = layer.maxSeries(polygon)
Overzooming ``ValueReader``
***************************
A GeoTrellis ``ValueReader`` connects to some layer catalog and lets you read
individual values (usually Tiles):
.. code-block:: scala
import geotrellis.spark.io.s3._
val store: AttributeStore = ...
val reader: Reader[SpatialKey, Tile] = S3ValueReader(store).reader(LayerId("my-catalog", 10))
val tile: Tile = reader.read(SpatialKey(10, 10))
However ``.reader`` is limited to zoom levels that actually exist for the given layer.
Now you can use ``.overzoomingReader`` to go as deep as you like:
.. code-block:: scala
import geotrellis.raster.resample._
val reader: Reader[SpatialKey, Tile] =
S3ValueReader(store).overzoomingReader(LayerId("my-catalog", 20), Average)
val tile: Tile = reader.read(SpatialKey(1000, 1000))
Regridding a Tile Layer
***********************
Have you ever wanted to "redraw" a grid over an established GeoTrellis layer?
Say, this 16-tile Layer into a 4-tile one, both of 1024x1024 total pixels:
.. figure:: img/regrid.png
Prior to GeoTrellis 1.2, there was no official way to do this. Now you can use
``.regrid``:
.. code-block:: scala
/* The result of some previous work. Say each Tile is 256x256. */
val layer: TileLayerRDD[SpatialKey] = ...
/* "Recut" the tiles so that each one is now 512x512.
* No pixels are gained or lost, save some NODATA on the bottom
* and right edges that may appear for padding purposes.
*/
val regridded: TileLayerRDD[SpatialKey] = layer.regrid(512)
You can also regrid to non-rectangular sizes:
.. code-block:: scala
val regridded: TileLayerRDD[SpatialKey] = layer.regrid(tileCols = 100, tileRows = 300)
Robust Layer Querying
**********************
It's common to find a subset of Tiles in a layer that are touched by some given
``Polygon``:
.. code-block:: scala
val poly: Polygon = ???
val rdd: TileLayerRDD[SpatialKey] =
layerReader
.query[SpatialKey, Tile, TileLayerMetadata[SpatialKey]](Layer("name", zoom))
.where(Intersects(poly))
.result
Now you can perform this same operation with ``Line``, ``MultiLine``, and even
``(Polygon, CRS)`` to ensure that your Layer and Geometry always exist in the
same projection.
Improved ``Tile`` ASCII Art
***************************
Sometimes you just want to visualize a ``Tile`` without going
through the song-and-dance of rendering it to a ``.png``. The existing
``Tile.asciiDraw`` method *kind of* does that, except its output is all
in numbers.
The new ``Tile.renderAscii: Palette => String`` method fulfills your heart's desire:
.. code-block:: scala
import geotrellis.raster._
import geotrellis.raster.io.geotiff._
import geotrellis.raster.render.ascii._
val tile: Tile = SinglebandGeoTiff("path/to/tiff.tiff").tile
// println(tile.renderAscii()) // the default
println(tile.renderAscii(AsciiArtEncoder.Palette.STIPLED))
::
▚▖
▚▚▜▚▚
▚▖▚▜▚▖▚▚
▜▚▚▚▜▚█▚▜▚█▚
█▚▜▖▜▖▚▚█▚▚▜▚█▖
▚▚█▚▜▚▚▚▚▚▚▚▜▚▚▚▚▚
▚▚▖▚▚▚▚▚█▜▚▚▜▚▚▖▚▖▚▖▚
▚▚▚▚█▚▚▚▚▚██▚▚▚▜▖▖██▚▚▜▚
▚▚█▚▚▚▚▚▚▚▜▚▚▚▚▚▚▜▚█▚▚▚▚▚▚▚
█▚▚▖▚█▚▜▚▚▚▚▖▚▚▚▚▚▚▚▚▚▚▜▚▚▚▚▚▚▖
█▚▚▚▜▚▖▚▚▚▚▚▚▚▚▚▚▚▚▚▚▚▚▚██▖▜▚█▚▚▚
█▚▚██▚▚▚▚▚▚▚▚▖▚▚▚▚▚▚▚▚█▚▚▚▚▚▚▖▖▖▚▚▚▚
█▜▚▚██▜▚▚▚▜▖▚▚▜▚█▜▚▚▚▜▚▖▚▜▚█▚▚▖▚▚▖▚▚▖▖▚▚
▚▚█▚▚▚█▚██▚▚▚▚▚▚▚▚▜▚▚█▜▚▖█▚▚▚▜▚▚▚▚▚▚▜▚█▚█
█▚▜▚▜▚█▚▜▚▚▜▚█▚▚▚▚▚▚▚▚▚▚▚▖▚▖▚▚▖▚█▚█▚▚▚▖█▚
████▚███▚▚▚▚██▚▚▚█▜▚▚▖▚▚▚▖▖▚▚▚▚▚▚▚▚█▚▜▖█
▖█▜▚█▚██▜▖▜▜█▜▜█▜▚▚▚▚▚█▖▚▚▚▚█▚▚▚▚▚▚▜▚▚█▖▜
▚▖██▚▜▚█▚▚▜▜█▜▜▜██▚▚▚▚█▚▚▚▜▖▚▚█▚▖▚▜▚▚▚▖▚█
█▚▚▚▚▜▚██▖██▜▚▚█▚▚▖▚▚▜▚▖▚▖▚▚▚▚▚▖▚▚▖▖▖▚▖▚
▚▚▚█▚▚▚▚▚█▜▚▚████▚█▚▚▚█▚▖▚▚▚▖▚▚█▚▚▖▚▚▚▖▖▖
▚▚▚█▚▚▚▖▖▚▜█▜██▜██▚▚▖██▜▚▜▚█▚▚▚▚▚▚▚▚▖▖▜██
▚▚▚▚▜█▚▚▚▚▚█████▚▜██▚██▚▚▚▚▜▚▖▚█▚▚▖▚▖▚▚█
▚▚▜▚▚▚▚▜▚▜▚▚▚▚▜▚█▚▜█▚██▚██▚▚▚▚▖▚▚▚▚▖▖▚▚▖█
▚▜▚▜▚▚▚▚▚▚█▚▚▚▚▚██▜▜▜███▖▚▚▜█▚▚▖▚█▚▚█▚▖▚
▚▜▚▚▚▚▚▚▚▚▚▚▜▜▜▚▚▖▚▖▚▚▜▜██▜▚██▚▚▚▚▚▚▖▜█▚
▚▚▖▚▚█▚█▚▚▚█▚▖▚▚▚█▚▚▚▚▚▜██▚█▜▚█▚▜▚▚███▜█▜
▚▚▚▜▚▚▚▚▚▚▚▚▚▚▚▖█▚█▚▚▜█▜█▜█▜▚▖▚▚▚██▜▜█▚▜
▚▚▚▚▜▚▚▚▚▚▚▜▚▚▚▚▚▚▖▚█▜▖▖█▚▖▜▖▚▖█▚▖█▚▚▜▚█
▚▚█▚▚█▚▚▜▚▚▚▚▜▚▚▚▚▚▜▚▖▚█▜█▚▜▜▚█▖▜███▜▚▚
▚▚▚▚▚▚▖▜▚█▚▚▚▖▚▚▚▚▚▚▚▚▚▚▚▜█▖▜▜▜█▚▚▚▖▚█▚█
▜▚▚▚█▚▖▚█▚█▚▚█▚▚▚▚▚▚▚▖▚▚▚▜▚▚▚▜▚▖▚▖▚▚▚▚▜▚
▚▚▚▚▖▚█▖█▜▚▚▚▚▚▚▚▚▖▚▚▖▖█▚▜▚▖▚▚▚▚▖▖▚█▚▚▚
▚▚▚▚▚▚▚▚▚█▚▚▚▖▚▚▚█▚▜▚█▚▚▖▜██▚▖▚▚▚▚▚▚▚▚▚▖
▚▚▚▚▚▚▚▖▚▚██▚▚▚▚▚▚▚▚▜▚▚█▚██▚▚▚▚▖▚▚▖▚▚█▜▖
▚▚▚▚▚▚▚▚▚▚▚▚▚█▚▜▚▚▚▜▚▚▖▚▚▚▚▚▜▚▚▚▚▖▚▚▚▚▚
▚██▖▚▚▚▚▚▚▚▚▜▚▚█▚▚▚▚▜▚▚▚▚█▜▖▚▚█▜▜█▜█▚▖▚▖
▚▚▚▖▚▚█▚▚▜███▚▚▚▜▚▚▚▚▚█▚▖▖█▖▚████▜███▚██
▚█▚▚▚▚██▜▚▜▚▜▜▜█▜▚█▚▜▖▜▚▚▚█▚▜█▚▜▚▚▚▚▚▖▖
█▜█▚▚▜▚▜▚▜▜▜▚▚▚▚██▖▖▖▚██▖█▚▜▜▚▚▚▚▚▚▖
▚█▜▜▜▜▜██▚▜▚▚▚▚▚▚▖▜▚▜▚▚▚▜▚█▚▚▖▖▖
██▚▚▚▚▚▚▚▜▚▜▖▚██▜▜▚▖▚▚█▚▚▚▖▜▜
▜▚▚▖▚▚▚▖▚▜▜██▜▜▚█▚▚▜▚▚▜██▚
▚▚█▚▜▚▚█▖▜▚▚▚▖█▚▚█▚▚█▚
█▜▜▚▚▜▜▚▚▚▜█▚▚▚▜█▜█
▚▚▖▚█▖▚▖▜▚▖▚▖▜▚
███▖██▚▖▚▚▚▚
▜▚▚█▚▚▖▖█
▚▖▜█▜▚
▖█▚
Gorgious.
Storage on Azure via HDFS
*************************
By adding some additional configuration, you can now use our
`HDFS Layer Backend <guide/tile-backends.html#hdfs>`__ to read and write GeoTrellis
layers to Microsoft Azure's blob storage.
S3 Configurability
******************
`It's now possible to customize how our S3 backend communicates with S3.
<guide/examples.html#work-with-s3-using-a-custom-s3client-configuration>`__
Configuring JTS Precision
*************************
GeoTrellis uses the `Java Topology Suite <https://github.com/locationtech/jts>`__
for its vector processing. By default, JTS uses a "floating"
`PrecisionModel <https://locationtech.github.io/jts/javadoc/org/locationtech/jts/geom/PrecisionModel.html>`__.
When writing code that needs to be numerically robust, this default can lead to Topology Exceptions.
You can now use `Typesafe Config <https://github.com/lightbend/config>`__ to configure this
to your application's needs. `See here for the specifics. <guide/vectors.html#numerical-precision-and-topology-exceptions>`__
Other New Features
******************
- `Kerberos authentication is available for properly configured Accumulo clusters <https://github.com/locationtech/geotrellis/pull/2510>`__
- `Polygonal Summaries for MultibandTiles <https://github.com/locationtech/geotrellis/pull/2374>`__
- `Filter GeoTiffRDDs by Geometry <https://github.com/locationtech/geotrellis/pull/2409>`__
- `Can create ValueReaders via URIs through LayerProvides classes <https://github.com/locationtech/geotrellis/pull/2286>`__
- `Can read/write GeoTiffs with Sinusoidal projections <https://github.com/locationtech/geotrellis/pull/2345>`__
- `Can Resample via Sum operation <https://github.com/locationtech/geotrellis/pull/2326>`__
Fixes
^^^^^
- `Negative grid bounds bug <https://github.com/locationtech/geotrellis/pull/2364>`__
- `getSignedByteArray BugFix - fixes certain read problems <https://github.com/locationtech/geotrellis/pull/2270>`__
- `Allow Merge Queue To Handle Larger Inputs <https://github.com/locationtech/geotrellis/pull/2400>`__
- `Generate Windows That Conform To GeoTiff Segments <https://github.com/locationtech/geotrellis/pull/2402>`__
- `Removed inefficient LayerFilter check <https://github.com/locationtech/geotrellis/pull/2324>`__
- `Fixed issue with S3 URI not having a key prefix <https://github.com/locationtech/geotrellis/pull/2316>`__
- `Improve S3 makePath function <https://github.com/locationtech/geotrellis/pull/2352>`__
- `Fix S3GeoTiffRDD behavior with some options. <https://github.com/locationtech/geotrellis/pull/2317>`__
- `Allow Contains(Point) query for temporal rdds <https://github.com/locationtech/geotrellis/pull/2297>`__
- `Haversine formula fix <https://github.com/locationtech/geotrellis/pull/2408>`__
- `Use Scaffeine instead of LRU cache in HadoopValueReader <https://github.com/locationtech/geotrellis/pull/2421>`__
- `Fix GeoTiffInfo serialization issues <https://github.com/locationtech/geotrellis/pull/2312>`__
- `Estimate partitions number based on GeoTiff segments <https://github.com/locationtech/geotrellis/pull/2296>`__
- `Estimate partitions number basing on a desired partition size <https://github.com/locationtech/geotrellis/pull/2289>`__
- `Pyramid operation preserves partitioning <https://github.com/locationtech/geotrellis/pull/2311>`__
- `Don't constrain GridBounds size to IntMax x IntMax <https://github.com/locationtech/geotrellis/pull/2292>`__
- `4-Connected Line Drawing <https://github.com/locationtech/geotrellis/pull/2336>`__
- `Added requirement for CRS implementations to provide a readable toString representation. <https://github.com/locationtech/geotrellis/pull/2337>`__
- `Allow rasterizer to store Z value at double precision <https://github.com/locationtech/geotrellis/pull/2388>`__
- `Changed scheme path file from /User -> current working dir <https://github.com/locationtech/geotrellis/pull/2393>`__
- `Fix CRS parser and proj4 cea projection support <https://github.com/locationtech/geotrellis/pull/2403>`__
1.1.0
-----
Features
^^^^^^^^
- `Spark Enabled Cost Distance <https://github.com/locationtech/geotrellis/pull/1999>`__
- `Conforming Delaunay Triangulation <https://github.com/locationtech/geotrellis/pull/1848>`__
- Added a fractional-pixel rasterizer for `polygons <https://github.com/locationtech/geotrellis/pull/1873>`__ and `multipolygons <https://github.com/locationtech/geotrellis/pull/1894>`__
- `Added collections API mapalgebra local and masking functions <https://github.com/locationtech/geotrellis/pull/1947>`__
- `Added withDefaultNoData method for CellTypes <https://github.com/locationtech/geotrellis/pull/1966>`__
- `Moved Spark TestEnvironment to spark-testkit subproject for usage outside of GeoTrellis <https://github.com/locationtech/geotrellis/issues/2012>`__
- `Add convenience overloads to GeoTiff companion object <https://github.com/locationtech/geotrellis/pull/1840>`__
- `Added matplotlib's Magma, Inferno, Plasma, and Viridis color ramps <https://github.com/locationtech/geotrellis/pull/2053>`__
- `Added library of land use classification color maps. <https://github.com/locationtech/geotrellis/pull/2073>`__
- `Add MGRS encode/decode support to proj4 <https://github.com/locationtech/geotrellis/pull/1838>`__
- `Rasters write support to HDFS / S3 <https://github.com/locationtech/geotrellis/pull/2102>`__
- `Added Range-based reading of HTTP resources <https://github.com/locationtech/geotrellis/pull/2067>`__
- `Improved the WKT parser that powers the WKT.getEpsgCode method <https://github.com/locationtech/geotrellis/pull/1931>`__
- `Updated the geotrellis-geowave subproject to GeoWave 0.9.3 <https://github.com/locationtech/geotrellis/pull/1933>`__
- `Updated the geotrellis-geomesa subproject to GeoMesa 1.2.7 <https://github.com/locationtech/geotrellis/pull/1930>`__
- `Use H3 rather than Next Fit when building S3 partitions from paths <https://github.com/locationtech/geotrellis/pull/1956>`__
- `Added delimiter option to S3InputFormat and S3GeoTiffRDD. <https://github.com/locationtech/geotrellis/pull/2062>`__
- `Signed S3 Streaming for GeoTiff reader (HTTP with GET instead of HEAD request) <https://github.com/locationtech/geotrellis/pull/2091>`__
- `Relaxed constraints to improve layer deletion capabilities <https://github.com/locationtech/geotrellis/pull/2039>`__
- `Allow HadoopGeoTiffRDD and S3GeoTiffRDD to maintain additional key information such as file name <https://github.com/locationtech/geotrellis/pull/2050>`__
- `Added API sugar for simplying construction of AvroRecordCodec <https://github.com/locationtech/geotrellis/pull/2030>`__
- `Make compression optional for Avro encoding and decoding <https://github.com/locationtech/geotrellis/pull/1952/files>`__
- `Optimization to avoid unspecialized Function3 usage in Hillshade, Slope and Aspect <https://github.com/locationtech/geotrellis/pull/2049/files>`__
- `Updated multiple dependencies <https://github.com/locationtech/geotrellis/pull/1945>`__
- `Upgraded ScalaPB version for VectorTile <https://github.com/locationtech/geotrellis/pull/2038>`__
- Added Avro codecs for `ProjectedExtent and TemporalProjectedExtent <https://github.com/locationtech/geotrellis/pull/1971>`__ and `ConstantTile types <https://github.com/locationtech/geotrellis/pull/2015>`__
- `Repartition in ETL when re-tiling increases layer resolution <https://github.com/locationtech/geotrellis/pull/2135>`__
- `In GeoTiff reader, compute CellSize from TIFF tags <https://github.com/locationtech/geotrellis/pull/1996>`__
- `Improved apply methods for constructing S3RangeReader <https://github.com/locationtech/geotrellis/pull/1994>`__
- `Reorganized handling of CellType.name <https://github.com/locationtech/geotrellis/pull/2142>`__
- Documentation improvements, including `porting the docts to reStructuredText <https://github.com/locationtech/geotrellis/pull/2016>`__
- `Added top-level "Sinusoidal" CRS, commonly used with MODIS <https://github.com/locationtech/geotrellis/pull/2145>`__
- `Added conditional to key bounds decomposition to detect full bounds query in Acccumulo. <https://github.com/locationtech/geotrellis/pull/2164>`__
- `Support for the ability to specify output CRS via proj4 string. <https://github.com/locationtech/geotrellis/pull/2169>`__
Fixes
^^^^^
- `Fixed issues that made GeoTiff streaming off of S3 slow and broken <https://github.com/locationtech/geotrellis/pull/1905>`__
- `Give a better error message for CRS write failures <https://github.com/locationtech/geotrellis/pull/1874>`__
- `Fix clipping logic during polygon layer query <https://github.com/locationtech/geotrellis/pull/2213>`__
- `Fixed type for CRS authority in NAD83 <https://github.com/locationtech/geotrellis/pull/1916>`__
- `Moved JsonFormats for CellSize and CellType to their proper place <https://github.com/locationtech/geotrellis/pull/1919>`__
- `Fixed polygon rasterization for complex polygon test cases <https://github.com/locationtech/geotrellis/pull/1963>`__
- `Fixed issue with FileLayerDeleter <https://github.com/locationtech/geotrellis/pull/2015>`__
- `Fixed issue with logger serialization <https://github.com/locationtech/geotrellis/pull/2017>`__
- `Fixed bug in renderPng that caused incorrect rendering of non-floating-point rasters <https://github.com/locationtech/geotrellis/issues/2022>`__
- `Don't allow illegal TileLayouts <https://github.com/locationtech/geotrellis/issues/2026>`__
- `Prevent error from happening during Pyramiding <https://github.com/locationtech/geotrellis/pull/2029>`__
- `Ensure tile columns are not zero when rounding <https://github.com/locationtech/geotrellis/pull/2031>`__
- `Fixed malformed XML error that was happening after failed S3 ingest <https://github.com/locationtech/geotrellis/pull/2040>`__
- `Fix issue with S3LayerDeleter deleting files outside of layer <https://github.com/locationtech/geotrellis/pull/2070>`__
- `Fix TemporalProjectedExtentCodec to handling proj4 strings when CRS isn't available <https://github.com/locationtech/geotrellis/pull/2034>`__
- `Fixed layoutForZoom to allow 0 zoom level <https://github.com/locationtech/geotrellis/pull/2057>`__
- `Fixed MapKeyTransform to deal with points north and west of extent <https://github.com/locationtech/geotrellis/pull/2060>`__
- `Fixed GeoTiff reading for GeoTiffs with model tie point and PixelIsPoint <https://github.com/locationtech/geotrellis/pull/2061>`__
- `Fixed issue with reading tiny (4 pixel or less) GeoTiffs <https://github.com/locationtech/geotrellis/pull/2063>`__
- `Fix usage of IntCachedColorMap in Indexed PNG encoding <https://github.com/locationtech/geotrellis/pull/2075>`__
- `Ensure keyspace exists in CassandraRDDWriter <https://github.com/locationtech/geotrellis/pull/2083>`__
- `Resolved repartitioning issue with HadoopGeoTiffRDD <https://github.com/locationtech/geotrellis/pull/2105>`__
- `Fixed schema for intConstantTileCodec <https://github.com/locationtech/geotrellis/pull/2110>`__
- `In HadoopAttributeStore, get absolute path for attributePath <https://github.com/locationtech/geotrellis/pull/2123>`__
- `In AccumuloLayerDeleter, close batch deleter <https://github.com/locationtech/geotrellis/pull/2117>`__
- `S3InputFormat - bucket names support period and dashes <https://github.com/locationtech/geotrellis/pull/2133>`__
- `Fix TMS scheme min zoom level <https://github.com/locationtech/geotrellis/pull/2137>`__
- `S3AttributeStore now handles ending slashes in prefix. <https://github.com/locationtech/geotrellis/pull/2147>`__
- `Cell type NoData logic for unsigned byte / short not working properly <https://github.com/locationtech/geotrellis/pull/2171>`__
- `CellSize values should not be truncated to integer when parsing from Json. <https://github.com/locationtech/geotrellis/pull/2174>`__
- `Fixes to GeoTiff writing with original LZW compression. <https://github.com/locationtech/geotrellis/pull/2180>`__
- `In ArrayTile.convert, debug instead of warn against floating point data loss. <https://github.com/locationtech/geotrellis/pull/2190>`__
- `Fixes incorrect metadata update in a per-tile reprojection case <https://github.com/locationtech/geotrellis/pull/2201>`__
- `Fix issue with duplicate tiles being read for File and Cassandra backends <https://github.com/locationtech/geotrellis/pull/2200>`__
- `Move to a different Json Schema validator <https://github.com/locationtech/geotrellis/pull/2222>`__
- `S3InputFormat does not filter according to extensions when partitionCount is used <https://github.com/locationtech/geotrellis/issues/2231>`__
- `In S3GeoTiffReader, partitionBytes has no effect if maxTileSize is set <https://github.com/locationtech/geotrellis/issues/2232>`__
- `Fixes typos with rasterizer extension methods <https://github.com/locationtech/geotrellis/pull/2245>`__
- `Fix writing multiband GeoTiff with compression <https://github.com/locationtech/geotrellis/pull/2246>`__
- `Fixed issue with BigTiff vs non-BigTiff offset value packing <https://github.com/locationtech/geotrellis/pull/2247>`__
API Changes
^^^^^^^^^^^
While we are trying to stick strictly to `SemVer <http://semver.org/>`__, there are slight API changes in this release. We felt that while this does break SemVer in the strictest sense, the change were not enough to warrant a 2.0 release. Our hope is in the future to be more cognizant of API changes for future releases.
- Made EPSG capatilization `consistent in method names <https://github.com/locationtech/geotrellis/commit/343588b4b066851ea6b35a7d9cc671f4a6d47f2c>`__:
- In ``geotrellis.proj4.CRS``, changed ``getEPSGCode`` to ``getEpsgCode``
- In ``geotrellis.proj4.io.wkt.WKT``, changed ``fromEPSGCode`` to ``fromEpsgCode`` and ``getEPSGCode`` to ``getEpsgCode``
- Changed some internal but publicly visible `classes dealing with GeoTiff reading <https://github.com/locationtech/geotrellis/pull/1905>`__
- Changed ``size`` to ``length`` in ``ArraySegmentBytes``
- Replaced ``foreach`` on SegmentBytes with ``getSegments``, which the caller can iterate over themselves
- Changed ``getDecompressedBytes`` to ``decompressGeoTiffSegment``
- Changed some interal but publicly visible `implicit classes and read methods around TiffTagReader <https://github.com/locationtech/geotrellis/pull/2247>`__
- Added as an implicit parameter to multiple locations, most publicly in `TiffTagReader.read(byteReader: ByteReader, tagsStartPosition: Long)(implicit ttos: TiffTagOffsetSize)`. Also changed that method from being generic to always taking a `Long` offset.
- Moved some misplaced `implicit JsonFormats <https://github.com/locationtech/geotrellis/pull/1919>`__
- Moved ``CellTypeFormat`` and ``CellSizeFormat`` from `` geotrellis.spark.etl.config.json`` in the ``spark-etl`` subproject to ``geotrellis.raster.io.json.Implicits`` in the ``raster`` subproject.
- Changed LazyLogger `from the com.typesafe.scalalogging version to our own version <https://github.com/locationtech/geotrellis/pull/2017>`__
- This shouldn't break any code, but technically is an API change.
1.0.0
-----
Major Features
^^^^^^^^^^^^^^
- GeoTools support
- Add Support for GeoTools SimpleFeature
`#1495 <https://github.com/locationtech/geotrellis/pull/1495>`__
- Conversions between GeoTools GridCoverage2D and GeoTrellis Raster
types
`#1502 <https://github.com/locationtech/geotrellis/pull/1502>`__
- Streaming GeoTiff reading
`#1559 <https://github.com/locationtech/geotrellis/pull/1559>`__
- Windowed GeoTiff ingests into GeoTrellis layers, allowing users to
ingest large GeoTiffs
`#1763 <https://github.com/locationtech/geotrellis/pull/1763>`__
- Reading TiffTags via MappedByteBuffer
`#1541 <https://github.com/locationtech/geotrellis/pull/1541>`__
- Cropped Windowed GeoTiff Reading
`#1559 <https://github.com/locationtech/geotrellis/pull/1559>`__
- Added documentation to the GeoTiff\* files
`#1560 <https://github.com/locationtech/geotrellis/pull/1560>`__
- Windowed GeoTiff Docs
`#1616 <https://github.com/locationtech/geotrellis/pull/1616>`__
- GeoWave Raster/Vector support (experimental)
- Create GeoWave Subproject
`#1542 <https://github.com/locationtech/geotrellis/pull/1542>`__
- Add vector capabilities to GeoWave support
`#1581 <https://github.com/locationtech/geotrellis/pull/1581>`__
- Fix GeoWave Tests
`#1665 <https://github.com/locationtech/geotrellis/pull/1665>`__
- GeoMesa Vector support (experimental)
- Create GeoMesa suproject
`#1621 <https://github.com/locationtech/geotrellis/pull/1621>`__
- Moved to a JSON-configuration ETL process
- ETL Refactor
`#1553 <https://github.com/locationtech/geotrellis/pull/1553>`__
- ETL Improvements and other issues fixes
`#1647 <https://github.com/locationtech/geotrellis/pull/1647>`__
- Vector Tile reading and writing, file-based and as GeoTrellis layers
in RDDs.
`#1622 <https://github.com/locationtech/geotrellis/pull/1622>`__
- File Backends
- Cassandra support
`#1452 <https://github.com/locationtech/geotrellis/pull/1452>`__
- HBase support
`#1586 <https://github.com/locationtech/geotrellis/pull/1586>`__
- Collections API
`#1606 <https://github.com/locationtech/geotrellis/pull/1606>`__
- Collections polygonal summary functions
`#1614 <https://github.com/locationtech/geotrellis/pull/1614>`__
- Collections mapalgebra focal functions
`#1619 <https://github.com/locationtech/geotrellis/pull/1619>`__
- Add ``TileFeature`` Type
`#1429 <https://github.com/locationtech/geotrellis/pull/1429>`__
- Added Focal calculation target type
`#1601 <https://github.com/locationtech/geotrellis/pull/1601>`__
- Triangulation
- Voronoi diagrams and Delaunay triangulations
`#1545 <https://github.com/locationtech/geotrellis/pull/1545>`__,
`#1699 <https://github.com/locationtech/geotrellis/pull/1699>`__
- Conforming Delaunay Triangulation
`#1848 <https://github.com/locationtech/geotrellis/pull/1848>`__
- Euclidean distance tiles
`#1552 <https://github.com/locationtech/geotrellis/pull/1552>`__
- Spark, Scala and Java version version support
- Move to Spark 2; Scala 2.10 deprecation
`#1628 <https://github.com/locationtech/geotrellis/pull/1628>`__
- Java 7 deprecation
`#1640 <https://github.com/locationtech/geotrellis/pull/1640>`__
- Color correction features:
- Histogram Equalization
`#1668 <https://github.com/locationtech/geotrellis/pull/1668>`__
- Sigmoidal Contrast
`#1681 <https://github.com/locationtech/geotrellis/pull/1681>`__
- Histogram matching
`#1769 <https://github.com/locationtech/geotrellis/pull/1769>`__
- ``CollectNeighbors`` feature, allowing users to group arbitrary
values by the neighbor keys according to their SpatialComponent
`#1860 <https://github.com/locationtech/geotrellis/pull/1860>`__
- **Documentation:** We moved to ReadTheDocs, and put a lot of work
into making our docs significantly better. `See them
here. <http://geotrellis.readthedocs.io/en/1.0/>`__
Minor Additions
^^^^^^^^^^^^^^^
- Documentation improvements
- Quickstart
- Examples
- Added example for translating from ``SpaceTimeKey`` to
``SpatialKey``
`#1549 <https://github.com/locationtech/geotrellis/pull/1549>`__
- doc-examples subproject; example for tiling to GeoTiff
`#1564 <https://github.com/locationtech/geotrellis/pull/1564>`__
- Added example for focal operation on multiband layer.
`#1577 <https://github.com/locationtech/geotrellis/pull/1577>`__
- Projections, Extents, and Layout Definitions doc
`#1608 <https://github.com/locationtech/geotrellis/pull/1608>`__
- Added example of turning a list of features into GeoJson
`#1609 <https://github.com/locationtech/geotrellis/pull/1609>`__
- Example: ``ShardingKeyIndex[K]``
`#1633 <https://github.com/locationtech/geotrellis/pull/1633>`__
- Example: ``VoxelKey``
`#1639 <https://github.com/locationtech/geotrellis/pull/1639>`__
- Introduce ADR concept
- ADR: HDFS Raster Layers
`#1582 <https://github.com/locationtech/geotrellis/pull/1582>`__
- [ADR] Readers / Writers Multithreading
`#1613 <https://github.com/locationtech/geotrellis/pull/1613>`__
- Fixes
- Fixed some markdown docs
`#1625 <https://github.com/locationtech/geotrellis/pull/1625>`__
- ``parseGeoJson`` lives in geotrellis.vector.io
`#1649 <https://github.com/locationtech/geotrellis/pull/1649>`__
- Parallelize reads for S3, File, and Cassandra backends
`#1607 <https://github.com/locationtech/geotrellis/pull/1607>`__
- Kernel Density in Spark
- k-Nearest Neighbors
- Updated slick
- Added GeoTiff read/write support of TIFFTAG\_PHOTOMETRIC via
``GeoTiffOptions``.
`#1667 <https://github.com/locationtech/geotrellis/pull/1667>`__
- Added ability to read/write color tables for GeoTIFFs encoded with
palette photometric interpretation
`#1802 <https://github.com/locationtech/geotrellis/pull/1802>`__
- Added ``ColorMap`` to String conversion
`#1512 <https://github.com/locationtech/geotrellis/pull/1512>`__
- Add split by cols/rows to SplitMethods
`#1538 <https://github.com/locationtech/geotrellis/pull/1538>`__
- Improved HDFS support
`#1556 <https://github.com/locationtech/geotrellis/pull/1556>`__
- Added Vector Join operation for Spark
`#1610 <https://github.com/locationtech/geotrellis/pull/1610>`__
- Added Histograms Over Fractions of RDDs of Tiles
`#1692 <https://github.com/locationtech/geotrellis/pull/1692>`__
- Add ``interpretAs`` and ``withNoData`` methods to Tile
`#1702 <https://github.com/locationtech/geotrellis/pull/1702>`__
- Changed GeoTiff reader to handle BigTiff
`#1753 <https://github.com/locationtech/geotrellis/pull/1753>`__
- Added ``BreakMap`` for reclassification based on range values.
`#1760 <https://github.com/locationtech/geotrellis/pull/1760>`__
- Allow custom save actions on ETL
`#1764 <https://github.com/locationtech/geotrellis/pull/1764>`__
- Multiband histogram methods
`#1784 <https://github.com/locationtech/geotrellis/pull/1784>`__
- ``DelayedConvert`` feature, allowing users to delay conversions on
tiles until a map or combine operation, so that tiles are not
iterated over unnecessarily
`#1797 <https://github.com/locationtech/geotrellis/pull/1797>`__
- Add convenience overloads to GeoTiff companion object
`#1840 <https://github.com/locationtech/geotrellis/pull/1840>`__
Fixes / Optimizations
^^^^^^^^^^^^^^^^^^^^^
- Fixed GeoTiff bug in reading NoData value if len = 4
`#1490 <https://github.com/locationtech/geotrellis/pull/1490>`__
- Add detail to avro exception message
`#1505 <https://github.com/locationtech/geotrellis/pull/1505>`__
- Fix: The toSpatial Method gives metadata of type
TileLayerMetadata[SpaceTimeKey]
- Custom ``Functor`` Typeclass
`#1643 <https://github.com/locationtech/geotrellis/pull/1643>`__
- Allow ``Intersects(polygon: Polygon)`` in layer query
`#1644 <https://github.com/locationtech/geotrellis/pull/1644>`__
- Optimize ``ColorMap``
`#1648 <https://github.com/locationtech/geotrellis/pull/1648>`__
- Make regex for s3 URLs handle s3/s3a/s3n
`#1652 <https://github.com/locationtech/geotrellis/pull/1652>`__
- Fixed metadata handling on surface calculation for tile layer RDDs
`#1684 <https://github.com/locationtech/geotrellis/pull/1684>`__
- Fixed reading GeoJson with 3d values
`#1704 <https://github.com/locationtech/geotrellis/pull/1704>`__
- Fix to Bicubic Interpolation
`#1708 <https://github.com/locationtech/geotrellis/pull/1708>`__
- Fixed: Band tags with values of length > 31 have additional white
space added to them
`#1756 <https://github.com/locationtech/geotrellis/pull/1756>`__
- Fixed NoData bug in tile merging logic
`#1793 <https://github.com/locationtech/geotrellis/pull/1793>`__
- Fixed Non-Point Pixel + Partial Cell Rasterizer Bug
`#1804 <https://github.com/locationtech/geotrellis/pull/1804>`__
New Committers
^^^^^^^^^^^^^^
- metasim
- lokifacio
- aeffrig
- jpolchlo
- jbouffard
- vsimko
- longcmu
- miafg
0.10.3
------
- `PR #1611 <https://github.com/geotrellis/geotrellis/pull/1611>`__ Any
``RDD`` of ``Tile``\ s can utilize Polygonal Summary methods.
(@fosskers)
- `PR #1573 <https://github.com/geotrellis/geotrellis/pull/1573>`__ New
``foreach`` for ``MultibandTile`` which maps over each band at once.
(@hjaekel)
- `PR #1600 <https://github.com/geotrellis/geotrellis/pull/1600>`__ New
``mapBands`` method to map more cleanly over the bands of a
``MultibandTile``.
(1)
0.10.2
------
- `PR #1561 <https://github.com/geotrellis/geotrellis/pull/1561>`__ Fix
to polygon sequence union, account that it can result in NoResult.
(1)
- `PR #1585 <https://github.com/geotrellis/geotrellis/pull/1585>`__
Removed warnings; add proper subtyping to GetComponent and
SetComponent identity implicits; fix jai travis breakage. (1)
- `PR #1569 <https://github.com/geotrellis/geotrellis/pull/1569>`__
Moved RDDLayoutMergeMethods functionality to object. (1)
- `PR #1494 <https://github.com/geotrellis/geotrellis/pull/1494>`__ Add
ETL option to specify upper zoom limit for raster layer ingestion
(@mbertrand)
- `PR #1571 <https://github.com/geotrellis/geotrellis/pull/1571>`__ Fix
scallop upgrade issue in spark-etl (@pomadchin)
- `PR #1543 <https://github.com/geotrellis/geotrellis/pull/1543>`__ Fix
to Hadoop LayerMover (@pomadchin)
Special thanks to new contributor @mbertrand!
0.10.1
------
- PR #1451 Optimize reading from compressed Bit geotiffs (@shiraeeshi)
- PR #1454 Fix issues with IDW interpolation (@lokifacio)
- PR #1457 Store FastMapHistogram counts as longs (@jpolchlo)
- PR #1460 Fixes to user defined float/double CellType parsing
(@echeipesh)
- PR #1461 Pass resampling method argument to merge in CutTiles (1)
- PR #1466 Handle Special Characters in proj4j (@jamesmcclain)
- PR #1468 Fix nodata values in codecs (@shiraeeshi)
- PR #1472 Fix typo in MultibandIngest.scala (@timothymschier)
- PR #1478 Fix month and year calculations (@shiraeeshi)
- PR #1483 Fix Rasterizer Bug (@jamesmcclain)
- PR #1485 Upgrade dependencies as part of our LocationTech CQ process
(1)
- PR #1487 Handle entire layers of NODATA (@fosskers)
- PR #1493 Added support for int32raw cell types in CellType.fromString
(@jpolchlo)
- PR #1496 Update slick (@adamkozuch, @moradology)
- PR #1498 Add ability to specify number of streaming buckets
(@moradology)
- PR #1500 Add logic to ensure use of minval/avoid repetition of breaks
(@moradology)
- PR #1501 SparkContext temporal GeoTiff format args (@echeipesh)
- PR #1510 Remove dep on cellType when specifying layoutExtent
(@fosskers)
- PR #1529 LayerUpdater fix (@pomadchin)
Special thanks to new contributors @fosskers, @adamkozuch, @jpolchlo,
@shiraeeshi, @lokifacio!
0.10.0
------
The long awaited GeoTrellis 0.10 release is here!
It’s been a while since the 0.9 release of GeoTrellis, and there are
many significant changes and improvements in this release. GeoTrellis
has become an expansive suite of modular components that aide users in
the building of geospatial application in Scala, and as always we’ve
focused specifically on high performance and distributed computing. This
is the first official release that supports working with Apache Spark,
and we are very pleased with the results that have come out of the
decision to support Spark as our main distributed processing engine.
Those of you who have been tuned in for a while know we started with a
custom built processing engine based on Akka actors; this original
execution engine still exists in 0.10 but is in a deprecated state in
the geotrellis-engine subproject. Along with upgrading GeoTrellis to
support Spark and handle arbitrarily-sized raster data sets, we’ve been
making improvements and additions to core functionality, including
adding vector and projection support.
It’s been long enough that release notes, stating what has changed since
0.9, would be quite unwieldy. Instead I put together a list of features
that GeoTrellis 0.10 supports. This is included in the README on the
GeoTrellis Github, but I will put them here as well. It is organized by
subproject, with more basic and core subprojects higher in the list, and
the subprojects that rely on that core functionality later in the list,
along with a high level description of each subproject.
**geotrellis-proj4**
- Represent a Coordinate Reference System (CRS) based on Ellipsoid,
Datum, and Projection.
- Translate CRSs to and from proj4 string representations.
- Lookup CRS's based on EPSG and other codes.
- Transform ``(x, y)`` coordinates from one CRS to another.
**geotrellis-vector**
- Provides a scala idiomatic wrapper around JTS types: Point, Line
(LineString in JTS), Polygon, MultiPoint, MultiLine (MultiLineString
in JTS), MultiPolygon, GeometryCollection
- Methods for geometric operations supported in JTS, with results that
provide a type-safe way to match over possible results of geometries.