Coder Social home page Coder Social logo

philipbelesky / caribou Goto Github PK

View Code? Open in Web Editor NEW
22.0 3.0 2.0 13.22 MB

Caribou is a Grasshopper plugin for parsing downloaded Open Street Map data into Rhino geometry. Caribou is currently in beta.

License: GNU Lesser General Public License v3.0

C# 98.68% Python 1.32%
grasshopper3d grasshopper-plugin osm open-street-map

caribou's Introduction

Caribou Logo

Caribou

Build Action Test Action Maintainability Codacy Badge

Caribou is a Grasshopper plugin for parsing downloaded Open Street Map data into Rhino geometry. Caribou is currently in an beta state, but core functionality should be stable.

Installation

Caribou is available to download via the Rhino Package Manager (search "Caribou") or on Food4Rhino.

Documentation & Support

Caribou's documentation lives on this website and on YouTube.

Support can be requested, or feedback provided, by opening a discussion on GitHub. Issues and pull-requests are encouraged.

Features

  • ✅ Windows and MacOS are both fully supported
  • ✅ Very fast parsing of even very large files
  • ✅ Data-rich GUI interface provided for understanding and filtering OSM metadata
  • ✅ Parsing is performed asynchronously so Grasshopper remains responsive
  • ✅ Parse multiple OSM files simultaneously with de-duplication of geometry
  • ✅ Allows for querying for arbitrary data outside of the primary OSM features/sub-features taxonomy
  • ✅ Outputs are tree-formatted and organised per data-type to allow for downstream filtering, tagging, baking, etc

Roadmap

  • 🕘 Further speed optimisations
  • 🕘 Component to help construct queries for arbitrary metadata
  • 🕘 Parsing of <relation> type data
  • 🕘 Integration with Rhino's EarthAnchorPoint
  • 🕘 Customisable projection methods

Changelog

See CHANGELOG.md.

Recognition

Thanks to:

caribou's People

Contributors

dependabot[bot] avatar philipbelesky avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

caribou's Issues

Add proper geoprojection support

Pickup/rework earlier efforts to use geolibrary or similar to handle the translation from lat/lon to X/Y space with the option to specify a projection standard. At the same time, integration with Rhino's EarthAnchorPoint would provide value (including an elevation specification?).

Indicate in the Selection UI when a feature is unchecked but one of its subfeatures is

When doing fine-grained feature extraction, you often select a subfeature or set of subfeatures. However, when all the features are collapsed in the UI, there is no indicator of which features have subfeature selections. Another column could be added to that UI to track/indicate these cases. This could be a simple radio-style indicator, or could perhaps count the number of selections.

Consider mapbox/google API integrations

Mapbox and Google Maps' API would likely provide better data than OSM, particularly for data such as building heights. They would also offer the option to do terrain imports.

3d Buildings dont show

Hi great plugin
it's my first time working with thisplugin but i can't make buildings show up in canvas, and the progress bar in grasshopper stay stud at 99.06%
when i add the buildings the data dont show u
building
p

Problem with extracting buildings

Hi, i faced with a problem while making gh definition.

I'm using "extract ways" node to extrude building, but I found, that it didn't extract all buildings from file.
For sure I opened same file in QGIS and missing buildings was there.

So I'm wandering where is problem (I tried to select all features for node, didn't help)

(img1 after adding missing buildings)
(img2 after baking definition)

photo_2022-02-16 16 18 12
photo_2022-02-16 16 18 05

Consider component for extracting/filtering information

Often you would want to do further filtering upon the data extracted from the Nodes/Ways/Buildings components. This might include filtering based on more precise metadata that is not in the defined features/subfeatures list. It also might include filtering by particular metadata ranges, e.g. surface is asphalt or concrete; maxspeed<=50`. This can be achieved with standard Grasshopper components, per the examples file, but is cumbersome.

A dedicated component could also provide better affordances, such as providing a Selection-Component-like UI to list all possible metadata that could be the basis of further filtering.

Optimise parsing process/calculation

From benchmarks, most of the work done in the component is in parsing through the XML file rather than in geometry creation. This is particularly noticeable in the Way component given it must traverse all Node and Way types. Options for improvement could include

  • For Way parsing: walk through the way nodes first, then route back to the nodes for faster checking if they are relevant
  • Multi-threading the walk through nodes
  • Micro-optimisations within the loop structures
  • Hybridising between the different processor approaches (e.g. Ling and XMLDoc) to use each for what it is fastest at
  • Skip duplication checks if only parsing a single XML file
  • Translating from latlon to XY with some sort of mass vector transformation

Add parsing of relation data types

For many geometries/entities in a map, the meta-data is attached to the relation grouping rather than to the nodes or ways. E.g. this map depicts a pier structure made up of two ways; however those ways are tag-less so they don't show up when parsed with the Ways Component.

The current parsers could relatively easily pickup these relations, but it is unclear how to handle their metadata outputs given the existing structure. At a minimum, they could work within the existing structure by just assigning all tags from the relation to the ways (in effect duplicating them).

That naïve option strips any relationship between the child-ways/nodes and is complicated by structures such as multipolygons. A more thorough rework would be to reconfigure the tree structure to add another level of depth for the relation. E.g. {query, relation, geometry|metadata} rather than just {query, geometry|metadata}.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.