Tools for the extraction of OpenStreetMap street network data

Overview

OSMnet

Build Status Coverage Status Appveyor Build Status

Tools for the extraction of OpenStreetMap (OSM) street network data. Intended to be used in tandem with Pandana and UrbanAccess libraries to extract street network nodes and edges.

Overview

OSMnet offers tools to download street network data from OpenStreetMap and extract a graph network comprised of nodes and edges to be used in Pandana street network accessibility calculations.

Let us know what you are working on or if you think you have a great use case by tweeting us at @urbansim or post on the UrbanSim forum.

Library Status

Forthcoming improvements:

  • Tutorial/demo

Reporting bugs

Please report any bugs you encounter via GitHub issues.

Contributing to OSMnet

If you have improvements or new features you would like to see in OSMnet:

  1. Open a feature request via GitHub issues.
  2. Contribute your code from a fork or branch by using a Pull Request and request a review so it can be considered as an addition to the codebase.

Installation

conda

OSMnet is available on conda and can be installed with:

conda install osmnet --channel conda-forge

It is recommended to install via conda and the conda-forge channel especially if you find you are having issues installing some of the spatial dependencies.

pip

OSMnet can be installed via PyPI:

pip install osmnet

Development Installation

To install OSMnet from source code, follow these steps:

  1. Git clone the OSMnet repo
  2. in the cloned directory run: python setup.py develop

To update to the latest version:

Use git pull inside the cloned repository

Documentation

Documentation for OSMnet can be found here.

Related UDST libraries

