Implementation of Trajectory classes and functions built on top of GeoPandas

Overview

MovingPandas

Project Status: Active – The project has reached a stable, usable state and is being actively developed. build status docs status codecov DOI pyOpenSci

MovingPandas implements a Trajectory class and corresponding methods based on GeoPandas.

Visit movingpandas.org for details!

You can run MovingPandas examples on MyBinder - no installation required: Binder (These examples use the latest MovingPandas release version.)

To try the cutting-edge dev version, use this MyBinder link.

Documentation

The official documentation is hosted on ReadTheDocs

Examples

Trajectory plots

movingpandas_animated

Stop detection

movingpandas_stop_detection_clip

Trajectory aggregation

movingpandas_ais

Installation

MovingPandas for Python >= 3.7 and all it's dependencies are available from conda-forge and can be installed using conda install -c conda-forge movingpandas.

Conda status

Conda Recipe Conda Downloads Conda Version Conda Platforms

Note that it is NOT recommended to install MovingPandas from PyPI! If you're on Windows or Mac, many GeoPandas / MovingPandas dependencies cannot be pip installed (for details see the corresponding notes in the GeoPandas documentation). On Ubuntu, pip install fails on cartopy with "Proj 4.9.0 must be installed".

Development Installation

Use the following steps to run the notebooks using the current development version:

Using conda

Linux/Mac:

conda env create -f environment.yml

Windows:

conda config --add channels conda-forge
conda config --add channels defaults
conda config --set channel_priority strict
conda env create -f environment.yml

On Windows, because conda-forge relies on some package built with defaults blas (like scipy) one must use the defaults channel on top of conda-forge and activate conda's new strict channel feature. Source: https://github.com/conda-forge/gdal-feedstock/issues/269#issuecomment-473661530

Using Anaconda

  1. Install Anaconda
  2. Clone the movingpandas repository
  3. In Anaconda Navigator | Environments | Import select the movingpandas environment.yml from the cloned directory:

image

  1. Wait until the environment is ready, then change to the Home tab and install Jupyter notebooks into the movingpandas environment
  2. Launch Jupyter notebooks and navigate to the movingpandas/tutorials directory to execute them
  3. Now you can run the notebooks, experiment with the code and adjust it to your own data

Known issues:

  • On Windows, importing rasterio can lead to DLL errors. If this happens, downgrade the rasterio version to 1.0.13.

Develop mode

To install MovingPandas in "develop" or "editable" mode you may use:

python setup.py develop

Contributing to MovingPandas GitHub contributors

All contributions, bug reports, bug fixes, documentation improvements, enhancements and ideas are welcome.

A detailed overview on how to contribute can be found in the contributing guide on GitHub.

Related Python Packages

scikit-mobility is a similar package which also deals with movement data. It implements TrajectoryDataFrames and FlowDataFrames on top of Pandas instead of GeoPandas. There is little overlap in the covered use cases and implemented functionality (comparing MovingPandas tutorials and scikit-mobility tutorials). MovingPandas focuses on spatio-temporal data exploration with corresponding functions for data manipulation and analysis. scikit-mobility on the other hand focuses on computing human mobility metrics, generating synthetic trajectories and assessing privacy risks. Plotting is based on Folium.

Traja extends the capabilitis of Pandas DataFrames specific for animal trajectory analysis in 2D. Plots (static) are based on seaborn.

PyMove provides functionality similar to MovingPandas. It implements PandasMoveDataFrames and DaskMoveDataFrame on top of Pandas and Dask DataFrames. Plotting is based on Folium.

Tracktable is a related Python package with its core data structures and algorithms implemented in C++, i.e. it is not based on Pandas. Plotting is based on Cartopy (for still images) and Folium (for interactive rendering).

Citation information

Please cite [0] when using MovingPandas in your research and reference the appropriate release version. All releases of MovingPandas are listed on Zenodo where you will find citation information, including DOIs.

Publications

About MovingPandas

[0] Graser, A. (2019). MovingPandas: Efficient Structures for Movement Data in Python. GI_Forum ‒ Journal of Geographic Information Science 2019, 1-2019, 54-68. doi:10.1553/giscience2019_01_s54.

[1] Graser, A. & Dragaschnig, M. (2020). Exploring movement data in notebook environments. Presented at MoVIS 2020, IEEE VIS 2020.

