Accessing GeoTrellis image server and dynamic tile stitching
A python client for GeoTrellis TMS service
For setup development environment
Requirements
Install Java 8 from Oracle
After installation, in the terminal, check your Java version
> javac -version
javac 1.8.0_162
Version must be 1.8+
Install Apache Spark 2 from Homebrew
After installation, make sure to put following lines in your ~/.bashrc file,
## Apache Spark
export SPARK_HOME="/usr/local/Cellar/apache-spark/2.3.0/libexec"
export SPARK_CONF_DIR="${HOME}/Applications/spark/config"
PATH="${SPARK_HOME}/bin:${SPARK_HOME}/sbin:${PATH}"
and then do source ~/.bashrc
Then in the terminal, check your spark version
> which spark-submit
/usr/local/bin/spark-submit
> spark-submit --version
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.3.0
/_/
Using Scala version 2.11.8, Java HotSpot(TM) 64-Bit Server VM, 1.8.0_162
Branch master
Compiled by user sameera on 2018-02-22T19:24:29Z
Revision a0d7949896e70f427e7f3942ff340c9484ff0aab
Url git@github.com:sameeragarwal/spark.git
Type --help for more information.
Setting up IDE for development
Download and install IntelliJ IDEA from JET BRAINS
* And please make sure in your IntelliJ IDEA, go to Preferences –> Tools –> Server Certificates and check the box Accept non-trusted certificates automatically, otherwise you may fail to import the project later.

Download GeoTrellis Project Template
> git clone https://github.com/geotrellis/geotrellis-sbt-template.git
After this, start your IntelliJ IDEA, and select Import Project, then in the Import Project window, select SBT and then click Next, and then clicl Finish.

*To add more GeoTreillis Modules as dependencies in your project, please look@here
Building a Geotrellis Overlay Server
> git clone https://github.com/geotrellis/geotrellis-server.git
Import and open geotrellis-server project into IntelliJ IDEA. For safety, before you actually start build the Uber JAR (Fat JAR), please make sure increase JAVA heap size to at least 2G (recommended 4G), so click the Terminal tab on the bottom, and type following to increase JAVA heap size
> export JAVA_OPTS="-Xmx4g"
then in the Terminal, type following to start build
> sbt assembly

Run the Geotrellis Overlay Server
> cd ./example/target/scala-2.11/
> export JAVA_HOME="$(/usr/libexec/java_home)"
> export JAVA_OPTS="-Xmx4g"
> java -cp geotrellis-server-example.jar geotrellis.server.example.overlay.OverlayServer
Now navigate to http://localhost:9000/ in the browser, you will see the UI

Setup a simple COG (Cloud optimized GeoTIFF) Server
Install GDAL 2.x
> brew install gdal
Unlink gdal 1.x using
> brew unlink gdal
Tap into osgeo4mac
> brew tap osgeo/osgeo4mac && brew tap --repair
Install gdal 2.x
> brew install jasper netcdf # gdal dependencies
> brew install gdal2 --with-armadillo --with-complete --with-libkml --with-unsupported
Link gdal 2.x
> brew link --force gdal2
Prepare a simple COG image
After installed GDAL, use gdal_translate to convert a GeoTiff image to COG format.
Download sample.tif
> gdal_translate sample.tif out.tif -co TILED=YES -co COPY_SRC_OVERVIEWS=YES -co COMPRESS=LZW
Now enable Apache Web Server on Mac OS X and move the image to the WebServer folder
> sudo apachectl start
> sudo cp out.tif /Library/WebServer/Documents/sample
Load the COG service in the Geotrellis Overlay Server
Add file:///{GEOTIFF LOCAL PATH}/sample.tif or http://localhost/sample in the box as shown in below via Add COG button

GeoTrellis TMS Python Client
In the Terminal, please do
> pip install pyGeoTile requests numpy GDAL pyproj Pillow
Download sample_123456789098765.geojson, then download and run tailorhands_engine.py in the terminal, it will download a the image for the plot.
> python tailorhands_engine.py
Fixed rendering result

*Note: you can also edit tailorhands_engine.py to change the field, plot_id, fixed, fixed_length, and zoom level (Finding zoom levels: https://wiki.openstreetmap.org/wiki/Zoom_levels).
# field
field = 'sample'
# plot id
plot_id = 123456789098765
# output fixed image
# set to False to use scaled
fixed = True
fixed_length = 128
# Zoom level
if fixed:
zoom = 21
else:
zoom = 24
Scaled rendering result
The PNG file:

The GeoTiff file:
Debug Tools
http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/
References
[1]. https://docs.geotrellis.io/en/latest/tutorials/setup.html#requirements
[2]. https://allixender.github.io/articles/gsoc-geotrellis-ides/
[3]. https://www.karambelkar.info/2016/10/gdal-2-on-mac-with-homebrew/
[4]. http://www.cogeo.org/map/
[5]. https://gist.github.com/tmcw/4954720
[6]. https://gis.stackexchange.com/questions/132242/what-are-the-differences-between-tms-xyz-wmts
[7]. https://alastaira.wordpress.com/2011/07/06/converting-tms-tile-coordinates-to-googlebingosm-tile-coordinates/