peartree: A library for converting transit data into a directed graph for sketch network analysis.

Overview

peartree ๐Ÿ ๐ŸŒณ

https://img.shields.io/travis/kuanb/peartree.svg?branch=master

peartree is a library for converting GTFS feed schedules into a representative directed network graph. The tool uses Partridge to convert the target operator schedule data into Pandas dataframes and then NetworkX to hold the manipulated schedule data as a directed multigraph.

https://raw.githubusercontent.com/kuanb/peartree/master/examples/example.gif

Above, an example of multiple Bay Area transit operators being incrementally loaded into peartree.

Installation

pip install peartree

Usage

See a full notebook at this gist to see a simple, step-by-step iPython Notebook pulling in an AC Transit GTFS feed and converting it to a NetworkX graph.

import peartree as pt

path = 'path/to/actransit_gtfs.zip'

# Automatically identify the busiest day and
# read that in as a Partidge feed
feed = pt.get_representative_feed(path)

# Set a target time period to
# use to summarize impedance
start = 7*60*60  # 7:00 AM
end = 10*60*60  # 10:00 AM

# Converts feed subset into a directed
# network multigraph
G = pt.load_feed_as_graph(feed, start, end)

Examples

I've yet to produce a full how-to guide for this library, but will begin to populate this section with any blog posts or notebooks that I or others produce, that include workflows using peartree.

Calculating betweeness centrality with Brooklyn bus network

Combining a peartree transit network and an OpenStreetMap walk network

Generating comparative acyclic route graphs

Coalescing transit network graphs and spectral clustering methods

Exploratory graph analysis with betweenness and load centrality

