Pandas Network Analysis: fast accessibility metrics and shortest paths, using contraction hierarchies :world_map:

Related tags

Geolocationpandana
Overview

Coverage Status

Pandana

Pandana is a Python library for network analysis that uses contraction hierarchies to calculate super-fast travel accessibility metrics and shortest paths. The numerical code is in C++.

New in v0.5 and v0.6 is vectorized, multi-threaded calculation of shortest path routes and distances: network.shortest_paths(), network.shortest_path_lengths().

Documentation: http://udst.github.io/pandana

Installation

As of March 2021, binary installers are provided for Mac, Linux, and Windows through both PyPI and Conda Forge.

  • pip install pandana
  • conda install pandana --channel conda-forge

Pandana is easiest to install in Python 3.6 to 3.9. The last version of Pandana with Python 2.7 binaries is v0.4.4 on Conda Forge. The last version with Python 3.5 binaries is v0.6 on Pip.

See the documentation for information about other installation options.

Demo

Pandana-demo.ipynb

Acknowledgments

Pandana was created by Fletcher Foti, with subsequent contributions from Matt Davis, Federico Fernandez, Sam Maurer, and others. Sam Maurer is currently the lead maintainer. Pandana relies on contraction hierarchy code from Dennis Luxen and his OSRM project.

Academic literature

A paper on Pandana was presented at the Transportation Research Board Annual Conference in 2012. Please cite this paper when referring to the methodology implemented by this library.

Related UDST libraries

