Single process GIS support
Opened this issue · 0 comments
Provide support for GIS on a single process, in a way that is similar to the RepastS Geography projection. Single-process GIS will come with the caveat that the Geography won't automatically move agents across process and should only be used on a 0-rank model.
At minimum, this should include:
- Geography projection or container
- Add / move / remove agent - geography pairs to the geography
- Get agent geometry from Geography
- Spatial index in geography for spatial queries of objects within bounding box
- Coordinate Reference System (CRS) support in Geography
- Shapefile loading and/or agent-factory from shapefile feature data
Python packages for implementation:
-
Shapely - provides JTS-style geometry classes (Point, Line, Polygon) and spatial functions like intersect, distance, etc.
-
fiona - Shapefile loading in a way that supports generating Shapely geometries
-
pyproj - CRS projection types and transforms
-
rtree - spatial indexing
-
GeoPy for geodetic (distance) calculations
-
RasterIO for read/write raster data
-
U. of C. spatial data group suggested hierarchical spatial data formats: "h3", "s2" -- https://h3geo.org/
-
GeoPandas provides a lot of the functionality we had in GeoTools (I/O, space predicates, CRS, etc), however the data are stored in a geo dataframe (pandas) and we suspect not suitable for frequent inserts/deletions of agents. Since the pandas dataframes leverage numpy and C++ under the hood for speed, we might be able to use the dataframe as the space’s agent-geometry mapping – assuming that’s compatible with the repast4py projections.