Comments
  • not able to plot GTFS data using peartree

    not able to plot GTFS data using peartree

    Hello everyone, I have been trying to implement an already existing code to plot GTFS feed but getting attribute error somewhere in pandas module getting called inside from peartree module. I would be thankful for any help. Python --version -3.8 OS -- Windows 10 P.S. I have updated required modules still the problem persists.

    Script:-

    try: import peartree as pt except: pass import os import pickle PKL_PATH = 'graph.pkl' #Creating the graph takes a gazillion time so I pickle it if not os.path.exists(PKL_PATH): # Automatically identify the busiest day and # read that in as a Partidge feed feed = pt.get_representative_feed("F:\PhD\GTFS\GTFS_trial.zip") # Set a target time period to # use to summarize impedance start = 76060 # 7:00 AM end = 106060 # 10:00 AM # Converts feed subset into a directed # network multigraph G = pt.load_feed_as_graph(feed, start, end) with open(PKL_PATH, 'wb') as pkl_file: pickle.dump(G, pkl_file) else: with open(PKL_PATH, 'rb') as pkl_file: G = pickle.load(pkl_file)

    Traceback (most recent call last): File "F:/PhD/Python/Directed_multigraph.py", line 31, in feed = pt.get_representative_feed("F:\PhD\GTFS\GTFS_trial.zip") File "C:\Anaconda3\envs\Python\lib\site-packages\peartree\paths.py", line 95, in get_representative_feed service_ids_by_date = ptg.read_service_ids_by_date(file_loc) File "C:\Anaconda3\envs\Python\lib\site-packages\partridge\readers.py", line 72, in read_service_ids_by_date return _service_ids_by_date(feed) File "C:\Anaconda3\envs\Python\lib\site-packages\partridge\readers.py", line 156, in _service_ids_by_date service_ids = set(feed.trips.service_id) File "C:\Anaconda3\envs\Python\lib\site-packages\pandas\core\generic.py", line 5274, in getattr return object.getattribute(self, name) AttributeError: 'DataFrame' object has no attribute 'service_id'

    opened by Pranav-Gairola 12
  • Load feed as graph issue for reduced GTFS feed

    Load feed as graph issue for reduced GTFS feed

    Hello,

    I find myself facing an issue with the use of the G = pt.load_feed_as_graph(feed, start, end) command.

    I am working with GTFS feed of the Paris region in France but I am not interested in the totality of the feed. As I only wanted to work on a smallest area, I selected the stop stations that were of interest to me and then extracted -into new GTFS files- the data of the original GTFS files that were linked to these stop stations. I used a script I found here that I modified a bit to fit my GTFS files and to trim them.

    However, when I try to load my trimmed feed with G = pt.load_feed_as_graph(feed, start, end) I get the following error:

    InsufficientSummaryResults

    ---------------------------------------------------------------------------
    InsufficientSummaryResults                Traceback (most recent call last)
    <ipython-input-119-74a13fcca0d5> in <module>
          3 # Converts feed subset into a directed network mugenerate_plotph
          4 
    ----> 5 G = pt.load_feed_as_graph(feed, start, end)
          6 
          7 end_time = time.time()
    
    ~/anaconda3/envs/iox/lib/python3.6/site-packages/peartree/paths.py in load_feed_as_graph(feed, start_time, end_time, name, existing_graph, connection_threshold, walk_speed_kmph, stop_cost_method, fallback_stop_cost, interpolate_times, impute_walk_transfers, use_multiprocessing)
        218                                                            interpolate_times,
        219                                                            stop_cost_method,
    --> 220                                                            use_multiprocessing)
        221 
        222     # This is a flag used to check if we need to run any additional steps
    
    ~/anaconda3/envs/iox/lib/python3.6/site-packages/peartree/graph.py in generate_summary_graph_elements(feed, target_time_start, target_time_end, fallback_stop_cost, interpolate_times, stop_cost_method, use_multiprocessing)
        119 
        120     # Same sanity checks on the output before we continue
    --> 121     _verify_outputs(all_edge_costs, all_wait_times)
        122 
        123     summary_edge_costs = generate_summary_edge_costs(all_edge_costs)
    
    ~/anaconda3/envs/iox/lib/python3.6/site-packages/peartree/graph.py in _verify_outputs(all_edge_costs, all_wait_times)
        208     # Handle if there are no valid edges returned (or wait times)
        209     if all_edge_costs is None or len(all_edge_costs) == 0:
    --> 210         raise InsufficientSummaryResults('The target time frame returned no '
        211                                          'valid edge costs from feed object.')
        212     if all_wait_times is None or len(all_wait_times) == 0:
    
    InsufficientSummaryResults: The target time frame returned no valid edge costs from feed object.
    

    I don't understand why the error is raised, I think my GTFS files where trimmed properly so I should be able to create a graph with them.

    Any help or indications would be greatly appreciated.

    opened by M-nes 8
  • AttributeError: 'float' object has no attribute 'add_node'

    AttributeError: 'float' object has no attribute 'add_node'

    Hi, I am getting the above error when setting impute_walk_transfers to True in pt.load_feed_as_graph. I am able to construct the graph with just (feed, start, end), but unable to when including impute_walk_transfer. I want to incorporate bus to bus transfer and bus to subway transfer as well as walking edges in my network. Is this the right way to achieve that?

    question 
    opened by rxl204 8
  • [feature] Support export to graph-tool

    [feature] Support export to graph-tool

    Per this tweet by GH user @rafapereirabr: A request to support graph-tool.

    A Gist does exist to support graph-tool conversion from NetworkX.

    Potential snafus would be increasing the complexity of the installation of this library by supporting graph-tool. One way around this would be to make the installation optional (akin to how GeoPandas treats Rtree).

    enhancement 
    opened by kuanb 7
  • UserWarning: Boolean Series key will be reindexed to match DataFrame index.

    UserWarning: Boolean Series key will be reindexed to match DataFrame index.

    I just upgraded to Pandas 1.2.0 on Python 3.8.5 and I am getting a warning from Pandas:

    UserWarning: Boolean Series key will be reindexed to match DataFrame index.

    At this line of code: https://github.com/kuanb/peartree/blob/254207ba759d82a1d66f84287075ce1f8d093463/peartree/parallel.py#L127

    I think this is because the filter is using a different Dataframe from the Dataframe being filtered.

    opened by bryanculbertson 5
  • [coalesce] Use mean of grouped edge weights rather than minimum

    [coalesce] Use mean of grouped edge weights rather than minimum

    Using minimum of grouped edge weights effectively reduce path costs, and increase accessibility significantly. The following map shows shortest path lengths from one single source to all destinations in Berkeley. It changes from using original full network to coalesced network using min grouped edge weights. Noticing the shortest path lengths reduce significantly (darker color to lighter color) use_min

    The following map shows the same change but using coalesced network using mean (different color bins though). The change is less significant. use_mean

    Also some stats comparison:

    Stats | Full Network | Coalesced w Min | Coalesced w Mean --|--|--|-- Max shortest path length | 5172 | 3092 | 3493 Mean shortest path length | 2488 | 1383 | 1619

    Visuals made by UrbanFootprint :))

    opened by yiyange 5
  • Can not use peartree to plot the data

    Can not use peartree to plot the data

    Hello,

    I am trying to using peartree to plot the GTFS data, but in the end I meet this error

    UnboundLocalError`                         `Traceback` `(most` recent call last)
    <ipython-input-12-3fede03b6b3a> in <module>
    ----> 1 pt.generate_plot(G)
    
    ~\Anaconda3\lib\site-packages\peartree\plot.py in generate_plot(G, use_agg)
         25     #       also plan on incorporating OSMnx into this library
         26     #       down the road so it isn't too extraneous an import.
    ---> 27     fig, ax = ox.plot_graph(G,
         28                             fig_height=12,
         29                             `show=False,`
    UnboundLocalError: local variable 'ox' referenced before assignment
    
    
    opened by Weiji-a 4
  • KeyError: 'GRAPH_TOOL_DIR'

    KeyError: 'GRAPH_TOOL_DIR'

    i have the following error, iยดm using python 3.6.


    KeyError Traceback (most recent call last) in () 1 from peartree.graph_tool import nx_to_gt 2 ----> 3 gtG = nx_to_gt(G.copy())

    ~/anaconda3/lib/python3.6/site-packages/peartree/graph_tool.py in nx_to_gt(nxG) 103 """ 104 # First, attempt to import graph-tool --> 105 gt = _import_graph_tool() 106 107 # Phase 0: Create a directed or undirected graph-tool Graph

    ~/anaconda3/lib/python3.6/site-packages/peartree/graph_tool.py in _import_graph_tool() 19 # If we fail to import it the first time, check to see if it 20 # has been downloaded in its default apt-get install directory ---> 21 sys.path.append(os.environ['GRAPH_TOOL_DIR']) 22 23 # Now retry with the new system path appended

    ~/anaconda3/lib/python3.6/os.py in getitem(self, key) 667 except KeyError: 668 # raise KeyError with the original key value --> 669 raise KeyError(key) from None 670 return self.decodevalue(value) 671

    KeyError: 'GRAPH_TOOL_DIR'

    opened by patsotoe 4
  • Compatibility issues peartree 0.6.0 - partridge 1.0.0

    Compatibility issues peartree 0.6.0 - partridge 1.0.0

    I believe peartree 0.6.0 and partridge 1.0.0 are incompatible, although it seems to import correctly with partridge 0.11.0. The solution is to either include an explicit number reference to the partridge library on install, or identify the problem.

    C:\WBG\anaconda3\envs\GOSTnet\lib\site-packages\peartree_init_.py in 
    
    from peartree.version import version # noqa: F401
         from peartree.paths import (
    load_feed_as_graph,
    get_representative_feed,
    
    C:\WBG\anaconda3\envs\GOSTnet\lib\site-packages\peartree\paths.py in 
    import partridge as ptg
         from .graph import (generate_empty_md_graph, generate_summary_graph_elements,
    make_synthetic_system_network, populate_graph)
    from .synthetic import SyntheticTransitNetwork
    
    C:\WBG\anaconda3\envs\GOSTnet\lib\site-packages\peartree\graph.py in 
    from .settings import WGS84
        from .summarizer import (generate_edge_and_wait_values,
    generate_summary_edge_costs, generate_summary_wait_times)
    
    C:\WBG\anaconda3\envs\GOSTnet\lib\site-packages\peartree\summarizer.py in 
    def generate_edge_and_wait_values(
        feed: ptg.feed,
        target_time_start: int,
        target_time_end: int,
    
    AttributeError: module 'partridge' has no attribute 'feed'
    
    bug good first issue 
    opened by bpstewar 4
  • Syntax error in parallel.py when importing peartree

    Syntax error in parallel.py when importing peartree

    Hi,

    I have this kind of error after using import peartree as pt

      File "C:\anaconda2\lib\site-packages\peartree\parallel.py", line 18
        target_time_start: int,
                         ^
    SyntaxError: invalid syntax
    

    Looks like some very basic problem, but I'm not very well in python :)

    opened by doman84 4
  • [performance] Trim stop_times before stop time interpolation

    [performance] Trim stop_times before stop time interpolation

    Stop time interpolation works on the entire stop_times df, majority of which will be tossed later based on given requested time range.

    Trimming down stop_times before passing it to the stop time interpolation step increases performance by a huge amount.

    Here are some evidence of the performance gain on the pt.paths.generate_summary_graph_elements step:

    gtfs id | current version | with trimming --|--|-- f-9q9-bart | 9.0s, 97 edges, 50 stops | 3.8s, 97 edges, 50 stops f-9q9-actransit | 132.0s, 5670 edges, 5050 stops | 59.8s, 5670 edges, 5050 stops f-9q8y-sfmta | 131.3s, 3806 edges, 3409 stops | 66.7s, 3806 edges, 3409 stops f-9qb-goldengatetransit | 10.6s, 519 edges, 473 stops | 7.5s, 519 edges, 473 stops f-9qc-fairfield~ca~us | 5.0s, 280 edges, 245 stops | 3.1s, 280 edges, 245 stops f-9qc0-soltrans~ca~us | 6.6s, 475 edges, 408 stops | 4.3s, 475 edges, 408 stops f-9qc-westcat~ca~us | 6.2s, 263 edges, 220 stops | 3.6s, 263 edges, 220 stops f-9-amtrak*** | 14.5s, 306 edges, 260 stops | 12.0s, 306 edges, 260 stops

    opened by yiyange 4
  • iteritems -> items: Fixing terminal spam

    iteritems -> items: Fixing terminal spam

    The library generates the following error, spamming my terminal:

    /home/user/.local/lib/python3.10/site-packages/peartree/graph.py:197: FutureWarning: iteritems is deprecated and will be removed in a future version. Use .items instead.
    

    This PR fixes this.

    opened by gutjuri 0
  • Fails to run generate_plot because of axis order changes needed

    Fails to run generate_plot because of axis order changes needed

    There is a new ordering for axis in pyproj that requires +init=<auth>:<auth_code> to be replaced with <auth>:<auth_code>

    Reference: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj

    Screen Shot 2021-10-31 at 12 40 48 PM

    I was planning on using this library for something but it keeps giving me errors so I will try looking for others

    opened by mSitkovets 0
  • option to add an attribute to graph edges that represents the number of trips that pass through an edge

    option to add an attribute to graph edges that represents the number of trips that pass through an edge

    I would like to have the option to add an attribute to graph edges that represents the number of trips that pass through an edge. This would be good for inspecting my GTFS data. I am making a pull request (#164) that adds this feature

    opened by d3netxer 0
  • Coalesce non-GTFS network

    Coalesce non-GTFS network

    Hello,

    When I try to use the coalesce function on a path network from OSM the following error is raised:

    KeyError                                  Traceback (most recent call last)
    c:\Users\arqui\Documents\Repositorios\Identifying urban zones with spectral clustering\coalesse_poa.py in 
          81     # network_type='walk'
          82 )
    ----> 83 Gc = pt.toolkit.coalesce(G, 400)
    
    ~\anaconda3\envs\ox\lib\site-packages\peartree\toolkit.py in coalesce(G_orig, resolution, edge_summary_method, boarding_cost_summary_method)
        216     # such that we won't generate isolated nodes that become disconnected
        217     # from key coalesced nodes (because too many intermediary nodes)
    --> 218     G = simplify_graph(G)
        219 
        220     # Extract all x, y values
    
    ~\anaconda3\envs\ox\lib\site-packages\peartree\toolkit.py in simplify_graph(G_orig)
        582         # If the path is not all one mode of travel, skip the
        583         # proposed simplification
    --> 584         if not _path_has_consistent_mode_type(G, path):
        585             continue
        586 
    
    ~\anaconda3\envs\ox\lib\site-packages\peartree\toolkit.py in _path_has_consistent_mode_type(G, path)
        364         for i in range(edge_count):
        365             edge = G.edges[u, v, i]
    --> 366             path_modes.append(edge['mode'])
        367     path_clear = all(x == path_modes[0] for x in path_modes)
        368     return path_clear
    
    KeyError: 'mode'
    

    Peartree version: 0.6.3 osmnx verson: 0.16.1

    It's possible to use this function on a network without GTFS information?

    opened by Ar-Kan 0
  • Multimodal graph linking not working?

    Multimodal graph linking not working?

    Hi again @kuanb,

    I continued digging around (see #124) and tested using the existing_graph -parameter to link walking and PT graphs together. I found that the stops around transit areas are connected together, but edges that would link stops to road network does not seem to work (as in the example below). Is this expected behavior?

    image

    The code that I used to produce the graph is:

    G = pt.load_feed_as_graph(feed, start, end, 
                                     walk_speed_kmph=walk_speed,
                                     impute_walk_transfers=False,
                                     use_multiprocessing=True,
                                     existing_graph=walk_graph)
    
    bug question 
    opened by HTenkanen 2
Releases(0.6.4)
  • 0.6.4(Jan 15, 2021)

    This release just addresses 2 reported issues:

    • OSMnx API had changed so the plotter was broken
    • There was a warning being emitted when using a mask operation in one of the graph analysis workflows
    Source code(tar.gz)
    Source code(zip)
  • 0.6.3(May 27, 2020)

    • Housekeeping upgrades for pandas, numpy, scipy
    • New attributes on nodes (modes at node as list)
    • Allow custom wait time as a parameter
    • Logger on coalesce function
    Source code(tar.gz)
    Source code(zip)
  • 0.6.2(Jul 15, 2019)

    • Reduce processed trip selection to only those within service times parameters (https://github.com/kuanb/peartree/commit/85daf756885b9e2afb87b98b72b35a01876d3c5c)
    • Wait time estimation ignores overweighting of zero values (https://github.com/kuanb/peartree/commit/e9b038f7b1fe3e6e1a60895841a00a076b441d5c)
    • Wait time estimation can account for service time start and end parameters (https://github.com/kuanb/peartree/commit/a9ef0bd4d13796ead921d9d575834e5fe6fa9e95)
    • Safer direction id handling (https://github.com/kuanb/peartree/commit/0c5073d8b62a49ea299e8e2c2df1369fc4dcb3ea)
    • More careful testing around single stop/arrival stop-schedule pairs (https://github.com/kuanb/peartree/commit/fbd32f1d971558f7f32530c99d43e7891b185b00)

    Note: Also included were the two changes included in v0.6.1 which failed to get a release on Github. Updates pertinent to that version are the following:

    • Auto detection of transfer points when ingesting custom transit line transitJSON
    • Pinning partridge dependency to >= 1.0.0 with new Feed class
    Source code(tar.gz)
    Source code(zip)
  • 0.6.0(Nov 1, 2018)

    • Update partridge dependency
    • Improved Docker container creation (support for graph-tool)
    • graph-tool export feature
    • Class-based transitJSON validation
    • Consolidate OSMnx dependency
    • Resolve CRS reset bug
    • Significant increase in documentation for library methods
    Source code(tar.gz)
    Source code(zip)
  • 0.5.1(Jul 28, 2018)

    • Handle when only on trip exists within the target time frame
    • Avoid errors related to no valid wait times being able to be parsed (due to single trip)
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Jul 16, 2018)

    • Reduce stop times calculations within route processing through timeframe trimming
    • Remove append operations on pandas DataFrames inside RouteProcessor
    • Overall 2/3 reduction in run time, on average, to process a new GTFS feed
    • Resolve direction ids being NaN only some of the time by dealing with direction id on a per-route level
    • Parallelization of intermediary stop times imputation
    Source code(tar.gz)
    Source code(zip)
  • 0.4.8(Jul 9, 2018)

  • 0.4.2(Jun 5, 2018)

  • 0.4.1(May 31, 2018)

    • Custom stop coordinates for synthetic routes
    • Drop duplicate edges during simplify operation
    • Updates to Makefile scripts
    • Assorted refactoring
    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Apr 22, 2018)

    • Refactor map operation for multiprocessing pool
    • MultiDiGraph to DiGraph converter
    • Simplify graph method
    • Refactor of coalesce to deal with lost edges problem
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Apr 1, 2018)

    • Parallelization of route segments processing
    • Fix log
    • Coalescing function to sumarize complex graphs
    • Graph re-projection
    • Fix absent wait times during bus stop processing
    • Bidirectional synthetic networks
    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Mar 6, 2018)

    • Improved layering of multiple feeds correctly on top of one another
    • Support synthetic new route addition, bidirectionality
    • Bug fixes: directionality, better connector edges, node id naming, refactor of edge generators
    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Nov 24, 2017)

  • v0.1.0(Nov 21, 2017)

Owner
Kuan Butts
@mapbox Prev @CalthorpeAnalytics, @codeforamerica, @microsoftny, @mit, @urbanlaunchpad.
Kuan Butts
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 4, 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
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
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
Stitch image tiles into larger composite TIFs

untiler Utility to take a directory of {z}/{x}/{y}.(jpg|png) tiles, and stitch into a scenetiff (tif w/ exact merc tile bounds). Future versions will

Mapbox 38 Dec 16, 2022
prettymaps - A minimal Python library to draw customized maps from OpenStreetMap data.

A small set of Python functions to draw pretty maps from OpenStreetMap data. Based on osmnx, matplotlib and shapely libraries.

Marcelo de Oliveira Rosa Prates 9k Jan 8, 2023
Manipulation and analysis of geometric objects

Shapely Manipulation and analysis of geometric objects in the Cartesian plane. Shapely is a BSD-licensed Python package for manipulation and analysis

null 3.1k Jan 3, 2023
scalable analysis of images and time series

thunder scalable analysis of image and time series analysis in python Thunder is an ecosystem of tools for the analysis of image and time series data

thunder-project 813 Dec 29, 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 1, 2023
leafmap - A Python package for geospatial analysis and interactive mapping in a Jupyter environment.

A Python package for geospatial analysis and interactive mapping with minimal coding in a Jupyter environment

Qiusheng Wu 1.4k Jan 2, 2023
Open Data Cube analyses continental scale Earth Observation data through time

Open Data Cube Core Overview The Open Data Cube Core provides an integrated gridded data analysis environment for decades of analysis ready earth obse

Open Data Cube 410 Dec 13, 2022
A public data repository for datasets created from TransLink GTFS data.

TransLink Spatial Data What: TransLink is the statutory public transit authority for the Metro Vancouver region. This GitHub repository is a collectio

Henry Tang 3 Jan 14, 2022
Using Global fishing watch's data to build a machine learning model that can identify illegal fishing and poaching activities through satellite and geo-location data.

Using Global fishing watch's data to build a machine learning model that can identify illegal fishing and poaching activities through satellite and geo-location data.

Ayush Mishra 3 May 6, 2022
Geocoding library for Python.

geopy geopy is a Python client for several popular geocoding web services. geopy makes it easy for Python developers to locate the coordinates of addr

geopy 3.8k Dec 30, 2022
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

null 832 Dec 31, 2022
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

null 832 Dec 31, 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
Python library to decrypt Airtag reports, as well as a InfluxDB/Grafana self-hosted dashboard example

Openhaystack-python This python daemon will allow you to gather your Openhaystack-based airtag reports and display them on a Grafana dashboard. You ca

Bezmenov Denys 19 Jan 3, 2023
Hapi is a Python library for building Conceptual Distributed Model using HBV96 lumped model & Muskingum routing method

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

Mostafa Farrag 15 Dec 26, 2022