Referencing MovingPandas

Full Google Scholar list

Workshop Videos

WorkshopVideo

Comments
  • WIP: Add Trajectory Smoother class

    WIP: Add Trajectory Smoother class

    Following up on discussions from #15, this is a first attempt at implementing a Kalman Filter/Smoother using Stone Soup.

    This PR aims to contribute the following:

    • A TrajectorySmoother base class, which (as advised) is conceptually similar to TrajectoryGeneralisers;
    • A KalmanSmootherCV smoother, which employs a linear Kalman Filter/Smoother with the assumption of a Constant Velocity model (other models also exist in Stone Soup, but for now the CV model has been used as a starting point);
    • A tutorial notebook which showcases how the above class can be used

    This PR is work in progress and is open to modifications based on the thoughts and suggestions of the maintainer(s). Its main purpose is to demonstrate basic capabilities and motivate discussions.

    enhancement 
    opened by sglvladi 17
  • Problem working from postgis to geopandas to trajectory

    Problem working from postgis to geopandas to trajectory

    I'm trying to use moving pandas to process GPS data stored on a PostGIS database. I'm connecting to PostGIS with psycopg2 I load a table to a geodataframe with geopandas. I loaded the geodataframe to trajectories and if I print the collection I get TrajectoryCollection with 34 trajectories so it seems to be ok I get the first trajectory with my_traj = traj_collection.trajectories[1]

    Problem 1) If I print (my_traj) I get an error AttributeError: 'DataFrameGroupBy' object has no attribute 'geometry'

    On PostGIS my geometry column is named geom, I tried to rename the geom to geometry on the geodataframe prior to creating the TrajectoryCollection, It seems to work but then I get two geomemetry fields, geom and geometry

    If I print the trajectory again, I get this error. AttributeError: 'numpy.int64' object has no attribute 'to_pydatetime'

    Problem 2) If I try to store speed with traj_collection.add_speed(overwrite=True) I get an error message, the last line is AttributeError: 'float' object has no attribute 'total_seconds'

    Could you help me to solve this problem? Thanks!

    opened by bigcarto 14
  • Issues using TrajectoryCollection on my csv dataframe.

    Issues using TrajectoryCollection on my csv dataframe.

    Hi,

    I have been following the tutorials with no issues, however, after finishing them all, I have tried to use hvplot to plot the TrajectoryCollection made from my dataframe, however I found that it was not returning any sort of graph: image Using len(traj_collection) shows it has a length of 0, so no trajectories are being made for some reason but I am not sure why, I have followed exactly as is shown in the tutorials?

    Thanks, Jacob

    opened by Jharkins123 13
  • Clip with Polygon causes IndexError: list index out of range

    Clip with Polygon causes IndexError: list index out of range

    I am trying to add the clip approach in the 2-ship-data.ipynb notebook by adding below the get_intersecting chunk the following:

    all_trajectories = traj_collection.trajectories
    arrivals = [ traj.clip(area_of_interest) for traj in all_trajectories ] 
    

    And I am getting the following error & I cannot understand why ?

     15        if type(row['spatial_intersection']) == LineString:
     16         -> pt0 = Point(row['spatial_intersection'].coords[0])
     17             ptn = Point(row['spatial_intersection'].coords[-1])
     18             t = row['prev_t']
    

    IndexError: list index out of range

    bug 
    opened by kostastheocharoulis 13
  • Move the `hvplot` visualisation requirements to be optional installs.

    Move the `hvplot` visualisation requirements to be optional installs.

    Closes #78

    Finalise the work on separating the plotting libraries to make them optional. This includes:

    1. Remove references to cartopy which isn't used
    2. Update setup.py to parse requirements.txt files
    3. Have a base requirements.txt, a via-requirements.txt and a dev-requirements.txt which install
      1. The base libraries required for movingpandas (requirements.txt)
      2. The additional visualisation libraries for the hvplot function (viz-requirements.txt)
      3. The libraries required for development, specifically unit testing libraries (dev-requirements.txt)
    4. Include optional installs in setup.py so you can:
      • pip install movingpandas
      • pip install "movingpandas[viz]"
      • pip install "movingpandas[dev]"
    5. Update the unit tests so that testing the hvplot function is skipped when holoviews is not installed
    6. Create a tox test script to test Python 3.7 and 3.8 with and without the visualisation libraries
      • This uses the tox-conda library to use conda for installs rather than the standard venv
    7. Update the travis configuration (including tox-travis) to use tox for testing and to combine the coverage report
      • Unit tests should be run with tox from the command line, and you should end up with 6 skipped tests - 3 each from the 3.7 and 3.8 environments. Be warned - this can take a while to set up the environmnents the first time around! And travis will take 10 - 12 minutes to run!
    help wanted 
    opened by om-henners 11
  • Installation instructions

    Installation instructions

    Hi, this is a part of https://github.com/pyOpenSci/software-review/issues/18.

    Naive installation As a naive user, if I make a new python environment and do pip install movingpandas, the installation fails on Mac.

    Collecting movingpandas
      Downloading movingpandas-0.2rc1.tar.gz (20 kB)
    Collecting numpy
      Downloading numpy-1.18.1-cp38-cp38-macosx_10_9_x86_64.whl (15.2 MB)
         |████████████████████████████████| 15.2 MB 5.2 MB/s 
    Collecting matplotlib
      Downloading matplotlib-3.1.2-cp38-cp38-macosx_10_9_x86_64.whl (13.2 MB)
         |████████████████████████████████| 13.2 MB 4.1 MB/s 
    Collecting shapely
      Using cached Shapely-1.6.4.post2.tar.gz (225 kB)
    Collecting pandas
      Using cached pandas-0.25.3-cp38-cp38-macosx_10_9_x86_64.whl (10.3 MB)
    Collecting geopandas
      Using cached geopandas-0.6.2-py2.py3-none-any.whl (919 kB)
    Collecting hvplot
      Downloading hvplot-0.5.2-py2.py3-none-any.whl (2.5 MB)
         |████████████████████████████████| 2.5 MB 4.5 MB/s 
    Collecting cartopy
      Using cached Cartopy-0.17.0.tar.gz (8.9 MB)
      Installing build dependencies ... done
      Getting requirements to build wheel ... error
      ERROR: Command errored out with exit status 1:
       command: /Users/martin/anaconda3/envs/movingpandas/bin/python /Users/martin/anaconda3/envs/movingpandas/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /var/folders/d0/qyf0yvzd0n9ctn2wr3r4l1vw0000gn/T/tmpcf10m5i7
           cwd: /private/var/folders/d0/qyf0yvzd0n9ctn2wr3r4l1vw0000gn/T/pip-install-9up68k4a/cartopy
      Complete output (1 lines):
      Proj 4.9.0 must be installed in Conda environment "movingpandas".
      ----------------------------------------
    ERROR: Command errored out with exit status 1: /Users/martin/anaconda3/envs/movingpandas/bin/python /Users/martin/anaconda3/envs/movingpandas/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /var/folders/d0/qyf0yvzd0n9ctn2wr3r4l1vw0000gn/T/tmpcf10m5i7 Check the logs for full command output.
    

    Using conda install -c anitagraser movingpandas works, but you'll get a mixture of channels (conda-forge and defaults), which is known to cause issues. Moreover, you get geopandas from defaults in older version that is on conda-forge.

    It is worth documenting possible issues and workarounds (strict channel priority) as the default installation instructions do not follow GeoPandas recommendations.

    Dev installation

    Current dev installation instructions expect using Anaconda. I'd say that most dev people will just make a new environment using conda env create -f environment.yml, but it has to be derived from the Aanconda instructions. I'd just add a sentence saying that dev env should use environment.yml and keep Anaconda instructions as one of the options only.

    Minor question - conda installs movingpandas 0.1.dev2, while the review issue says Version submitted: 0.2. Should I assume that 0.2 will be released after the review?

    tasks 
    opened by martinfleis 10
  • Does 0.1.dev2 from conda-forge include TrajectoryManager?

    Does 0.1.dev2 from conda-forge include TrajectoryManager?

    Sad error here. Clean install into dedicated environment on Windows 10. environment.yml records version as

    movingpandas=0.1.dev2=py37h39e3cac_0

    When trying to use the TrajectoryManager class from the tutorial it fails saying the module has no such attribute.

    I can't see any releases on github so wondered if conda has lagged behind github?

    question 
    opened by jonititan 10
  • [pyopensci-review] Pip installation issue

    [pyopensci-review] Pip installation issue

    Currently the pip installation is raising the follow error:

    21:09 $ pip install movingpandas
    ERROR: Could not find a version that satisfies the requirement movingpandas (from versions: none)
    ERROR: No matching distribution found for movingpandas
    
    opened by xmnlab 8
  • formatting and linting?

    formatting and linting?

    Could apply tools such as black and flake8 on the repo. This can then be added to as a hooks before a commit is made e.g. https://github.com/geopandas/geopandas/blob/master/.pre-commit-config.yaml. Can also have checks on PRs.

    More info: https://docs.geopandas.org/en/latest/community/contributing.html#style-guide-linting

    tasks 
    opened by raybellwaves 7
  • Single Point Trajectories

    Single Point Trajectories

    The application for which I'm using movingpandas sometimes requires me to handle Trajectorys having a single point, but movingpandas requires each Trajectory to have at least two points.

    What are your thoughts about this? I'm happy to submit a PR if you are amenable to the idea.

    I think the following plan could work:

    • Define a TrajectoryCollection.allow_single_point_trajectory flag that defaults to False
    • Define a Trajectory.allow_single_point flag that defaults to False
    • Update relevant methods to handle single point Trajectorys

    I think the biggest issues would be places where multiple points are assumed, such as calculating speed. I'm not sure what the best behavior in that situation would be (None, 0, infinite, raise error, something else?).

    What are your thoughts/concerns? If I'm alone on this, I'm happy to just inherit from the Trajectory and TrajectoryCollection classes inside my application.

    Thank you!

    question wontfix 
    opened by stevemarin 7
  • TopDownTimeRatioGeneralizer does not support custom geometry column names

    TopDownTimeRatioGeneralizer does not support custom geometry column names

    Hi,

    Unlike other generalization functions, TopDownTimeRatioGeneralizer returns an error message : AttributeError: The 'Series' object does not have a 'geometry' attribute. No matter that I use a trajectory or a trajectorycollection.

    topDownGener=mpd.TopDownTimeRatioGeneralizer(collection).generalize(tolerance=0.0001)

    `--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_39264/2560778543.py in ----> 1 topDownGener=mpd.TopDownTimeRatioGeneralizer(collection).generalize(tolerance=0.0001)

    ~\anaconda3\envs\MovingPandas\lib\site-packages\movingpandas\trajectory_generalizer.py in generalize(self, tolerance) 42 return self._generalize_traj(self.traj, tolerance) 43 elif isinstance(self.traj, TrajectoryCollection): ---> 44 return self._generalize_traj_collection(tolerance) 45 else: 46 raise TypeError

    ~\anaconda3\envs\MovingPandas\lib\site-packages\movingpandas\trajectory_generalizer.py in _generalize_traj_collection(self, tolerance) 49 generalized = [] 50 for traj in self.traj: ---> 51 generalized.append(self._generalize_traj(traj, tolerance)) 52 result = copy(self.traj) 53 result.trajectories = generalized

    ~\anaconda3\envs\MovingPandas\lib\site-packages\movingpandas\trajectory_generalizer.py in _generalize_traj(self, traj, tolerance) 239 240 def _generalize_traj(self, traj, tolerance): --> 241 return Trajectory(self.td_tr(traj.df.copy(), tolerance), traj.id) 242 243 def td_tr(self, df, tolerance):

    ~\anaconda3\envs\MovingPandas\lib\site-packages\movingpandas\trajectory_generalizer.py in td_tr(self, df, tolerance) 252 dy = df.geometry.iloc[-1].y - df.geometry.iloc[0].y 253 --> 254 dists = df.apply( 255 lambda rec: self._dist_from_calced( 256 rec, df.index.min().to_pydatetime(), df.geometry.iloc[0], de, dx, dy

    ~\anaconda3\envs\MovingPandas\lib\site-packages\geopandas\geodataframe.py in apply(self, func, axis, raw, result_type, args, **kwargs) 1388 @doc(pd.DataFrame) 1389 def apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwargs): -> 1390 result = super().apply( 1391 func, axis=axis, raw=raw, result_type=result_type, args=args, **kwargs 1392 )

    ~\anaconda3\envs\MovingPandas\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, raw, result_type, args, **kwargs) 8831 kwargs=kwargs, 8832 ) -> 8833 return op.apply().finalize(self, method="apply") 8834 8835 def applymap(

    ~\anaconda3\envs\MovingPandas\lib\site-packages\pandas\core\apply.py in apply(self) 725 return self.apply_raw() 726 --> 727 return self.apply_standard() 728 729 def agg(self):

    ~\anaconda3\envs\MovingPandas\lib\site-packages\pandas\core\apply.py in apply_standard(self) 849 850 def apply_standard(self): --> 851 results, res_index = self.apply_series_generator() 852 853 # wrap results

    ~\anaconda3\envs\MovingPandas\lib\site-packages\pandas\core\apply.py in apply_series_generator(self) 865 for i, v in enumerate(series_gen): 866 # ignore SettingWithCopy here in case the user mutates --> 867 results[i] = self.f(v) 868 if isinstance(results[i], ABCSeries): 869 # If we have a view on v, we need to make a copy because

    ~\anaconda3\envs\MovingPandas\lib\site-packages\movingpandas\trajectory_generalizer.py in (rec) 253 254 dists = df.apply( --> 255 lambda rec: self._dist_from_calced( 256 rec, df.index.min().to_pydatetime(), df.geometry.iloc[0], de, dx, dy 257 ),

    ~\anaconda3\envs\MovingPandas\lib\site-packages\movingpandas\trajectory_generalizer.py in _dist_from_calced(self, rec, start_t, start_geom, de, dx, dy) 276 di = (rec.name - start_t).total_seconds() 277 calced = Point(start_geom.x + dx * di / de, start_geom.y + dy * di / de) --> 278 return rec.geometry.distance(calced)

    ~\anaconda3\envs\MovingPandas\lib\site-packages\pandas\core\generic.py in getattr(self, name) 5581 ): 5582 return self[name] -> 5583 return object.getattribute(self, name) 5584 5585 def setattr(self, name: str, value) -> None:

    AttributeError: 'Series' object has no attribute 'geometry'`

    bug 
    opened by kntrdzs 6
  • Interpolation at antimeridian

    Interpolation at antimeridian

    Hi, first of all thanks a lot for this awesome project ! I've recently encountered a problem that I wanted to share.

    Problem description

    When working across the antimeridian, the interpolate_position_at function returns a unexpected value. This is due to the fact that the shapely.geometry Linestring object is considered as going across Greenwich meridian, despite the extremities of the line being very close.


    One possible fix would be, if two positions are close and separated by the antimeridian, to add 360° to the negative longitude and subtract back the 360° to the interpolated longitude if it is above 180°.

    bug 
    opened by olivierwelcomme 1
  • remove matplotlib from deps

    remove matplotlib from deps

    Following on from https://github.com/anitagraser/movingpandas/pull/260 we could also remove matploblib as a dependency. For example, it's not a dependency in geopandas https://github.com/geopandas/geopandas/blob/main/pyproject.toml#L43

    enhancement 
    opened by raybellwaves 1
  • unpin doc packages

    unpin doc packages

    Seeing some doc failures with https://github.com/anitagraser/movingpandas/blob/main/docs/environment.yml e.g. https://readthedocs.org/projects/movingpandas/builds/18774152/

    The pinning of versions in the doc env may be able to be removed.

    bug 
    opened by raybellwaves 0
  • Rename _measure_distance parameter spherical to geodesic

    Rename _measure_distance parameter spherical to geodesic

    Since geodesic distance measurements have replaced spherical ones, the parameter name now is misleading:

    https://github.com/anitagraser/movingpandas/blob/81ebf4f749376f3d43ff330d7b70a25a6db7913a/movingpandas/geometry_utils.py#L77-L85

    enhancement 
    opened by anitagraser 0
