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
iNaturalist observations along hiking trails

This tool reads the route of a hike and generates a table of iNaturalist observations along the trails. It also shows the observations and the route of the hike on a map. Moreover, it saves waypoints

7 Nov 11, 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
Interactive Maps with Geopandas

Create Interactive maps 🗺️ with your geodataframe Geopatra extends geopandas for interactive mapping and attempts to wrap the goodness of amazing map

sangarshanan 46 Aug 16, 2022
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
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
Color correction plugin for rasterio

rio-color A rasterio plugin for applying basic color-oriented image operations to geospatial rasters. Goals No heavy dependencies: rio-color is purpos

Mapbox 111 Nov 15, 2022
gjf: A tool for fixing invalid GeoJSON objects

gjf: A tool for fixing invalid GeoJSON objects The goal of this tool is to make it as easy as possible to fix invalid GeoJSON objects through Python o

Yazeed Almuqwishi 91 Dec 06, 2022
A short term landscape evolution using a path sampling method to solve water and sediment flow continuity equations and model mass flows over complex topographies.

r.sim.terrain A short-term landscape evolution model that simulates topographic change for both steady state and dynamic flow regimes across a range o

Brendan Harmon 7 Oct 21, 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
A proof-of-concept jupyter extension which converts english queries into relevant python code

Text2Code for Jupyter notebook A proof-of-concept jupyter extension which converts english queries into relevant python code. Blog post with more deta

DeepKlarity 2.1k Dec 29, 2022
Spatial Interpolation Toolbox is a Python-based GUI that is able to interpolate spatial data in vector format.

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

Michael Ward 2 Nov 01, 2021
r.cfdtools 7 Dec 28, 2022
Python Data. Leaflet.js Maps.

folium Python Data, Leaflet.js Maps folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the Leaflet.js

6k Jan 02, 2023
geobeam - adds GIS capabilities to your Apache Beam and Dataflow pipelines.

geobeam adds GIS capabilities to your Apache Beam pipelines. What does geobeam do? geobeam enables you to ingest and analyze massive amounts of geospa

Google Cloud Platform 61 Nov 08, 2022
User friendly Rasterio plugin to read raster datasets.

rio-tiler User friendly Rasterio plugin to read raster datasets. Documentation: https://cogeotiff.github.io/rio-tiler/ Source Code: https://github.com

372 Dec 23, 2022
A simple reverse geocoder that resolves a location to a country

Reverse Geocoder This repository holds a small web service that performs reverse geocoding to determine whether a user specified location is within th

4 Dec 25, 2021
EOReader is a multi-satellite reader allowing you to open optical and SAR data.

Remote-sensing opensource python library reading optical and SAR sensors, loading and stacking bands, clouds, DEM and index.

ICube-SERTIT 152 Dec 30, 2022
Enable geospatial data mining through Google Earth Engine in Grasshopper 3D, via its most recent Hops component.

AALU_Geo Mining This repository is produced for a masterclass at the Architectural Association Landscape Urbanism programme. Requirements Rhinoceros (

4 Nov 16, 2022
Use Mapbox GL JS to visualize data in a Python Jupyter notebook

Location Data Visualization library for Jupyter Notebooks Library documentation at https://mapbox-mapboxgl-jupyter.readthedocs-hosted.com/en/latest/.

Mapbox 620 Dec 15, 2022
ColoringMapAlgorithm-CSP- - Graphical Coloring of Countries with Condition Satisfaction Algorithm

ColoringMapAlgorithm-CSP- Condition Satisfaction Algorithm Output Condition

Kerem TAN 2 Jan 10, 2022