Comments
  • Compile libraries under clang on Mac

    Compile libraries under clang on Mac

    With these changes I can run make on my Mac and build ann, sparsehash, and contraction_hierarchies with Apple's clang compiler. I still cannot build the pyaccess extension, though, because clang does not support dllexport and dllimport used there. If we want to be able to build this without GNU gcc we'll have to take those out somehow.

    opened by jiffyclub 22
  • Different results when making multiple calls with nearest_pois

    Different results when making multiple calls with nearest_pois

    Description of the bug

    I am assigning network node_ids a to parcel data set and then running nearest_poi to find all of the parcels within a mile of a set of coordinates. I want to be able to re-run these queries without re-creating the network. However, If I use one set of coordinates, then a different set of coordinates whose buffer intersects with the first set, then run the first set again, I get a different number of parcels returned in the first and third query. Please see the code as it might be easier to understand.

    I am pretty sure that this is not a copy of a reference problem (in my code) because I use df.copy() to make a copy of the original parcel dataframe in the get_nearest_parcels function before any modifications are made to it. Also, the reason I do not want to recreate the network after each query is to save time- I am prototyping a web service that uses pandana to generate geojson isochrones from a passed in set of coordinates. So ideally the network is loaded and the app is listening for coordinates to run the query. I noticed this behavior because the app started generating weird polygons when making multiple calls from the same area. I have added the network files below.

    UPDATE: The parcel DataFrame has nothing to do with the error so I have updated the code for simplicity.

    Thanks,

    Stefan

    Network data (optional)

    https://file.ac/8UQg8JUbhvs/

    Environment

    • Operating system: Windows

    • Python version: 2,7

    • Pandana version: 0.2.0

    • Pandana required packages versions (optional):

    Paste the code that reproduces the issue here:

    import pandana as pdna
    import pandas as pd
    import numpy as np
    
    nodes_file_name = r'D:\Stefan\Isochrone\repository\data\all_streets_nodes_2014.csv'
    links_file_name = r'D:\Stefan\Isochrone\repository\data\all_streets_links_2014.csv'
    
    max_dist = 5280 
    
    # nodes must be indexed by node_id column, which is the first column
    nodes = pd.DataFrame.from_csv(nodes_file_name)
    links = pd.DataFrame.from_csv(links_file_name, index_col = None )
    
    # get rid of circular links
    links = links.loc[(links.from_node_id <> links.to_node_id)]
    
    # assign impedance
    imp = pd.DataFrame(links.Shape_Length)
    imp = imp.rename(columns = {'Shape_Length':'distance'})
    
    # create pandana network
    network = pdna.network.Network(nodes.x, nodes.y, links.from_node_id, links.to_node_id, imp)
    
    network.init_pois(1, max_dist, 1)
    
    def get_nearest_nodes(x,y):
        print 'Getting data'
        x = pd.Series(x)
        y = pd.Series(y)
        #Set as a point of interest on the pandana network
        network.set_pois('tstop', x, y)
        #Find distance to point from all nodes, everything over max_dist gets a value of 99999
        res = network.nearest_pois(max_dist, 'tstop', num_pois=1, max_distance=99999)
        res = (res[res <> 99999]/5280.).astype(res.dtypes) # convert to miles
        return res 
    
    
    #### ****Re-Run above code for each test**** #####
    
    ##### TEST 1 #####
    # Same coordinates, same result
    test1 = get_nearest_nodes(1272010.0, 228327.0)
    print len(test1[(test1[1] > 0)])
    test2 = get_nearest_nodes(1272010.0, 228327.0)
    print len(test2[(test2[1] > 0)])
    
    ##### TEST 2- this shows the potential bug #####
    # First and Third coordinates are the same but give different result. 
    # The second set of coordinates are within the buffer distance of the first/third. 
    test1 = get_nearest_nodes(1272010.0, 228327.0)
    print len(test1[(test1[1] > 0)])
    test2 = get_nearest_nodes(1268830.0, 228417.0)
    print len(test2[(test2[1] > 0)])
    # Same coords as the first call, but yields different results
    test3 = get_nearest_nodes(1272010.0, 228327.0)
    print len(test3[(test3[1] > 0)])
    
    ##### TEST 3 #####
    # First and third coordinates are the same and give the same result. 
    # The second set of coordinates are outside the buffer distance of the first/third.
    test1 = get_nearest_nodes(1272010.0, 228327.0)
    print len(test1[(test1[1] > 0)])
    # These coords are outside the buffered area as the first call. 
    test2 = get_nearest_nodes(1264180.0, 193485.0)
    print len(test2[(test2[1] > 0)])
    # Same coords and same results as the first call.
    test3 = get_nearest_nodes(1272010.0, 228327.0)
    print len(test3[(test3[1] > 0)])
    

    Paste the error message (if applicable):

    # place error message here
    
    opened by stefancoe 19
  • Network.set() fails if network node IDs are not sequentially ordered integers starting at 0

    Network.set() fails if network node IDs are not sequentially ordered integers starting at 0

    I ran into this problem while running an instance of bayarea_urbansim using my own network where the node ids were OSM node IDs. A lot of digging led me to identify net.set() as the source of my problems. Network.set() relies on this class method when relating the node IDs of the network to the node IDs of the variable that is being set. The problem is that this function, self._node_indexes(), in turn relies on a merge of the node IDs from the variable in question with the node indices of this class object, self.node_idx, which for some reason is defined as a NumPy arange(). Thus, if the node IDs of the variable you wish to compute with Network.set() are not themselves sequentially ordered integers a-la a NumPy arange(), the network will not be able to find any matching POI's, which is precisely the problem that I was encountering. I'm sure there is some reason why self.node_idx is defined the way it is, but without knowing the rationale I don't know whether it makes more sense to implement a fix or to instead update the documentation to reflect the requirement that network node IDs be sequentially ordered IDs.

    opened by mxndrwgrdnr 17
  • Extracting node IDs in distances dataframe output by network.nearest_pois()

    Extracting node IDs in distances dataframe output by network.nearest_pois()

    I have applied the .nearest_pois function to find out how well connected nodes within a network are in relation to their nearest hospital. I got positive results so far and stored the results in a data frame and .csv. However, for every poi (1-10) with an output distance, I am also interested in retrieving the ID of the hospital that this corresponds to in the cases where it found a point located within my threshold distance of 2000 m (See relevant bits of my code below). I.e. if this is my current output (data frame):

    node id 1 2 3 [dist] 600 800 2000

    I'd like a corresponding output (data frame) with: node id 1 2 3 hosp1 hosp2 N/A ..

    Would you be able to help? I looked at the function definitions in the network.py file to identify if there is another function or local variable within an existing function that returns such output.


    Relevant bits of the code:

    Initialise the network with the point of interest queries:

    network.init_pois(num_categories=1,max_dist=2000,max_pois=10)

    network.set_pois('hospitals',nodes['lon'],nodes['lat'])

    Perform point of interest queries - I would like to obtain the node_ids

    df = network.nearest_pois(2000,"hospitals",num_pois=10)

    Type: enhancement 
    opened by nuripurswani 16
  • Installing pandana via conda does not install loaders correctly

    Installing pandana via conda does not install loaders correctly

    I am running 64-bit Windows 8.1 with python 2.7 and have installed pandana 0.1.2 with the following code:

    conda config --add channels synthicity conda install pandana

    pandana imports fine with:

    import pandana

    but it seems the loader scripts were not installed correctly. I get the following error running:

    from pandana.loaders import osm ImportError: No module named loaders capture

    Checking the pandana package directory in anaconda: C:\Anaconda\pkgs\pandana-0.1.2-py27_0 there are no loader subfolder or scripts.

    As a work around, I tried installing pandana via the github zipfile and installation gets hung up when building _pyaccess. See below:

    unnamed

    Any ideas on the issue or potential solutions?

    opened by sablanchard 13
  • Python3 support

    Python3 support

    A couple of modifications were done to support Python 3.x. It was tested with Python 3.5 and Python 2.7 for backwards compatibility, running the full set of tests of the library.

    It's difficult to guarantee that no performance differences were introduced, but functionality seems not to be affected.

    opened by federicofernandez 12
  • import pandana on windows results in

    import pandana on windows results in "ImportError: DLL load failed..." error

    I am running 64-bit Windows 7 with python 2.7.11 and have installed pandana 0.2.0 via pip - this is a new install of pandana on a machine that has never had it. When I import pandana I receive the following error, any ideas on what may be wrong here?:

    import pandana as pdna


    ImportError Traceback (most recent call last) in () ----> 1 import pandana as pdna

    C:\Users\samb\Anaconda2\lib\site-packages\pandana__init__.py in () ----> 1 from network import Network 2 3 version = version = '0.2.0'

    C:\Users\samb\Anaconda2\lib\site-packages\pandana\network.py in () 8 import pandas as pd 9 ---> 10 from . import _pyaccess 11 from .loaders import pandash5 as ph5 12

    ImportError: DLL load failed: The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.

    Type: maintenance 
    opened by sablanchard 10
  • Remove the need of POI initialization call

    Remove the need of POI initialization call

    This PR removes the need to create an initial set of POIIndex entries.

    To achieve that, the POIIndex data structure was converted to a std::map with std::string keys.

    The init_pois function is still in place because it's also used to define the max_dist and max_pois parameters. We should decide soon if we want to move those definitions to another method.

    opened by federicofernandez 9
  • Additional OpenStreetMap, ESRI ShapeFile and Geodatabase, and GTFS (General Transit Feed Service) importing

    Additional OpenStreetMap, ESRI ShapeFile and Geodatabase, and GTFS (General Transit Feed Service) importing

    #I read in the documentation that this is already implemented on the C++ side? I was curious what the most current information on shapefile/geodatabase import is? A lot of analysis requires custom edge weights based on prior analysis on the network. I was reviewing NetworkX implementation of the graph network importer, but it is pure Python implementation that has been shown to be slower relative to IGraph/graph-tool. Questions about the implementation: Does the C++ shapefile import functionality allow import of networks that have connections based on vertices along with line end points? Or just end points? What are the dependencies on the C++ implementation on import? Depending on where this was on your priority queue I was thinking about implementing something myself. Any thoughts or updates on this would be great.

    opened by d-wasserman 9
  • Please do not change my matplotlib backend

    Please do not change my matplotlib backend

    Thanks for this package!

    I only have one problem with it: at the top of network.py, you are setting

    matplotlib.use('Agg')
    

    According to the comment, this is to fix Travis. I guess you are switching to a backend that doesn't need an X server. However, this can be very disruptive to anybody importing your library, e.g. in a Jupyter notebook, where plots stop appearing:

    UserWarning: Matplotlib is currently using agg, which is a non-GUI backend,
    so cannot show the figure
    

    It took me quite a while to find out that this line from pandana was the culprit. Please remove it.

    If it's just about testing on Travis, you can just set the display, it works well, I do it too.

    Thanks!

    Type: bug 
    opened by DavidMStraub 8
  • conda out of date

    conda out of date

    attempting to run conda update pandana gives me

    # All requested packages already installed.
    # packages in environment at C:\Anaconda2:
    #
    pandana                   0.1.2                    py27_0    synthicity
    

    Looks like 0.2.0 was never loaded on conda for windows.

    Type: maintenance 
    opened by Eh2406 8
  • Plotting with Pandana does not render title

    Plotting with Pandana does not render title

    Description of the bug

    PLotting with Pandana/UrbanAccess doesn't properly format title when calling .set_title

    GTFS feed or OSM data (optional)

    bbox = [43.435966,-80.682529,43.528884,-80.418858]
    

    Environment

    • Operating system: Windows

    • Python version: 3.9.7

    Paste the code that reproduces the issue here:

    n = 1
    bmap, fig, ax = network.plot(access[n], bbox=bbox, plot_kwargs=plot_kwargs, fig_kwargs=fig_kwargs, 
                                )
    ax.set_axis_bgcolor('k')
    ax.set_title('Walking distance (m) to nearest amenity around Waterloo', fontsize=15)
    

    Paste the error message (if applicable):

    No error but this happens: image

    opened by AdrianaCeric 0
  • incorrect shortest paths solutions when impendance values are particularly small or large

    incorrect shortest paths solutions when impendance values are particularly small or large

    Description of the bug

    I am encountering incorrect shortest path solutions when using the Network.shortest_path (and Network.shortest_paths) method on a network with impedance values of small or large (though still reasonable) orders of magnitude. I have included a very simple toy example below that captures the problem. Essentially, when the impedance values are scaled to a sufficiently small order of magnitude (by experiment seems to be ~1e-4) or large order of magnitude (by experiment seems to be ~1e7), the shortest path solution is no longer correct (and, incidentally, appears to revert to a solution that traverses the least number of nodes, rather than minimizing total impedance, though my example doesn't explore this aspect of the problem).

    Environment

    • Operating system: Windows 10 Enterprise

    • Python version: 3.9.10

    • Pandana version: 0.6.1

    Paste the code that reproduces the issue here:

    import numpy as np
    import pandana as pdna
    import pandas as pd
    
    
    nodes = [1, 2, 3, 4, 5]
    nodes = pd.DataFrame(
        np.random.uniform(size=(5, 2)), columns=["x", "y"], index=nodes
    )
    
    edges = pd.DataFrame(
        [
            [1, 2, 0.001],
            [2, 3, 0.001],
            [3, 4, 0.001],
            [1, 5, 0.002],
            [5, 4, 0.002],
        ],
        columns=["from_node", "to_node", "weight"]
    )
    
    net = pdna.Network(nodes["x"], nodes["y"], edges["from_node"], edges["to_node"], edges[["weight"]], twoway=False)
    
    net.shortest_path(1, 4)
    
    >>> array([1, 2, 3, 4], dtype=int64)
    
    

    The above example produces the expected solution.

    Now, use exactly the same nodes and edges, but scale the impedance values down by a factor of 10:

    net = pdna.Network(nodes["x"], nodes["y"], edges["from_node"], edges["to_node"], edges[["weight"]]  / 10, twoway=False)
    
    net.shortest_path(1, 4)
    
    >>> array([1, 5, 4], dtype=int64)
    

    In the second example, clearly the more expensive and incorrect route has been chosen. The same behavior is observed at the larger end of impedance values also: for example, using the above example, when the impedance values are 1e7 instead .0001, and 2e7 instead of .0002, the same behavior occurs. I'm at a loss as to why this is happening?

    Thank you for your help!

    opened by bonza2 0
  • tables sub-dependency versions conflict with python 3.10 compatibility when installing with pip

    tables sub-dependency versions conflict with python 3.10 compatibility when installing with pip

    Description of the bug

    Attempting to install pandana on python 3.10.x with pip fails because it requires tables>=3.1, <3.7; which is not supported through pip on python 3.10 (see: https://github.com/PyTables/PyTables/issues/909)

    Environment

    • Operating system: Ubuntu 22.04

    • Python version: 3.10.4

    • Pandana version: (attempting to install) 0.6.1

    • Pandana required packages versions (optional): tables==3.6.1

    Paste the code that reproduces the issue here:

    pip install pandana==0.6.1
    

    Paste the error message (if applicable):

    error: legacy-install-failure
    
    × Encountered error while trying to install package.
    ╰─> tables
    
    note: This is an issue with the package mentioned above, not pip.
    hint: See above for output from the failure.
    
    opened by thomastu 1
  • net.shortest_paths doesn't work with multiprocessing

    net.shortest_paths doesn't work with multiprocessing

    Hi,

    I'm having a little of trouble trying to use Pandana with multiprocessing

    Description of the bug

    When I call net.shortest_paths (with an 's') in a multiprocessing process (I use a multiprocessing.Pool object), it doesn't finish like an infinite loop (no error message). I tested to do the same with net.shortest_path (without an 's') and it worked! However I have to use shortest_paths because it is faster in my case. I wanted to know if there is an explanation to this.

    Network data (optional)

    OpenStreetMap Data

    Environment

    Mac OS 11.2.1 Python 3.9.7 Pandana 0.6.1

    Paste the code that reproduces the issue here:

    from multiprocessing import Pool

    n_cores = 3

    def f(n_repet): return [net.shortest_paths([node_0_id], [node_1_id]) for i in tqdm(range(n_repet))]

    p = Pool(n_cores) a = p.map(f, [10 for i in range(10)])

    Thanks for your help!

    opened by lilianmarey 0
  • Pandana network initiation slow for large network

    Pandana network initiation slow for large network

    I am initializing a pandana network for Canada roads network. My hdf5 file is just under 200mb and the number of edges is around 2.2 million. Been running the code below for almost 5 hrs and it's still on going.

    I am quite new to this domain and am wondering if anyone can give me suggestions on speeding up the computation. Would it be possible to implement multiprocessing here? Or should I break the roads network into something smaller like census divisions or provinces and somehow merge them back together, would that make it run faster?

    Thanks in advance !

    Environment

    • Windows 10
    • Operating system: 64-bit operating system, x64-based processor
    • Processor: Intel(R) Core(TM) i5-1035G4 CPU @ 1.10GHz 1.50 GHz
    • 16GB RAM, 4 CPU core
    • Python version: 3.9.7
    • Pandana version: 0.6.1
    network = pdna.Network(nodes.x, nodes.y, edges['from'], edges['to'], edges[['dist']], twoway=False)
    network.precompute(distance + 1)
    
    opened by wendy-ngan 4
  • OSM loader - POIs that are ways in OSM

    OSM loader - POIs that are ways in OSM

    In my city there are many points of interest that are not represented as nodes in OpenStreetMap, but rather ways around a building area. I usually deal with this by taking the centroids of relevant closed ways and treating them as nodes.

    I wrote a simple addition to the OSM loader tonight that uses a "way_query" to download ways using the Overpass output option 'center': "adds the center of the object's boundingbox to the output, not guaranteed to be on the object's area." I think this would work fine for the cases I am looking at. It might introduce inaccuracy for large or oddly shaped POIs (if someone requested parks, for example).

    Is this something wanted in pandana? Should I raise a PR?

    opened by JosephineRoper 1
Releases(v0.6.1)
  • v0.6.1(Mar 19, 2021)

    • Adds support for non-x86 CPUs, including ARM-based Macs
    • Removes accommodations for pre-C++11 compilers
    • Formally ends support for Python 2.7
    Source code(tar.gz)
    Source code(zip)
  • v0.6(Nov 25, 2020)

    • Adds vectorized, multi-threaded calculation of many shortest path routes at once
    • Restores usability of network.plot() by eliminating usage of Matplotlib's deprecated Basemap toolkit
    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Aug 6, 2020)

  • v0.5(Aug 5, 2020)

    • Adds support for calculating shortest path lengths between arbitrary origins and destinations, with vectorization and multi-threading
    • Restores alternate names for aggregation types, which were inadvertently removed in v0.4
    • Fixes a bug with matplotlib backends
    • Improves compilation in MacOS 10.15 Catalina
    • Eliminates the scikit-learn dependency
    • Makes matplotlib and osmnet dependencies optional
    • Revises the documentation and demo notebook
    Source code(tar.gz)
    Source code(zip)
  • v0.4.4(Dec 11, 2019)

  • v0.4.3(Aug 28, 2019)

  • v0.4.2(Aug 9, 2019)

    • Speed of network aggregations is improved
    • Support for aggregating integer values is restored
    • Thread count and contraction hierarchy status messages are restored
    • All code written for v0.3 now runs in v0.4, raising deprecation warnings when appropriate
    • Compilation improvements for Mac
    Source code(tar.gz)
    Source code(zip)
  • v0.4.1(Jan 29, 2019)

    • Documentation fixes.
    • Replaced uses of std::map::at() since it's not supported in pre-C++11 compilers.
    • Replaced initialization lists due to the same reason as above.
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Jun 27, 2017)

    • Major rewrite of the layer between Python and C++, which was previously written using the numpy C++ API, and now is written in cython.
    • The C++ that remains has been cleaned up a bit and formatted.
    • The major functionality change is that global memory is no longer used, so reserve_num_graphs no longer needs to be called and Network objects can be created and destroyed at the user's pleasure.
    • The change in global memory made the calls to init_pois no longer necessary. Then, that method has been removed and the max_items and max_distance parameters were relocated in the set_pois call.
    • The nearest neighbor queries are now resolved with Scipy instead of libANN. That removed additional global memory.
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Apr 5, 2017)

    • Python 3 compatibility.
    • The “network.nearest_pois()” method can now return the labels of the pois rather than just the distances
    • OSM data loading is now done via the osmnet package.
    • Changes to support multiple graphs.
    • Added reindex functions.
    • Updated documentation.
    • Switched code style checker in Travis CI to “pycodestyle”, which has replaced the “pep8” package.
    Source code(tar.gz)
    Source code(zip)
