All Projects → 16EAGLE → moveVis

16EAGLE / moveVis

Licence: GPL-3.0 License
An R package providing tools to visualize movement data (e.g. from GPS tracking) and temporal changes of environmental data (e.g. from remote sensing) by creating video animations.

Programming Languages

r
7636 projects

Projects that are alternatives of or similar to moveVis

rsMove
Remote Sensing for Movement Ecology
Stars: ✭ 25 (-75.96%)
Mutual labels:  remote-sensing, movement-ecology, animal-behavior
GGHL
This is the implementation of GGHL (A General Gaussian Heatmap Label Assignment for Arbitrary-Oriented Object Detection)
Stars: ✭ 309 (+197.12%)
Mutual labels:  remote-sensing
Opensource OBIA processing chain
An open-source semi-automated processing chain for urban OBIA classification.
Stars: ✭ 75 (-27.88%)
Mutual labels:  remote-sensing
HSI-Traditional-to-Deep-Models
Pytorch and Keras Implementations of Hyperspectral Image Classification -- Traditional to Deep Models: A Survey for Future Prospects.
Stars: ✭ 72 (-30.77%)
Mutual labels:  remote-sensing
pytorch-psetae
PyTorch implementation of the model presented in "Satellite Image Time Series Classification with Pixel-Set Encoders and Temporal Self-Attention"
Stars: ✭ 117 (+12.5%)
Mutual labels:  remote-sensing
LoveDA
[NeurIPS2021 Poster] LoveDA: A Remote Sensing Land-Cover Dataset for Domain Adaptive Semantic Segmentation
Stars: ✭ 111 (+6.73%)
Mutual labels:  remote-sensing
pylandtemp
Algorithms for computing global land surface temperature and emissivity from NASA's Landsat satellite images with Python.
Stars: ✭ 110 (+5.77%)
Mutual labels:  remote-sensing
modape
MODIS Assimilation and Processing Engine
Stars: ✭ 19 (-81.73%)
Mutual labels:  remote-sensing
land-cover-to-land-use-classification
Satellite image processing pipeline to classify land-cover and land-use
Stars: ✭ 64 (-38.46%)
Mutual labels:  remote-sensing
CRC4Docker
Python scripts for the textbook "Image Analysis, Classification and Change Detection in Remote Sensing, Fourth Revised Edition"
Stars: ✭ 84 (-19.23%)
Mutual labels:  remote-sensing
dea-coastlines
Extracting tidally-constrained annual shorelines and robust rates of coastal change from freely available Earth observation data at continental scale
Stars: ✭ 24 (-76.92%)
Mutual labels:  remote-sensing
spectral
Awesome Spectral Indices for the Google Earth Engine JavaScript API (Code Editor).
Stars: ✭ 68 (-34.62%)
Mutual labels:  remote-sensing
ExtendedMorphologicalProfiles
Remote sensed hyperspectral image classification with Spectral-Spatial information provided by the Extended Morphological Profiles
Stars: ✭ 32 (-69.23%)
Mutual labels:  remote-sensing
Geospatial Python CourseV1
This is an collection of blog posts turned into a course format
Stars: ✭ 53 (-49.04%)
Mutual labels:  remote-sensing
FLightR
R package to position animals with solar geolocation archival tags
Stars: ✭ 16 (-84.62%)
Mutual labels:  movement-ecology
earthengine-py-examples
A collection of 300+ examples for using Earth Engine and the geemap Python package
Stars: ✭ 76 (-26.92%)
Mutual labels:  remote-sensing
ChangeDetectionRepository
This repository contains some python code of some traditional change detection methods or provides their original websites, such as SFA, MAD, and some deep learning-based change detection methods, such as SiamCRNN, DSFA, and some FCN-based methods.
Stars: ✭ 311 (+199.04%)
Mutual labels:  remote-sensing
biodivMapR
biodivMapR: an R package for α- and β-diversity mapping using remotely-sensed images
Stars: ✭ 18 (-82.69%)
Mutual labels:  remote-sensing
massive-change-detection
QGIS 2 plugin for applying change detection algorithms on high resolution satellite imagery
Stars: ✭ 18 (-82.69%)
Mutual labels:  remote-sensing
DSMSCN
[MultiTemp 2019] Official Tensorflow implementation for Change Detection in Multi-temporal VHR Images Based on Deep Siamese Multi-scale Convolutional Neural Networks.
Stars: ✭ 63 (-39.42%)
Mutual labels:  remote-sensing

