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
Python Data. Leaflet.js Maps.

folium Python Data, Leaflet.js Maps folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the Leaflet.js

6k Jan 02, 2023
GetOSM is an OpenStreetMap tile downloader written in Python that is agnostic of GUI frameworks.

GetOSM GetOSM is an OpenStreetMap tile downloader written in Python that is agnostic of GUI frameworks. It is used with tkinter by ProjPicker. Require

Huidae Cho 3 May 20, 2022
Manage your XYZ Hub or HERE Data Hub spaces from Python.

XYZ Spaces for Python Manage your XYZ Hub or HERE Data Hub spaces and Interactive Map Layer from Python. FEATURED IN: Online Python Machine Learning C

HERE Technologies 30 Oct 18, 2022
Cloud Optimized GeoTIFF creation and validation plugin for rasterio

rio-cogeo Cloud Optimized GeoTIFF (COG) creation and validation plugin for Rasterio. Documentation: https://cogeotiff.github.io/rio-cogeo/ Source Code

216 Dec 31, 2022
Tool to suck data from ArcGIS Server and spit it into PostgreSQL

chupaESRI About ChupaESRI is a Python module/command line tool to extract features from ArcGIS Server map services. Name? Think "chupacabra" or "Chupa

John Reiser 34 Dec 04, 2022
Python script to locate mobile number

Python script to locate mobile number How to use this script run the command to install the required libraries pip install -r requirements.txt run the

Shekhar Gupta 8 Oct 10, 2022
Imports VZD (Latvian State Land Service) open data into postgis enabled database

Python script main.py downloads and imports Latvian addresses into PostgreSQL database. Data contains parishes, counties, cities, towns, and streets.

Kaspars Foigts 7 Oct 26, 2022
Bacon - Band-limited Coordinate Networks for Multiscale Scene Representation

BACON: Band-limited Coordinate Networks for Multiscale Scene Representation Project Page | Video | Paper Official PyTorch implementation of BACON. BAC

Stanford Computational Imaging Lab 144 Dec 29, 2022
Evaluation of file formats in the context of geo-referenced 3D geometries.

Geo-referenced Geometry File Formats Classic geometry file formats as .obj, .off, .ply, .stl or .dae do not support the utilization of coordinate syst

Advanced Information Systems and Technology 11 Mar 02, 2022
Geographic add-ons for Django REST Framework. Maintained by the OpenWISP Project.

Geographic add-ons for Django REST Framework. Maintained by the OpenWISP Project.

OpenWISP 982 Jan 06, 2023
A bot that tweets info and location map for new bicycle parking added to OpenStreetMap within a GeoJSON boundary.

Bike parking tweepy bot app A twitter bot app that searches for bicycle parking added to OpenStreetMap. Relies on AWS Lambda/S3, Python3, Tweepy, Flas

Angelo Trivisonno 1 Dec 19, 2021
Google maps for Jupyter notebooks

gmaps gmaps is a plugin for including interactive Google maps in the IPython Notebook. Let's plot a heatmap of taxi pickups in San Francisco: import g

Pascal Bugnion 747 Dec 19, 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
geobeam - adds GIS capabilities to your Apache Beam and Dataflow pipelines.

geobeam adds GIS capabilities to your Apache Beam pipelines. What does geobeam do? geobeam enables you to ingest and analyze massive amounts of geospa

Google Cloud Platform 61 Nov 08, 2022
A GUI widget for Linux to show current time in different timezones.

A GUI widget to show current time in different timezones (under development). To use this widget: Run scripts/startup.py Select a country. A list of t

B.Jothin kumar 11 Nov 10, 2022
Platform for building statistical models of cities and regions

UrbanSim UrbanSim is a platform for building statistical models of cities and regions. These models help forecast long-range patterns in real estate d

Urban Data Science Toolkit 419 Dec 30, 2022
Create Siege configuration files from Cloud Optimized GeoTIFF.

cogeo-siege Documentation: Source Code: https://github.com/developmentseed/cogeo-siege Description Create siege configuration files from Cloud Optimiz

Development Seed 3 Dec 01, 2022
Wraps GEOS geometry functions in numpy ufuncs.

PyGEOS PyGEOS is a C/Python library with vectorized geometry functions. The geometry operations are done in the open-source geometry library GEOS. PyG

362 Dec 23, 2022
Python 台灣行政區地圖 (2021)

Python 台灣行政區地圖 (2021) 以 python 讀取政府開放平台的 ShapeFile 地圖資訊。歡迎引用或是協作 另有縣市資訊、村里資訊與各種行政地圖資訊 例如: 直轄市、縣市界線(TWD97經緯度) 鄉鎮市區界線(TWD97經緯度) | 政府資料開放平臺: https://data

WeselyOng 12 Sep 27, 2022
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