Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Distributed GIS Support #42

Open
etatara opened this issue Jul 31, 2023 · 0 comments
Open

Distributed GIS Support #42

etatara opened this issue Jul 31, 2023 · 0 comments
Assignees
Labels
enhancement New feature or request

Comments

@etatara
Copy link
Member

etatara commented Jul 31, 2023

Support GIS / geographic projections in a distributed (multi-process) space in a way that is similar to the existing spatial projections, that supports automatic moving of agents across ranks, ghosting, etc. API should attempt to closely align with the single-process Geography API (#41).

  • How to partition. Every partition would have the knowledge about the global partitioning AND features that were split up based on the partitioning.
  • There are at least two types of split features:
    • Auto ghost, where we want to understand agent presence in them, so if an agent enters in one partition, they are automatically ghosts in the other partitions.
    • Non-auto ghost features
  • Queries originating on partitions will be of 2 types:
    • Within the buffer of the partition
    • Outside of the buffer, where the global map would be used to understand to which partitions the spatial queries should be sent

Beyond partitioning, importance of inputting/outputting shapefiles, and CRS generalization beyond what we do for RS.

Also NC - search for multi-process GIS ABM prior work. Vague memory of reviewing some.

How to partition global space if some features extend over boundaries?

  • For static features (e.g., roads) could create new geometry by intersecting with area controlled by specific rank.
  • For dynamic features, buffer big enough to hold full feature size. What if size is very large?

Implementation Ideas:

  • GEOS (https://libgeos.org/) seems to be the best choice on the C++ side. The Shapely python library uses GEOS, so the underlying geometry API is similar. And GEOS also supports geography operations and spatial indexing, so if we store the agent/geometries entirely on the C++ side, we may end up with an architecture that is close to the existing repast4py space projections.
  • We'll probably want to use python for data loading and projection transforms, so the single process API (Single process GIS support #41) can support this through fiona and pyproj.
@etatara etatara added the enhancement New feature or request label Jul 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants