[MapServer-users] Tutorials for creating time dimension images and good web frontends for dynamically changing map projects? (Solution for first problem)

Stefan Gofferje lists at home.gofferje.net
Sat Oct 15 00:34:21 PDT 2022


On 10/14/22 10:39, Stefan Gofferje wrote:
> After the relative ease of my first mapserver project, I'm now motivated 
> and keen on getting another project running.
> 
> Since about a year (plus minnus), I'm every day checking for Sentinel I 
> and II data covering the area where I live. If there is anything, I 
> download the data and run some scripts which do automatic processing and 
> generating of composites, like SAR VV/VH or NDVI, NDCI, etc.
> The ready images are then posted to a Telegram channel.
> 
> At the moment, there's still a number of manual steps (search data, 
> decide what to download, trigger download, trigger processing and 
> trigger Telegram push) and the existing scripts are Bash scripts calling 
> GDAL tools.
> 
> My first step now is to learn Python and move everything from Bash to 
> Python and automate it, ideally so far that the whole process can run in 
> a Docker container as a cron job.
> 
> Then I was thinking, instead of pushing images to Telegram, I could use 
> mapserver to serve the images to some web frontend. The map files are 
> very easily created programmatically, so that should be easy. I'm 
> missing a few things for that, though:
> While going through mapserver's docs, I noticed that it can handle time 
> dimensions for imagery. That sounds like something worth exploring. The 
> docs describe the use of a shape file but unfortunately, I have no clue 
> how to to *create* that programmatically.
> 
> Regarding the frontend, I could just put up a single page leaflet app. 
> That would be easy enough. But I'm wondering if there's already some 
> cool solutions out there.
> 
> So, If anybody has a link or pointer for me on the programmatic creation 
> of shape files for time-indexed imagery and/or interesting web frontend 
> projects, I would be very grateful!

In case it is of use for anybody, here is the solution I came up with 
last night:

1.) Add a time index metadatum to the output file 
(gdaltranslate/gdal_edit -mo TIMEINDEX="yyyy-mm-ddThhmmZ"
2.) Hack together a Python script:

#!/usr/bin/python3

import os, sys
from osgeo import gdal
import geopandas as gpd
from shapely.geometry import box

import warnings
warnings.filterwarnings("ignore")

StartDir = str(sys.argv[1])

def getBounds(path):
     raster = gdal.Open(path)
     ulx, xres, xskew, uly, yskew, yres = raster.GetGeoTransform()
     lrx = ulx + (raster.RasterXSize * xres)
     lry = uly + (raster.RasterYSize * yres)
     return box(lrx, lry, ulx, uly)


df = gpd.GeoDataFrame(columns=['location', 'geometry','timestamp'])
for dir, subdir, files in os.walk(StartDir):
     for fname in files:
         if fname.endswith(".tif"):
             fullname = os.path.join(dir+"/", fname)
             print (fullname)
             ds=gdal.Open(fullname)
             metadata=ds.GetMetadata()
             ds=None
             print(metadata)
             df = df.append({'location': fname, 'geometry': 
getBounds(fullname),'timestamp': metadata['TIMESTAMP']}, ignore_index=True)
#            df = gpd.pd.concat(df,{'location': fname, 'geometry': 
getBounds(os.path.join(dir+"/", fname))}, ignore_index=True)

df.to_file("tile-index.shp")


NOTE: suppressing all warnings is temporary until I figured out how to 
move from df.append to pd.concat.

-Stefan

-- 
  (o_   Stefan Gofferje            | SCLT, MCP, CCSA
  //\   Reg'd Linux User #247167   | VCP #2263
  V_/_  https://www.gofferje.net   | https://www.saakeskus.fi



More information about the MapServer-users mailing list