Releases(v0.14.rc1)
  • v0.14.rc1(Dec 20, 2022)

    New features:

    • https://github.com/anitagraser/movingpandas/pull/268 New add_angular_difference method

    Includes fixes and enhancements for:

    • https://github.com/anitagraser/movingpandas/pull/267 Note that direction values are [0, 360) in documentation

    Behind the scenes:

    • https://github.com/anitagraser/movingpandas/pull/269 Fixed python dependencies
    • https://github.com/anitagraser/movingpandas/pull/269 Fixed read the docs build
    Source code(tar.gz)
    Source code(zip)
    movingpandas-0.14rc1.tar.gz(56.14 KB)
  • v0.13(Dec 2, 2022)

  • v0.12(Nov 15, 2022)

  • v0.11(Aug 12, 2022)

    Published at https://anaconda.org/conda-forge/movingpandas

    New features:

    • #37 New minimum and Hausdorff distance measures
    • #233 New functions to add a timedelta column and get the trajectory sampling interval

    Includes fixes and enhancements for:

    Behind the scenes:

    Source code(tar.gz)
    Source code(zip)
  • v0.10(Jun 19, 2022)

    Published at https://anaconda.org/conda-forge/movingpandas

    New features:

    Includes fixes and enhancements for:

    • #178 Exposed StoneSoup import warning to user if this optional dependency is missing
    • #183 Addressed FutureWarnings
    • #186 Optimized stop point detection by avoiding re-creating shapely objects
    • #189 Support for custom geometry column names
    • #196 Ensured that add_direction doesn't add extra columns
    • Proper geo=False handling to improve working with local non-geographic coordinates

    Behind the scenes:

    • The repo now has bug report and feature request templates
    • We have activated the discussions forum at https://github.com/anitagraser/movingpandas/discussions
    Source code(tar.gz)
    Source code(zip)
  • v0.9(Jan 11, 2022)

    Published at https://anaconda.org/conda-forge/movingpandas

    New features:

    • #15 First trajectory smoothing algorithm: Kalman filter with constant velocity model based on StoneSoup
    • #128 First spatiotemporal trajectory generalization algorithm: Top-Down Time Ratio algorithm proposed by Meratnia & de By (2004) ported from MovinPy
    • #129 First trajectory cleaning algorithm: Outlier cleaner ported from MovinPy
    • #165 New convenience function showing library versions

    Includes fixes and enhancements for:

    • #152 Faster length of the diagonal of the minimum rotated rectangle
    • #151 Customizable speed column name
    • #147 Filter TrajectoryCollection by trajectory duration
    • #124 Add option for splitting trajectories by hour
    • #160 Faster TrajectoryCollection aggregation

    Behind the scenes:

    • #168 We have moved testing from Travis to Github Actions
    • #143 Sources are now linted using flake8 and black
    Source code(tar.gz)
    Source code(zip)
  • v0.8rc1(Oct 30, 2021)

    Published at https://anaconda.org/conda-forge/movingpandas

    Includes fixes and enhancements for:

    • #118 Handle get_linestring_between "ValueError: cannot set a single element with an array"
    • #112 Remove hard-coded geometry col name
    • #119 Raise an error if the input GeoDataFrame doesn't have a datetime index
    • #121 Fix TrajectoryStopDetector.get_stop_points to check if len(stops) > 0
    • #137 Improve file reading convenience
    • #133 Document units for TrajectorySplitter args
    Source code(tar.gz)
    Source code(zip)
  • v0.7rc1(Jun 3, 2021)

    Published at https://anaconda.org/conda-forge/movingpandas

    Includes fixes and enhancements for:

    • #114 Add conversions to GeoDataFrame
    • #115 Warning & wrong min/max values in TrajectoryCollection.plot
    • #117 Clip and intersection should return TrajectoryCollection
    Source code(tar.gz)
    Source code(zip)
  • v0.6rc1(May 8, 2021)

    Published at https://anaconda.org/conda-forge/movingpandas

    Includes fixes for:

    • #104 Clip with Polygon causes IndexError: list index out of range
    • #101 StopSplitter Error
    • #90 TrajectoryCollection plotter alters speed column
    Source code(tar.gz)
    Source code(zip)
  • v0.5rc1(Sep 26, 2020)

  • v0.4rc1(Aug 15, 2020)

  • v0.3.rc1(Mar 14, 2020)

