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
A modern, geometric typeface by @chrismsimpson (last commit @ 85fa625 Jun 9, 2020 before deletion)

Metropolis A modern, geometric typeface. Influenced by other popular geometric, minimalist sans-serif typefaces of the new millenium. Designed for opt

Darius 183 Dec 25, 2022
r.cfdtools 7 Dec 28, 2022
Specification for storing geospatial vector data (point, line, polygon) in Parquet

GeoParquet About This repository defines how to store geospatial vector data (point, lines, polygons) in Apache Parquet, a popular columnar storage fo

Open Geospatial Consortium 449 Dec 27, 2022
Wraps GEOS geometry functions in numpy ufuncs.

PyGEOS PyGEOS is a C/Python library with vectorized geometry functions. The geometry operations are done in the open-source geometry library GEOS. PyG

362 Dec 23, 2022
Record railway train route profile with GNSS tools

Train route profile recording with GNSS technology based on ARDUINO platform Project target Develop GNSS recording tools based on the ARDUINO platform

tomcom 1 Jan 01, 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

832 Dec 31, 2022
A GUI widget for Linux to show current time in different timezones.

A GUI widget to show current time in different timezones (under development). To use this widget: Run scripts/startup.py Select a country. A list of t

B.Jothin kumar 11 Nov 10, 2022
Geospatial Image Processing for Python

GIPPY Gippy is a Python library for image processing of geospatial raster data. The core of the library is implemented as a C++ library, libgip, with

GIPIT 83 Aug 19, 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
Read images to numpy arrays

mahotas-imread: Read Image Files IO with images and numpy arrays. Mahotas-imread is a simple module with a small number of functions: imread Reads an

Luis Pedro Coelho 67 Jan 07, 2023
FDTD simulator that generates s-parameters from OFF geometry files using a GPU

Emport Overview This repo provides a FDTD (Finite Differences Time Domain) simulator called emport for solving RF circuits. Emport outputs its simulat

4 Dec 15, 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
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
Raster processing benchmarks for Python and R packages

Raster processing benchmarks This repository contains a collection of raster processing benchmarks for Python and R packages. The tests cover the most

Krzysztof Dyba 13 Oct 24, 2022
Python project to generate Kerala's distrcit level panchayath map.

Kerala-Panchayath-Maps Python project to generate Kerala's distrcit level panchayath map. As of now, geojson files of Kollam and Kozhikode are added t

Athul R T 2 Jan 10, 2022
A compilation of several single-beam bathymetry surveys of the Caribbean

Caribbean - Single-beam bathymetry This dataset is a compilation of several single-beam bathymetry surveys of the Caribbean ocean displaying a wide ra

Fatiando a Terra Datasets 0 Jan 20, 2022
Blender addons to make the bridge between Blender and geographic data

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

5.9k Jan 02, 2023
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
Construct and use map tile grids in different projection.

Morecantile +-------------+-------------+ ymax | | | | x: 0 | x: 1 | | y: 0 | y: 0

Development Seed 67 Dec 23, 2022
Obtain a GNSS position fix from an 11-millisecond raw GNSS signal snapshot

Obtain a GNSS position fix from an 11-millisecond raw GNSS signal snapshot without any prior knowledge about the position of the receiver and only coarse knowledge about the time.

Jonas Beuchert 2 Nov 17, 2022