Comments
  • Geopandas 0.7 uses new object type for CRS

    Geopandas 0.7 uses new object type for CRS

    Description of the bug

    Geopandas 0.7 changed the CRS type from a str to a pyproj.CRS class instance in this commit. This causes the check in https://github.com/UDST/osmnet/blob/ec2dc954673cfdbef48e96ea805980a8a0a95fe7/osmnet/load.py#L488 to fail with the below error.

    Environment

    • Python version: 3.8

    • OSMnet version: 0.1.5

    Paste the code that reproduces the issue here:

    osm.pdna_network_from_bbox(lat_min=ymin, lng_min=xmin, lat_max=ymax, lng_max=xmax)
    

    Paste the error message (if applicable):

      File "/usr/local/anaconda3/envs/nbtest6/lib/python3.8/site-packages/netbuffer/core/network.py", line 90, in get_osm_network
        network = osm.pdna_network_from_bbox(lat_min=ymin,
      File "/usr/local/anaconda3/envs/nbtest6/lib/python3.8/site-packages/pandana/loaders/osm.py", line 49, in pdna_network_from_bbox
        nodes, edges = network_from_bbox(lat_min=lat_min, lng_min=lng_min,
      File "/usr/local/anaconda3/envs/nbtest6/lib/python3.8/site-packages/osmnet/load.py", line 850, in network_from_bbox
        nodes, ways, waynodes = ways_in_bbox(
      File "/usr/local/anaconda3/envs/nbtest6/lib/python3.8/site-packages/osmnet/load.py", line 654, in ways_in_bbox
        osm_net_download(lat_max=lat_max, lat_min=lat_min, lng_min=lng_min,
      File "/usr/local/anaconda3/envs/nbtest6/lib/python3.8/site-packages/osmnet/load.py", line 136, in osm_net_download
        geometry_proj, crs_proj = project_geometry(polygon,
      File "/usr/local/anaconda3/envs/nbtest6/lib/python3.8/site-packages/osmnet/load.py", line 448, in project_geometry
        gdf_proj = project_gdf(gdf, to_latlong=to_latlong)
      File "/usr/local/anaconda3/envs/nbtest6/lib/python3.8/site-packages/osmnet/load.py", line 485, in project_gdf
        if (gdf.crs is not None) and ('proj' in gdf.crs) \
    TypeError: argument of type 'CRS' is not iterable
    
    Type: maintenance 
    opened by blakerosenthal 8
  • 'vertices' must be a 2D list or array with shape Nx2 happening only for Banglaore?

    'vertices' must be a 2D list or array with shape Nx2 happening only for Banglaore?

    Description of the bug

    I have done the same over different regions of India and USA, I didn't get this issue untill trying over Banglore... Any thoughts and answers are most welcomed, Thanks!

    OSM data (optional)

    bbox = [12.8881, 77.5079, 12.9918, 77.6562]

    Environment

    • Operating system: Windows 10 pro

    • Python version: 3.7.6

    • OSMnet version: 0.1.5

    • OSMnet required packages versions (optional): pandana 0.4.4, pandas 0.25.3, geopandas 0.6.3

    Paste the code that reproduces the issue here:

    import pandas as pd, geopandas as gpd
    df = pd.DataFrame(
        {'id':[1522786113, 2227865111, 309601717, 1513928857, 2220792136, 6455354942],
            'Name': ['Neil', 'Nitin', 'Mukesh','Alpha','Beta','Office'],
         'Area': ['Valsad', 'Silvasa', 'Daman','Rajkot','Dui','Vapi'],
         'lat': [12.956550, 12.950360, 12.912047,12.955546,12.939653,12.928109],
         'lon': [77.540640, 77.581135, 77.586969,77.529658,77.542523,77.639337]})
    pois = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.lon, df.lat))
    
    network = osm.network_from_bbox(bbox[0], bbox[1], bbox[2], bbox[3],network_type='drive')
    network=pandana.Network(network[0]["x"],network[0]["y"], network[1]["from"], network[1]["to"],network[1][["distance"]])
    lcn = network.low_connectivity_nodes(impedance=1000, count=10, imp_name='distance')
    
    network.precompute(distance + 1)
    network.init_pois(num_categories=1, max_dist=distance, max_pois=7)
    network.set_pois(category='my_amenity', x_col=pois['lon'], y_col=pois['lat'])
    access = network.nearest_pois(distance=distance, category='my_amenity', num_pois=7)
    
    bbox_aspect_ratio = (bbox[2] - bbox[0]) / (bbox[3] - bbox[1])
    fig_kwargs = {'facecolor':'w', 
                  'figsize':(15, 15 * bbox_aspect_ratio)}
    
    # keyword arguments to pass for scatter plots
    plot_kwargs = {'s':5, 
                   'alpha':0.9, 
                   'cmap':'viridis_r', 
                   'edgecolor':'none'}
    
    n = 1
    bmap, fig, ax = network.plot(access[n], bbox=bbox, plot_kwargs=plot_kwargs, fig_kwargs=fig_kwargs)
    ax.set_facecolor('k')
    ax.set_title('Walking distance (m) to nearest boi around Bangalore-India', fontsize=15)
    fig.savefig('images/accessibility.png', dpi=200, bbox_inches='tight')
    plt.show()
    

    Paste the error message (if applicable):

    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-22-d557c4f5993e> in <module>
          1 # plot the distance to the nth nearest amenity
          2 n = 1
    ----> 3 bmap, fig, ax = network.plot(access[n], bbox=bbox, plot_kwargs=plot_kwargs, fig_kwargs=fig_kwargs)
          4 ax.set_facecolor('k')
          5 ax.set_title('Walking distance (m) to nearest {} around Berkeley/Oakland'.format(amenity), fontsize=15)
    
    ~\miniconda3\envs\ox\lib\site-packages\pandana\network.py in plot(self, data, bbox, plot_type, fig_kwargs, bmap_kwargs, plot_kwargs, cbar_kwargs)
        457         bmap = Basemap(
        458             bbox[1], bbox[0], bbox[3], bbox[2], ax=ax, **bmap_kwargs)
    --> 459         bmap.drawcoastlines()
        460         bmap.drawmapboundary()
        461 
    
    ~\miniconda3\envs\ox\lib\site-packages\mpl_toolkits\basemap\__init__.py in drawcoastlines(self, linewidth, linestyle, color, antialiased, ax, zorder)
       1849         # get current axes instance (if none specified).
       1850         ax = ax or self._check_ax()
    -> 1851         coastlines = LineCollection(self.coastsegs,antialiaseds=(antialiased,))
       1852         coastlines.set_color(color)
       1853         coastlines.set_linestyle(linestyle)
    
    ~\miniconda3\envs\ox\lib\site-packages\matplotlib\collections.py in __init__(self, segments, linewidths, colors, antialiaseds, linestyles, offsets, transOffset, norm, cmap, pickradius, zorder, facecolors, **kwargs)
       1357             **kwargs)
       1358 
    -> 1359         self.set_segments(segments)
       1360 
       1361     def set_segments(self, segments):
    
    ~\miniconda3\envs\ox\lib\site-packages\matplotlib\collections.py in set_segments(self, segments)
       1372             _segments = self._add_offsets(_segments)
       1373 
    -> 1374         self._paths = [mpath.Path(_seg) for _seg in _segments]
       1375         self.stale = True
       1376 
    
    ~\miniconda3\envs\ox\lib\site-packages\matplotlib\collections.py in <listcomp>(.0)
       1372             _segments = self._add_offsets(_segments)
       1373 
    -> 1374         self._paths = [mpath.Path(_seg) for _seg in _segments]
       1375         self.stale = True
       1376 
    
    ~\miniconda3\envs\ox\lib\site-packages\matplotlib\path.py in __init__(self, vertices, codes, _interpolation_steps, closed, readonly)
        128         if vertices.ndim != 2 or vertices.shape[1] != 2:
        129             raise ValueError(
    --> 130                 "'vertices' must be a 2D list or array with shape Nx2")
        131 
        132         if codes is not None:
    
    ValueError: 'vertices' must be a 2D list or array with shape Nx2
    
    opened by lucky-verma 4
  • Suggested feature: custom OSM filters

    Suggested feature: custom OSM filters

    Suggestion

    User should be able to supply custom OSM filter when calling network_from_bbox

    The two predefined filter choices for 'walk' and 'drive' are helpful, but somewhat limiting. Adding this would allow for much greater generalizability.

    Type: new feature 
    opened by lmnoel 3
  • Maintenance/deprecation futurewarn updates

    Maintenance/deprecation futurewarn updates

    • addresses: #26
    • update requirements to: geopandas >= 0.8.2 and shapely >= 1.6
    • drops Python 3.7 from tests for now due to Travis build error
    • updates contribution guidelines
    Type: maintenance 
    opened by sablanchard 2
  • Finalizing v0.1.6 release

    Finalizing v0.1.6 release

    This PR finalizes the v0.1.6 release by merging dev into master. See PRs #22 and #21 for more info.

    Distribution checklist:

    • [x] released on PyPI: https://pypi.org/project/osmnet/
    • [x] released on Conda Forge: https://anaconda.org/conda-forge/osmnet
    • [x] live docs updated: https://udst.github.io/osmnet

    Installation tests (because we've dropped Python 2.7 support in this version):

    • [x] Pip py38 -> OSMnet 0.1.6
    • [x] Pip py27 -> OSMnet 0.1.5
    • [x] Conda py38 -> OSMnet 0.1.6
    • [x] Conda py27 -> OSMnet 0.1.5
    Type: maintenance 
    opened by smmaurer 2
  • v0.1.6 release prep

    v0.1.6 release prep

    This PR prepares the OSMnet v0.1.6 release, which provides compatibility with GeoPandas v0.7 and later.

    The easiest way to implement that was for this version of OSMnet to require GeoPandas v0.7+, which means that it no longer supports Python 2.7 or Win32. (OSMnet v0.1.5 continues to install and run fine on older platforms, for anyone who needs it.)

    cc @sablanchard @knaaptime @blakerosenthal

    Previously merged:

    • PR #21

    Changes in this PR:

    CI cleanup

    • Pins pytest-cov to an earlier version to resolve an installation incompatibility with Coveralls, similar to what's described here
    • Updates pycodestyle settings (the defaults must have changed)
    • In Travis, adds Python 3.8 and drops 2.7
    • Updates the AppVeyor script to be cleaner and more targeted
    • Switches AppVeyor from Win32 to Win64

    Other changes

    • Bumps the Pandas requirement to correspond to GeoPandas 0.7
    • Adds a setting in setup.py to require Python 3 (following instructions here)
    • Updates copyright year in license and docs
    • Updates version numbers in setup, init, and docs
    • Adds version info to the main doc page
    • Cleans up and documents the doc building procedure
    • Updates contribution guide with additional info drawn from other UDST repos
    • Renames HISTORY to CHANGELOG and adds an entry for this release
    • Cleans up some cruft in the repo, like references to ez_setup

    Testing:

    • [x] Unit tests are passing on Mac (local), Linux (travis), and Windows (appveyor)

    Next steps:

    • Merge this to dev
    • Release on PyPI
    • Update conda-forge feedstock
    • Update live docs
    • Merge to master
    • Tag release on GitHub
    • Confirm that Pip and Conda automatically install previous version in Python 2.7

    And we should probably go through the other deprecation warnings when we have a chance (@sablanchard), and fix things before the library breaks again!

    Type: maintenance 
    opened by smmaurer 2
  • Adjustments to packaging and tests

    Adjustments to packaging and tests

    This PR makes some small changes to the packaging.

    I added a MANIFEST.in file that lists the changelog and the license. This will include those files in the source distribution when we put together releases for pypi (and by extension conda-forge, which gets the files from pypi). The license file in particular is required by conda-forge.

    I also added a .txt file extension to the license file because it seems tidier.

    No substantive changes to the code.

    EDITED TO ADD:

    • fixed the version number in __init__.py, which hadn't been updated for the last release (this won't show up in pypi and conda-forge though)
    • streamlined the travis tests to match the standard install process (now only installs requirements that are specified in setup.py or requirements-dev.txt)
    • added python 3.6 and 3.7 to test suite and affirmed support in setup.py
    • fixed tests that were failing due to changes in OSM database
    Type: maintenance 
    opened by smmaurer 2
  • Misc DeprecationWarning and FutureWarnings

    Misc DeprecationWarning and FutureWarnings

    Unit tests in Python 3.6.11 for osmnet v1.6.0 are returning misc DeprecationWarning and FutureWarnings when using geopandas 0.9, shapely 1.7.1, and pandas 1.1.0:

    1. DeprecationWarning: Flags not at the start of the expression '//(?s)(.*?)/' from https://github.com/UDST/osmnet/blob/dev/osmnet/load.py#L237, suggest to change (r'//(?s)(.*?)/', url)[0] to (r'(?s)//(.*?)/', url)[0]

    2. FutureWarning: Assigning CRS to a GeoDataFrame without a geometry column is now deprecated and will not be supported in the future. from: https://github.com/UDST/osmnet/blob/dev/osmnet/load.py#L445 suggest refactoring function to accept new schema.

    3. FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6 return _prepare_from_string(" ".join(pjargs)) when using 'init' to initialize a projection, suggest using latest crs specification such as "EPSG:4326"

    4. FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead. import pandas.util.testing as pdt from: https://github.com/UDST/osmnet/blob/dev/osmnet/tests/test_load.py#L2 suggest removing use of pdt and instead use .equals()

    Type: maintenance 
    opened by sablanchard 1
  • Non-universal wheels for PyPI (related to dropping Python 2.7 support)

    Non-universal wheels for PyPI (related to dropping Python 2.7 support)

    The last OSMnet release ended support for Python 2.7 (see PR #23). I didn't get the distribution details quite right, and in some cases Pip in py27 was still trying to install the new version. (This came up in the UrbanAccess Travis tests.)

    This PR documents what was going on and corrects the release instructions. The key is that -- in addition to specifying python_requires in setup.py -- you need to build and upload a non-universal wheel file for PyPI.

    Details

    Here's some more info: https://packaging.python.org/guides/distributing-packages-using-setuptools/#wheels

    Universal wheels imply support for both Python 2 and Python 3. You build them with

    python setup.py sdist bdist_wheel --universal
    

    And the filenames look like osmnet-0.1.6-py2.py3-none-any.whl.

    To make it clear that the package no longer supports Python 2, you need a non-universal pure Python wheel. You build it with

    python setup.py sdist bdist_wheel
    

    And the filename looks like osmnet-0.1.6-py3-none-any.whl. (If your active environment is Python 3, it creates a wheel for Python 3.)

    Note that the wheels are the bdist_wheel part of the command -- the sdist part creates a tarball like osmnet-0.1.6.tar.gz, and we upload both to PyPI. Conda Forge uses the tarball for the conda release, and probably in some cases users install from it too.

    Resolution

    Earlier today I uploaded a non-universal wheel for OSMnet v0.1.6 to PyPI, and deleted the universal one. So if you've been having problems it should be fixed now.

    opened by smmaurer 1
  • version and conda-forge release updates

    version and conda-forge release updates

    It looks like osmnet v0.1.5 was never released to the conda-forge channel and the https://github.com/UDST/osmnet/blob/master/osmnet/init.py#L3 was not updated to match the latest version number v0.1.5.

    Type: maintenance 
    opened by sablanchard 1
  • Including OSMNet in other packages' requirements - now fixed

    Including OSMNet in other packages' requirements - now fixed

    Problem

    People sometimes get errors using setuptools to install packages that list OSMNet as a requirement.

    For example, OSMNet is a requirement in Pandana's setup.py file. If you install Pandana on OS X or Linux using python setup.py develop, and OSMNet is not yet installed, you get the error below.

    Solution

    I poked around, and it seems like the problem is that the initial 0.1.0 release of OSMNet on pypi.org included files that no longer conform to the standard naming spec. This causes an error when setuptools tries to find an appropriate version to install.

    There are several newer releases, none of which break the API in any way, so I went ahead and removed 0.1.0 from pypi. This immediately fixed the problem on my machine.

    Let me know if you see any more issues related to this.

    Original error message

    Searching for osmnet>=0.1.2
    Reading https://pypi.org/simple/osmnet/
    Traceback (most recent call last):
      File "setup.py", line 133, in <module>
        'License :: OSI Approved :: GNU Affero General Public License v3'
      File "/anaconda3/lib/python3.6/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/anaconda3/lib/python3.6/distutils/dist.py", line 955, in run_commands
        self.run_command(cmd)
      File "/anaconda3/lib/python3.6/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/anaconda3/lib/python3.6/site-packages/setuptools/command/develop.py", line 38, in run
        self.install_for_development()
      File "/anaconda3/lib/python3.6/site-packages/setuptools/command/develop.py", line 156, in install_for_development
        self.process_distribution(None, self.dist, not self.no_deps)
      File "/anaconda3/lib/python3.6/site-packages/setuptools/command/easy_install.py", line 752, in process_distribution
        [requirement], self.local_index, self.easy_install
      File "/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 782, in resolve
        replace_conflicting=replace_conflicting
      File "/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 1065, in best_match
        return self.obtain(req, installer)
      File "/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 1077, in obtain
        return installer(requirement)
      File "/anaconda3/lib/python3.6/site-packages/setuptools/command/easy_install.py", line 667, in easy_install
        not self.always_copy, self.local_index
      File "/anaconda3/lib/python3.6/site-packages/setuptools/package_index.py", line 658, in fetch_distribution
        self.find_packages(requirement)
      File "/anaconda3/lib/python3.6/site-packages/setuptools/package_index.py", line 491, in find_packages
        self.scan_url(self.index_url + requirement.unsafe_name + '/')
      File "/anaconda3/lib/python3.6/site-packages/setuptools/package_index.py", line 831, in scan_url
        self.process_url(url, True)
      File "/anaconda3/lib/python3.6/site-packages/setuptools/package_index.py", line 373, in process_url
        self.process_url(link)
      File "/anaconda3/lib/python3.6/site-packages/setuptools/package_index.py", line 335, in process_url
        dists = list(distros_for_url(url))
      File "/anaconda3/lib/python3.6/site-packages/setuptools/package_index.py", line 99, in distros_for_url
        for dist in distros_for_location(url, base, metadata):
      File "/anaconda3/lib/python3.6/site-packages/setuptools/package_index.py", line 118, in distros_for_location
        wheel = Wheel(basename)
      File "/anaconda3/lib/python3.6/site-packages/setuptools/wheel.py", line 64, in __init__
        raise ValueError('invalid wheel name: %r' % filename)
    ValueError: invalid wheel name: 'osmnet-0.1.0-py2.py3-any.whl'
    
    Type: maintenance 
    opened by smmaurer 1
  • Maintenance/python version shapely dep

    Maintenance/python version shapely dep

    • updates to support package builds of Python 3.9 and 3.10
    • updates to address Shapely depreciation of iterating over multi-part geometries
    • bump up minimum supported version of geopandas and shapely
    • minor update to unit tests to update expected results using latest OSM data pulls
    • minor readme and doc updates
    Type: maintenance 
    opened by sablanchard 0
  • Consider tagging a new release?

    Consider tagging a new release?

    It would be nice to have some of the bug fixes since the latest version.

    Explanation: I was using pandana package which relies on osmnet, and am getting an error that is fixed by this commit, which was made after 0.6.1 https://github.com/UDST/osmnet/commit/6706683390ff7019bad0ba1eee82384fbae6b38d

    Thanks for your time.

    opened by sbrim-CTC 0
Releases(v0.1.6)
Owner
Urban Data Science Toolkit
Open source projects supporting urban spatial analysis, simulation, and visualization
Urban Data Science Toolkit
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
PySAL: Python Spatial Analysis Library Meta-Package

Python Spatial Analysis Library PySAL, the Python spatial analysis library, is an open source cross-platform library for geospatial data science with

Python Spatial Analysis Library 1.1k Dec 18, 2022
ESMAC diags - Earth System Model Aerosol-Cloud Diagnostics Package

Earth System Model Aerosol-Cloud Diagnostics Package This Earth System Model (ES

Pacific Northwest National Laboratory 1 Jan 04, 2022
Pure Python NetCDF file reader and writer

Pyncf Pure Python NetCDF file reading and writing. Introduction Inspired by the pyshp library, which provides simple pythonic and dependency free data

Karim Bahgat 14 Sep 30, 2022
Python renderer for OpenStreetMap with custom icons intended to display as many map features as possible

Map Machine project consists of Python OpenStreetMap renderer: SVG map generation, SVG and PNG tile generation, Röntgen icon set: unique CC-BY 4.0 map

Sergey Vartanov 0 Dec 18, 2022
Creates 3D geometries from 2D vector graphics, for use in geodynamic models

geomIO - creating 3D geometries from 2D input This is the Julia and Python version of geomIO, a free open source software to generate 3D volumes and s

3 Feb 01, 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
Xarray backend to Copernicus Sentinel-1 satellite data products

xarray-sentinel WARNING: this product is a "technology preview" / pre-Alpha Xarray backend to explore and load Copernicus Sentinel-1 satellite data pr

B-Open 191 Dec 15, 2022
A service to auto provision devices in Aruba Central based on the Geo-IP location

Location Based Provisioning Service for Aruba Central A service to auto provision devices in Aruba Central based on the Geo-IP location Geo-IP auto pr

Will Smith 3 Mar 22, 2022
Raster-based Spatial Analysis for Python

🌍 xarray-spatial: Raster-Based Spatial Analysis in Python 📍 Fast, Accurate Python library for Raster Operations ⚡ Extensible with Numba ⏩ Scalable w

makepath 649 Jan 01, 2023
Constraint-based geometry sketcher for blender

Geometry Sketcher Constraint-based sketcher addon for Blender that allows to create precise 2d shapes by defining a set of geometric constraints like

1.7k Jan 02, 2023
Code and coordinates for Matt's 2021 xmas tree

xmastree2021 Code and coordinates for Matt's 2021 xmas tree This repository contains the code and coordinates used for Matt's 2021 Christmas tree, as

Stand-up Maths 117 Jan 01, 2023
Summary statistics of geospatial raster datasets based on vector geometries.

rasterstats rasterstats is a Python module for summarizing geospatial raster datasets based on vector geometries. It includes functions for zonal stat

Matthew Perry 437 Dec 23, 2022
Histogram matching plugin for rasterio

rio-hist Histogram matching plugin for rasterio. Provides a CLI and python module for adjusting colors based on histogram matching in a variety of col

Mapbox 75 Sep 23, 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
Spatial Interpolation Toolbox is a Python-based GUI that is able to interpolate spatial data in vector format.

Spatial Interpolation Toolbox This is the home to Spatial Interpolation Toolbox, a graphical user interface (GUI) for interpolating geographic vector

Michael Ward 2 Nov 01, 2021
Yet Another Time Series Model

Yet Another Timeseries Model (YATSM) master v0.6.x-maintenance Build Coverage Docs DOI | About Yet Another Timeseries Model (YATSM) is a Python packag

Chris Holden 60 Sep 13, 2022
A part of HyRiver software stack for handling geospatial data manipulations

Package Description Status PyNHD Navigate and subset NHDPlus (MR and HR) using web services Py3DEP Access topographic data through National Map's 3DEP

Taher Chegini 5 Dec 14, 2022
Google Maps keeps old satellite imagery around for a while – this tool collects what's available for a user-specified region in the form of a GIF.

google-maps-at-88-mph The folks maintaining Google Maps regularly update the satellite imagery it serves its users, but outdated versions of the image

Noah Doersing 111 Sep 27, 2022
This repository contains the scripts to derivate the ENU and ECEF coordinates from the longitude, latitude, and altitude values encoded in the NAD83 coordinates.

This repository contains the scripts to derivate the ENU and ECEF coordinates from the longitude, latitude, and altitude values encoded in the NAD83 coordinates.

Luigi Cruz 1 Feb 07, 2022