Owner
Anita Graser
Spatial data analysis with a focus on mobility topics
Anita Graser
Using SQLAlchemy with spatial databases

GeoAlchemy GIS Support for SQLAlchemy. Introduction GeoAlchemy is an extension of SQLAlchemy. It provides support for Geospatial data types at the ORM

109 Dec 01, 2022
Hapi is a Python library for building Conceptual Distributed Model using HBV96 lumped model & Muskingum routing method

Current build status All platforms: Current release info Name Downloads Version Platforms Hapi - Hydrological library for Python Hapi is an open-sourc

Mostafa Farrag 15 Dec 26, 2022
PyTorch implementation of ''Background Activation Suppression for Weakly Supervised Object Localization''.

Background Activation Suppression for Weakly Supervised Object Localization PyTorch implementation of ''Background Activation Suppression for Weakly S

34 Dec 27, 2022
Read images to numpy arrays

mahotas-imread: Read Image Files IO with images and numpy arrays. Mahotas-imread is a simple module with a small number of functions: imread Reads an

Luis Pedro Coelho 67 Jan 07, 2023
A compilation of several single-beam bathymetry surveys of the Caribbean

Caribbean - Single-beam bathymetry This dataset is a compilation of several single-beam bathymetry surveys of the Caribbean ocean displaying a wide ra