Owner
Urban Data Science Toolkit
Open source projects supporting urban spatial analysis, simulation, and visualization
Urban Data Science Toolkit
Geographic add-ons for Django REST Framework. Maintained by the OpenWISP Project.

django-rest-framework-gis Geographic add-ons for Django Rest Framework - Mailing List. Install last stable version from pypi pip install djangorestfra

OpenWISP 981 Jan 03, 2023
This app displays interesting statistical weather records and trends which can be used in climate related research including study of global warming.

This app displays interesting statistical weather records and trends which can be used in climate related research including study of global warming.

0 Dec 27, 2021
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
A utility to search, download and process Landsat 8 satellite imagery

Landsat-util Landsat-util is a command line utility that makes it easy to search, download, and process Landsat imagery. Docs For full documentation v

Development Seed 681 Dec 07, 2022
Satellite imagery for dummies.

felicette Satellite imagery for dummies. What can you do with this tool? TL;DR: Generate JPEG earth imagery from coordinates/location name with public

Shivashis Padhi 1.8k Jan 03, 2023
Rasterio reads and writes geospatial raster datasets

Rasterio Rasterio reads and writes geospatial raster data. Geographic information systems use GeoTIFF and other formats to organize and store gridded,

Mapbox 1.9k Jan 07, 2023
Map Ookla server locations as a Kernel Density Estimation (KDE) geographic map plot.