moveVis

CRAN version CRAN downloads CRAN checks Build Status AppVeyor build status Coverage Package dependencies

Introduction

moveVis provides tools to visualize movement data (e.g. from GPS tracking) and temporal changes of environmental data (e.g. from remote sensing) by creating video animations. It works with move and raster class inputs and turns them into ggplot2 frames that can be further customized. moveVis uses gifski (wrapping the gifski cargo crate) and av (binding to FFmpeg) to render frames into animated GIF or video files.

A peer-reviewed open-access paper accompanying moveVis has been published in Methods in Ecology and Evolution.


Figure 1: Example movement tracks nearby Lake of Constance on top of a OSM watercolor and a mapbox satellite base map



Figure 2: Example movement tracks nearby Lake of Constance and a gradient base layer faded over time

Installation

With version 0.10.0, the package has been rewritten from the ground up with the goal to make it easier to customize the appearance of movement animations. Thus, the logic of the package, its functions and their syntax have changed.

The latest stable version of moveVis can be installed from CRAN:

install.packages("moveVis")

The development version can be installed from GitHub:

devtools::install_github("16EAGLE/moveVis")

Code written for moveVis version <=0.9.9 will not work with newer versions, but it is quite simple and thus highly recommended to switch to the new syntax due to a variety of advantages. moveVis version <=0.9.9 can still be downloaded here and installed manually:

setwd("your/download/directory")
install.packages("moveVis-0.9.9.tar.gz", repos = NULL)

Function overview

moveVis includes the following functions, sorted by the order they would be applied to create an animation from movement and environmental data:

Preparing movement tracks

  • df2move() converts a data.frame into a move or moveStack object. This is useful if you do not usually work with the move classes and your tracks are present as data.frames.
  • align_move() aligns single and multi-individual movement data to a uniform time scale with a uniform temporal resolution needed for creating an animation from it. Use this function to prepare your movement data for animation depending on the temporal resolution that suits your data.
  • subset_move() subsets a move or moveStack by a given time span. This is useful if you want to create a movement animation of only a temporal subset of your data, e.g. a particular day.

Creating frames

  • get_maptypes() returns a character vector of available map types that can be used with frames_spatial(). moveVis supports OpenStreetMap and Mapbox basemap imagery. Alternatively, you can provide custom imagery to frames_spatial().
  • frames_spatial() creates a list of ggplot2 maps displaying movement. Each object represents a single frame. Each frame can be viewed or modified individually. The returned list of frames can be animated using animate_frames().
  • frames_graph() creates a list of ggplot2 graphs displaying movement-environment interaction. Each object represents a single frame. Each frame can be viewed or modified individually. The returned list of frames can be animated using animate_frames().