Fatiando a Terra Datasets 0 Jan 20, 2022
Get-countries-info - A python code that fetches data of any country

Country-info A python code getting countries information including country's map

CODE 2 Feb 21, 2022
Asynchronous Client for the worlds fastest in-memory geo-database Tile38

This is an asynchonous Python client for Tile38 that allows for fast and easy interaction with the worlds fastest in-memory geodatabase Tile38.

Ben 53 Dec 29, 2022
Focal Statistics

Focal-Statistics The Focal statistics tool in many GIS applications like ArcGIS, QGIS and GRASS GIS is a standard method to gain a local overview of r

Ifeanyi Nwasolu 1 Oct 21, 2021
The geospatial toolkit for redistricting data.

maup maup is the geospatial toolkit for redistricting data. The package streamlines the basic workflows that arise when working with blocks, precincts

Metric Geometry and Gerrymandering Group 60 Dec 05, 2022
Digital Earth Australia notebooks and tools repository

Repository for Digital Earth Australia Jupyter Notebooks: tools and workflows for geospatial analysis with Open Data Cube and xarray

Geoscience Australia 335 Dec 24, 2022
A simple reverse geocoder that resolves a location to a country

Reverse Geocoder This repository holds a small web service that performs reverse geocoding to determine whether a user specified location is within th