Ookla Server KDE Plotting This notebook was created to map Ookla server locations as a Kernel Density Estimation (KDE) geographic map plot. Currently,

Jonathan Lo 1 Feb 12, 2022
Pure python WMS

Ogcserver Python WMS implementation using Mapnik. Depends Mapnik = 0.7.0 (and python bindings) Pillow PasteScript WebOb You will need to install Map

Mapnik 130 Dec 28, 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
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
ProjPicker (projection picker) is a Python module that allows the user to select all coordinate reference systems (CRSs)

ProjPicker ProjPicker (projection picker) is a Python module that allows the user to select all coordinate reference systems (CRSs) whose extent compl

Huidae Cho 4 Feb 06, 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
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
This GUI app was created to show the detailed information about the weather in any city selected by user

WeatherApp Content Brief description Tools Features Hotkeys How it works Screenshots Ways to improve the project Installation Brief description This G

TheBugYouCantFix 5 Dec 30, 2022
Example of animated maps in matplotlib + geopandas using entire time series of congressional district maps from UCLA archive. rendered, interactive version below

Example of animated maps in matplotlib + geopandas using entire time series of congressional district maps from UCLA archive. rendered, interactive version below

Apoorva Lal 5 May 18, 2022
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
Ingest and query genomic intervals from multiple BED files

Ingest and query genomic intervals from multiple BED files.

4 May 29, 2021
A Python package for delineating nested surface depressions from digital elevation data.

Welcome to the lidar package lidar is Python package for delineating the nested hierarchy of surface depressions in digital elevation models (DEMs). I

Qiusheng Wu 166 Jan 03, 2023
Tools for the extraction of OpenStreetMap street network data

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

Urban Data Science Toolkit 47 Sep 21, 2022
Open GeoJSON data on geojson.io

geojsonio.py Open GeoJSON data on geojson.io from Python. geojsonio.py also contains a command line utility that is a Python port of geojsonio-cli. Us

Jacob Wasserman 114 Dec 21, 2022