Adapting frames

  • add_gg() adds ggplot2 functions (e.g. to add layers such as points, polygons, lines, or to change scales etc.) to the animation frames created with frames_spatial() or frames_graph(). Instead of creating your own ggplot2 functions, you can use one of the other moveVis `add_``functions:
  • add_labels() adds character labels such as title or axis labels to animation frames created with frames_spatial() or frames_graph().
  • add_scalebar() adds a scalebar to the animation frames created with frames_spatial() or frames_graph().
  • add_northarrow() adds a north arrow to the animation frames created with frames_spatial() or frames_graph().
  • add_progress() adds a progress bar to animation frames created with frames_spatial() or frames_graph().
  • add_timestamps() adds timestamps to animation frames created with frames_spatial() or frames_graph().
  • add_text() adds static or dynamically changing text to the animation frames created with frames_spatial() or frames_graph().
  • add_colourscale() adjusts the colour scales of the animation frames created with frames_spatial() and custom map imagery using the r_list argument.
  • join_frames() side-by-side joins the ggplot2 objects of two or more frames lists of equal lengths into a single list of ggplot2 objects per frame using cowplot::plot_grid. This is useful if you want to side-by-side combine spatial frames returned by frames_spatial() with graph frames returned by frames_graph().
  • get_frametimes() extracts the timestamps associated with each frame of a list of frames created using frames_spatial() or frames_graph() and returns them as a vector.

Animating frames (as GIF or video)

  • suggest_formats() returns a selection of suggested file formats that can be used with out_file of animate_frames() on your system.
  • animate_frames() creates an animation from a list of frames computed with frames_spatial(), frames_graph() or join_frames().

Viewing movement tracks

  • view_spatial() displays movement tracks on an interactive mapview or leaflet map.

Processing settings

  • use_multicore() enables multi-core usage for computational expensive processing steps.
  • use_disk() enables the usage of disk space for creating frames, which can prevent memory overload when creating frames for very large animations.

Get started

The following example shows how to make a simple animation using a default base map by first aligning your movement data to a uniform time scale, creating a list of ggplot2 frames and turning these frames into an animated GIF:

library(moveVis)
library(move)

data("move_data", package = "moveVis") # move class object
# if your tracks are present as data.frames, see df2move() for conversion

# align move_data to a uniform time scale
m <- align_move(move_data, res = 4, unit = "mins")

# create spatial frames with a OpenStreetMap watercolour map
frames <- frames_spatial(m, path_colours = c("red", "green", "blue"),
                         map_service = "osm", map_type = "watercolor", alpha = 0.5) %>% 
  add_labels(x = "Longitude", y = "Latitude") %>% # add some customizations, such as axis labels
  add_northarrow() %>% 
  add_scalebar() %>% 
  add_timestamps(m, type = "label") %>% 
  add_progress()

frames[[100]] # preview one of the frames, e.g. the 100th frame

# animate frames
animate_frames(frames, out_file = "moveVis.gif")

Examples

You can find code examples on how to use moveVis here:

Example 1: Creating a simple movement animation

Example 2: Customizing frames

Example 3: Using a mapbox satellite base map

Example 4: View movement tracks

Real-data example using White Storks (Ciconia ciconia) migration movement data [.docx]

Code snippets

These commented moveVis code snippets, addressing specific issues or questions, could also be helpful to you:

How to hold the last frame of an animation for a defined time and make it look good by using path_fade

How to display the full traces of each path using trace_show and trace_colour with frames_spatial()

How to colour paths based on a continuous variable

How to assign multiple path colours per individual, e.g. to indicate behavioral segments

How to adapt the path legend of frames created with frames_spatial()

How to create a data.frame containing each track coordinate per frame

How to overlay frames with additional transparent rasters changing over time (hacky, not a very optimal solution)

Further resources

Detailed code examples explaining how to use specific functions are provided at the function help pages. User contributions such as code examples or tutorials are very welcome and are linked below as soon as they have been spotted somewhere on the web:

Animating animal tracks from multiple years over a common year with moveVis: An example with Blue Whale Argos tracks on Movebank by Daniel M. Palacios, Marine Mammal Institute, Oregon State University

Reproducible example of how to combine animal tracking data, tidal water height data and a heightmap to visualize animal movement with moveVis by Henk-Jan van der Kolk, The Netherlands Institute of Ecology (NIOO-KNAW)

How to build animated tracking maps using tracking data in Movebank and environmental covariates in track and raster annotations from EnvDATA with moveVis by Sarah C. Davidson, Data Curator at Movebank

Mentions

Blog post: Featured article in Issue 11.5: Our May issue is now online! by Methods in Ecology and Evolution

Features to be added

Things and features that should be added in future versions of moveVis (feel free to contribute to this list using a pull request):

Near future:

  • follow population mode
  • follow individual mode

Some day:

  • 3D animations, e.g. for including altitude data

Related packages

The Department of Remote Sensing of the University of Würzburg has developed other R packages that might interest you:

  • getSpatialData, a package to query, preview and download satellite data,
  • RStoolbox, a package providing a wide range of tools for every-day remote sensing processing needs,
  • rsMove, a package providing tools to query and analyze movement data using remote sensing.

For other news on the work at at the Department of Remote Sensing of the University of Würzburg, click here.

Acknowledgements

This initiative is part of the Opt4Environment project and was funded by the German Aerospace Center (DLR) on behalf of the Federal Ministry for Economic Affairs and Energy (BMWi) with the research grant 50 EE 1403.

Citation

An open-access paper accompanying the moveVis R package has been peer-reviewed by and published in 'Methods in Ecology and Evolution' (see https://doi.org/10.1111/2041-210X.13374). Please cite moveVis, e.g. when you use it in publications or presentations, using the output of citation("moveVis") or as follows:

Schwalb-Willmann, J.; Remelgado, R.; Safi, K.; Wegmann, M. (2020). moveVis: Animating movement trajectories in synchronicity with static or temporally dynamic environmental data in R. Methods Ecol Evol. 2020; 11: 664–669. https://doi.org/10.1111/2041-210X.13374

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].