4 Dec 25, 2021
Client library for interfacing with USGS datasets

USGS API USGS is a python module for interfacing with the US Geological Survey's API. It provides submodules to interact with various endpoints, and c

Amit Kapadia 104 Dec 30, 2022
glTF to 3d Tiles Converter. Convert glTF model to Glb, b3dm or 3d tiles format.

gltf-to-3d-tiles glTF to 3d Tiles Converter. Convert glTF model to Glb, b3dm or 3d tiles format. Usage λ python main.py --help Usage: main.py [OPTION

58 Dec 27, 2022
Python library to visualize circular plasmid maps

Plasmidviewer Plasmidviewer is a Python library to visualize plasmid maps from GenBank. This library provides only the function to visualize circular

Mori Hideto 9 Dec 04, 2022
Starlite-tile38 - Showcase using Tile38 via pyle38 in a Starlite application

Starlite-Tile38 Showcase using Tile38 via pyle38 in a Starlite application. Repo

Ben 8 Aug 07, 2022
A short term landscape evolution using a path sampling method to solve water and sediment flow continuity equations and model mass flows over complex topographies.

r.sim.terrain A short-term landscape evolution model that simulates topographic change for both steady state and dynamic flow regimes across a range o

Brendan Harmon 7 Oct 21, 2022
pure-Python (Numpy optional) 3D coordinate conversions for geospace ecef enu eci

Python 3-D coordinate conversions Pure Python (no prerequistes beyond Python itself) 3-D geographic coordinate conversions and geodesy. API similar to

Geospace code 292 Dec 29, 2022
A Python interface between Earth Engine and xarray

eexarray A Python interface between Earth Engine and xarray Description eexarray was built to make processing gridded, mesoscale time series data quic

Aaron Zuspan 159 Dec 23, 2022
Django model field that can hold a geoposition, and corresponding widget

django-geoposition A model field that can hold a geoposition (latitude/longitude), and corresponding admin/form widget. Prerequisites Starting with ve

Philipp Bosch 324 Oct 17, 2022
A proof-of-concept jupyter extension which converts english queries into relevant python code

Text2Code for Jupyter notebook A proof-of-concept jupyter extension which converts english queries into relevant python code. Blog post with more deta

DeepKlarity 2.1k Dec 29, 2022