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
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 08, 2023
Extract GoPro highlights and GPMF data.

Python script that parses the gpmd stream for GOPRO moov track (MP4) and extract the GPS info into a GPX (and kml) file.

Chris Auron 2 May 13, 2022
Imperial Valley Geomorphology Map

Roughly maps the extent of basins, basin edges, and mountains in the Imperial Valley by grouping terrain classes from the Iwahashi et al. 2021 California terrian classification model.

0 Dec 13, 2022
GebPy is a Python-based, open source tool for the generation of geological data of minerals, rocks and complete lithological sequences.

GebPy is a Python-based, open source tool for the generation of geological data of minerals, rocks and complete lithological sequences. The data can be generated randomly or with respect to user-defi

Maximilian Beeskow 16 Nov 29, 2022
A simple python script that, given a location and a date, uses the Nasa Earth API to show a photo taken by the Landsat 8 satellite. The script must be executed on the command-line.

What does it do? Given a location and a date, it uses the Nasa Earth API to show a photo taken by the Landsat 8 satellite. The script must be executed

Caio 42 Nov 26, 2022
Calculate the area inside of any GeoJSON geometry. This is a port of Mapbox's geojson-area for Python

geojson-area Calculate the area inside of any GeoJSON geometry. This is a port of Mapbox's geojson-area for Python. Installation $ pip install area U

Alireza 87 Dec 14, 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
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
Tool to display your current position and angle above your radar

๐Ÿ›  Tool to display your current position and angle above your radar. As a response to the CS:GO Update on 1.2.2022, which makes cl_showpos a cheat-pro

Miko 6 Jan 04, 2023
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
WIP: extracting Geometry utilities from datacube-core

odc.geo This is still work in progress. This repository contains geometry related code extracted from Open Datacube. For details and motivation see OD

Open Data Cube 34 Jan 09, 2023
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
Water Detect Algorithm

WaterDetect Synopsis WaterDetect is an end-to-end algorithm to generate open water cover mask, specially conceived for L2A Sentinel 2 imagery from MAJ

142 Dec 30, 2022
A Django application that provides country choices for use with forms, flag icons static files, and a country field for models.

Django Countries A Django application that provides country choices for use with forms, flag icons static files, and a country field for models. Insta

Chris Beaven 1.2k Jan 03, 2023
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
Expose a GDAL file as a HTTP accessible on-the-fly COG

cogserver Expose any GDAL recognized raster file as a HTTP accessible on-the-fly COG (Cloud Optimized GeoTIFF) The on-the-fly COG file is not material

Even Rouault 73 Aug 04, 2022
Advanced raster and geometry manipulations

buzzard In a nutshell, the buzzard library provides powerful abstractions to manipulate together images and geometries that come from different kind o

Earthcube Lab 30 Jun 20, 2022
A library to access OpenStreetMap related services

OSMPythonTools The python package OSMPythonTools provides easy access to OpenStreetMap (OSM) related services, among them an Overpass endpoint, Nomina

Franz-Benjamin Mocnik 342 Dec 31, 2022
pure-Python (Numpy optional) 3D coordinate conversions for geospace ecef enu eci

Python 3-D coordinate conversions Pure Python (no prerequistes beyond Python itself) 3-D geographic coordinate conversions and geodesy. API similar to

Geospace code 292 Dec 29, 2022
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