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
Python interface to PROJ (cartographic projections and coordinate transformations library)

pyproj Python interface to PROJ (cartographic projections and coordinate transformations library). Documentation Stable: http://pyproj4.github.io/pypr

832 Dec 31, 2022
Read and write rasters in parallel using Rasterio and Dask

dask-rasterio dask-rasterio provides some methods for reading and writing rasters in parallel using Rasterio and Dask arrays. Usage Read a multiband r

Dymaxion Labs 85 Aug 30, 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
Geocode rows in a SQLite database table

Geocode rows in a SQLite database table

Chris Amico 225 Dec 08, 2022
OSMnx: Python for street networks. Retrieve, model, analyze, and visualize street networks and other spatial data from OpenStreetMap.

OSMnx OSMnx is a Python package that lets you download geospatial data from OpenStreetMap and model, project, visualize, and analyze real-world street

Geoff Boeing 4k Jan 08, 2023
peartree: A library for converting transit data into a directed graph for sketch network analysis.

peartree 🍐 🌳 peartree is a library for converting GTFS feed schedules into a representative directed network graph. The tool uses Partridge to conve

Kuan Butts 183 Dec 29, 2022
GeoIP Legacy Python API

MaxMind GeoIP Legacy Python Extension API Requirements Python 2.5+ or 3.3+ GeoIP Legacy C Library 1.4.7 or greater Installation With pip: $ pip instal

MaxMind 230 Nov 10, 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
Blender addons to make the bridge between Blender and geographic data

Blender GIS Blender minimal version : 2.8 Mac users warning : currently the addon does not work on Mac with Blender 2.80 to 2.82. Please do not report

5.9k Jan 02, 2023
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
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
h3-js provides a JavaScript version of H3, a hexagon-based geospatial indexing system.

h3-js The h3-js library provides a pure-JavaScript version of the H3 Core Library, a hexagon-based geographic grid system. It can be used either in No

Uber Open Source 648 Jan 07, 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
Python module and script to interact with the Tractive GPS tracker.

pyTractive GPS Python module and script to interact with the Tractive GPS tracker. Requirements Python 3 geopy folium pandas pillow usage: main.py [-h

Dr. Usman Kayani 3 Nov 16, 2022
A light-weight, versatile XYZ tile server, built with Flask and Rasterio :earth_africa:

Terracotta is a pure Python tile server that runs as a WSGI app on a dedicated webserver or as a serverless app on AWS Lambda. It is built on a modern

DHI GRAS 531 Dec 28, 2022
python toolbox for visualizing geographical data and making maps

geoplotlib is a python toolbox for visualizing geographical data and making maps data = read_csv('data/bus.csv') geoplotlib.dot(data) geoplotlib.show(

Andrea Cuttone 976 Dec 11, 2022
Python tools for geographic data

GeoPandas Python tools for geographic data Introduction GeoPandas is a project to add support for geographic data to pandas objects. It currently impl

GeoPandas 3.5k Jan 03, 2023
Get Landsat surface reflectance time-series from google earth engine

geextract Google Earth Engine data extraction tool. Quickly obtain Landsat multispectral time-series for exploratory analysis and algorithm testing On

Loïc Dutrieux 50 Dec 15, 2022
Python bindings and utilities for GeoJSON

geojson This Python library contains: Functions for encoding and decoding GeoJSON formatted data Classes for all GeoJSON Objects An implementation of

Jazzband 765 Jan 06, 2023
A ninja python package that unifies the Google Earth Engine ecosystem.

A Python package that unifies the Google Earth Engine ecosystem. EarthEngine.jl | rgee | rgee+ | eemont GitHub: https://github.com/r-earthengine/ee_ex

47 Dec 27, 2022