فهرست منبع

Dockerfile with Python 3, PDAL, grass-session, Ubuntu based (#134)

Markus Neteler 5 سال پیش
والد
کامیت
c9862832e5
4فایلهای تغییر یافته به همراه259 افزوده شده و 0 حذف شده
  1. 249 0
      docker/Dockerfile_ubuntu_pdal
  2. 1 0
      docker/testdata/README.md
  3. BIN
      docker/testdata/simple.laz
  4. 9 0
      docker/testdata/test_grass_session.py

+ 249 - 0
docker/Dockerfile_ubuntu_pdal

@@ -0,0 +1,249 @@
+FROM ubuntu:18.04
+
+LABEL authors="Carmen Tawalika,Markus Neteler,Anika Bettge"
+LABEL maintainer="tawalika@mundialis.de,neteler@mundialis.de,bettge@mundialis.de"
+
+ENV DEBIAN_FRONTEND noninteractive
+
+# define versions to be used
+ARG GRASS_VERSION=7.9
+ARG GRASS_SHORT_VERSION=79
+ARG PDAL_VERSION=1.8.0
+ARG PROJ_VERSION=4.9.3
+ARG PROJ_DATUMGRID_VERSION=1.8
+ARG LAZ_PERF_VERSION=1.3.0
+
+SHELL ["/bin/bash", "-c"]
+
+WORKDIR /tmp
+
+RUN apt-get update && apt-get upgrade -y && \
+    apt-get install -y --no-install-recommends --no-install-suggests \
+    build-essential \
+    bison \
+    bzip2 \
+    cmake \
+    curl \
+    flex \
+    g++ \
+    gcc \
+    gdal-bin \
+    git \
+    language-pack-en-base \
+    libbz2-dev \
+    libcairo2 \
+    libcairo2-dev \
+    libcurl4-gnutls-dev \
+    libfftw3-bin \
+    libfftw3-dev \
+    libfreetype6-dev \
+    libgdal-dev \
+    libgeos-dev \
+    libgsl0-dev \
+    libjpeg-dev \
+    libjsoncpp-dev \
+    libopenblas-base \
+    libopenblas-dev \
+    libnetcdf-dev \
+    libncurses5-dev \
+    libopenjp2-7 \
+    libopenjp2-7-dev \
+    libpnglite-dev \
+    libpq-dev \
+    libpython3-all-dev \
+    libsqlite3-dev \
+    libtiff-dev \
+    libzstd-dev \
+    make \
+    mesa-common-dev \
+    moreutils \
+    ncurses-bin \
+    netcdf-bin \
+    python3 \
+    python3-dateutil \
+    python3-dev \
+    python3-magic \
+    python3-numpy \
+    python3-pil \
+    python3-pip \
+    python3-ply \
+    python3-setuptools \
+    python3-venv \
+    software-properties-common \
+    sqlite3 \
+    subversion \
+    unzip \
+    vim \
+    wget \
+    zip \
+    zlib1g-dev
+
+RUN echo LANG="en_US.UTF-8" > /etc/default/locale
+
+## install the latest projection library for GRASS GIS
+WORKDIR /src
+RUN wget http://download.osgeo.org/proj/proj-${PROJ_VERSION}.tar.gz && \
+    tar xzvf proj-${PROJ_VERSION}.tar.gz && \
+    cd /src/proj-${PROJ_VERSION}/ && \
+    wget http://download.osgeo.org/proj/proj-datumgrid-${PROJ_DATUMGRID_VERSION}.zip && \
+    cd nad && \
+    unzip ../proj-datumgrid-${PROJ_DATUMGRID_VERSION}.zip && \
+    cd .. && \
+    ./configure --prefix=/usr/ && \
+    make && \
+    make install
+
+## install laz-perf
+RUN apt-get install cmake
+WORKDIR /src
+RUN wget https://github.com/hobu/laz-perf/archive/${LAZ_PERF_VERSION}.tar.gz -O laz-perf-${LAZ_PERF_VERSION}.tar.gz && \
+    tar -zxf laz-perf-${LAZ_PERF_VERSION}.tar.gz && \
+    cd laz-perf-${LAZ_PERF_VERSION} && \
+    mkdir build && \
+    cd build && \
+    cmake .. && \
+    make && \
+    make install
+
+## fetch vertical datums and store into PROJ dir
+WORKDIR /src
+RUN mkdir vdatum && \
+    cd vdatum && \
+    wget http://download.osgeo.org/proj/vdatum/usa_geoid2012.zip && unzip -j -u usa_geoid2012.zip -d /usr/share/proj; \
+    wget http://download.osgeo.org/proj/vdatum/usa_geoid2009.zip && unzip -j -u usa_geoid2009.zip -d /usr/share/proj; \
+    wget http://download.osgeo.org/proj/vdatum/usa_geoid2003.zip && unzip -j -u usa_geoid2003.zip -d /usr/share/proj; \
+    wget http://download.osgeo.org/proj/vdatum/usa_geoid1999.zip && unzip -j -u usa_geoid1999.zip -d /usr/share/proj; \
+    wget http://download.osgeo.org/proj/vdatum/vertcon/vertconc.gtx && mv vertconc.gtx /usr/share/proj; \
+    wget http://download.osgeo.org/proj/vdatum/vertcon/vertcone.gtx && mv vertcone.gtx /usr/share/proj; \
+    wget http://download.osgeo.org/proj/vdatum/vertcon/vertconw.gtx && mv vertconw.gtx /usr/share/proj; \
+    wget http://download.osgeo.org/proj/vdatum/egm96_15/egm96_15.gtx && mv egm96_15.gtx /usr/share/proj; \
+    wget http://download.osgeo.org/proj/vdatum/egm08_25/egm08_25.gtx && mv egm08_25.gtx /usr/share/proj; \
+    cd .. && \
+    rm -rf vdatum
+
+## install pdal
+ENV NUMTHREADS=4
+WORKDIR /src
+RUN wget \
+ https://github.com/PDAL/PDAL/releases/download/${PDAL_VERSION}/PDAL-${PDAL_VERSION}-src.tar.gz && \
+    tar xfz PDAL-${PDAL_VERSION}-src.tar.gz && \
+    cd /src/PDAL-${PDAL_VERSION}-src && \
+    mkdir build && \
+    cd build && \
+    cmake .. \
+      -G "Unix Makefiles" \
+      -DCMAKE_BUILD_TYPE=Release \
+      -DCMAKE_INSTALL_PREFIX=/usr \
+      -DCMAKE_C_COMPILER=gcc \
+      -DCMAKE_CXX_COMPILER=g++ \
+      -DCMAKE_MAKE_PROGRAM=make \
+      -DBUILD_PLUGIN_PYTHON=ON \
+      -DBUILD_PLUGIN_CPD=OFF \
+      -DBUILD_PLUGIN_GREYHOUND=ON \
+      -DBUILD_PLUGIN_HEXBIN=ON \
+      -DHEXER_INCLUDE_DIR=/usr/include/ \
+      -DBUILD_PLUGIN_NITF=OFF \
+      -DBUILD_PLUGIN_ICEBRIDGE=ON \
+      -DBUILD_PLUGIN_PGPOINTCLOUD=ON \
+      -DBUILD_PGPOINTCLOUD_TESTS=OFF \
+      -DBUILD_PLUGIN_SQLITE=ON \
+      -DWITH_LASZIP=ON \
+      -DWITH_LAZPERF=ON \
+      -DWITH_TESTS=ON && \
+    make -j $NUMTHREADS && \
+    make install
+
+# download grass gis source from git
+ARG SOURCE_GIT_URL=https://github.com
+ARG SOURCE_GIT_REMOTE=OSGeo
+ARG SOURCE_GIT_REPO=grass
+ARG SOURCE_GIT_BRANCH=master
+WORKDIR /src
+# TODO change to COPY
+ADD https://api.github.com/repos/$SOURCE_GIT_REMOTE/$SOURCE_GIT_REPO/git/refs/heads/$SOURCE_GIT_BRANCH version.json
+RUN git clone -b ${SOURCE_GIT_BRANCH} --single-branch ${SOURCE_GIT_URL}/${SOURCE_GIT_REMOTE}/${SOURCE_GIT_REPO}.git grass_build
+WORKDIR /src/grass_build
+
+# Set environmental variables for GRASS GIS compilation, without debug symbols
+# Set gcc/g++ environmental variables for GRASS GIS compilation, without debug symbols
+ENV MYCFLAGS "-O2 -std=gnu99 -m64"
+ENV MYLDFLAGS "-s"
+# CXX stuff:
+ENV LD_LIBRARY_PATH "/usr/local/lib"
+ENV LDFLAGS "$MYLDFLAGS"
+ENV CFLAGS "$MYCFLAGS"
+ENV CXXFLAGS "$MYCXXFLAGS"
+
+# Configure compile and install GRASS GIS
+ENV GRASS_PYTHON=/usr/bin/python3
+ENV NUMTHREADS=4
+RUN make distclean || echo "nothing to clean"
+RUN /src/grass_build/configure \
+  --with-cxx \
+  --enable-largefile \
+  --with-proj --with-proj-share=/usr/share/proj \
+  --with-gdal=/usr/bin/gdal-config \
+  --with-geos \
+  --with-sqlite \
+  --with-cairo --with-cairo-ldflags=-lfontconfig \
+  --with-freetype --with-freetype-includes="/usr/include/freetype2/" \
+  --with-fftw \
+  --with-postgres=yes --with-postgres-includes="/usr/include/postgresql" \
+  --with-netcdf \
+  --with-zstd \
+  --with-bzlib \
+  --with-pdal \
+  --without-mysql \
+  --without-odbc \
+  --without-openmp \
+  --without-ffmpeg \
+  --without-opengl \
+    && make -j $NUMTHREADS \
+    && make install && ldconfig
+
+# Unset environmental variables to avoid later compilation issues
+ENV INTEL ""
+ENV MYCFLAGS ""
+ENV MYLDFLAGS ""
+ENV MYCXXFLAGS ""
+ENV LD_LIBRARY_PATH ""
+ENV LDFLAGS ""
+ENV CFLAGS ""
+ENV CXXFLAGS ""
+
+# set SHELL var to avoid /bin/sh fallback in interactive GRASS GIS sessions
+ENV SHELL /bin/bash
+ENV LC_ALL "en_US.UTF-8"
+ENV GRASS_SKIP_MAPSET_OWNER_CHECK 1
+
+# Create generic GRASS GIS binary name regardless of version number
+RUN ln -sf `find /usr/local/bin -name "grass??" | sort | tail -n 1` /usr/local/bin/grass
+
+# TODO rename when 'code_revision' is available
+RUN grass --config svn_revision version
+
+# Reduce the image size
+RUN apt-get autoremove -y
+RUN apt-get clean -y
+
+WORKDIR /scripts
+
+# install external GRASS GIS session Python API
+RUN pip3 install grass-session
+
+# install GRASS GIS extensions
+RUN grass --tmp-location EPSG:4326 --exec g.extension extension=r.in.pdal
+
+# add GRASS GIS envs for python usage
+ENV GISBASE "/usr/local/grass${GRASS_SHORT_VERSION}/"
+ENV GRASSBIN "/usr/local/bin/grass"
+ENV PYTHONPATH "${PYTHONPATH}:$GISBASE/etc/python/"
+ENV LD_LIBRARY_PATH "$LD_LIBRARY_PATH:$GISBASE/lib"
+
+ADD testdata/test_grass_session.py /scripts
+ADD testdata/simple.laz /tmp
+# simple test: just scan the LAZ file
+/usr/bin/python3 /scripts/test_grass_session.py
+
+WORKDIR /grassdb
+VOLUME /grassdb

+ 1 - 0
docker/testdata/README.md

@@ -0,0 +1 @@
+Data source: https://github.com/PDAL/PDAL/tree/master/test/data/laz/

BIN
docker/testdata/simple.laz


+ 9 - 0
docker/testdata/test_grass_session.py

@@ -0,0 +1,9 @@
+# Import GRASS Python bindings
+from grass_session import Session
+import grass.script as grass
+
+with Session(gisdb="/grassdata/", location="test", mapset="PERMANENT", create_opts='EPSG:25832'):
+    print("Tests for PROJ, GDAL, PDAL, GRASS")
+
+    # simple test: just scan the LAZ file
+    grass.run_command('r.in.pdal', input="/tmp/simple.laz", output='count_1', method='n', flags="s", resolution=1, overwrite=True)