Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Core algorithm review

Tim Welch edited this page Aug 10, 2021 · 7 revisions

Previous implementation

Given shapefile, outputs a new shapefile and raster

For each vector feature class:

  • reproject to 3857 if needed
  • if point data, buffer -> output_data feature class
  • if polygon data, CopyFeatures(reprojected_data) -> output_data feature class
  • add sap field to output_data
  • for each feature in output_data
    • calculate sap and update feature
      • get area of feature - (bracket lower at 10_000 min)
      • sap = weight / area (bracket lower at 500 min why?)
    • for each row in output_data
      • create fishing_lyr in-memory FeatureLayer
      • RepairGeometry(fishing_lyr)
      • create raster with sap cell value
      • add to list of rasters
    • merge results into outCellStats - CellStatistics - calculate sum per-cell across entire list of raster rasters
    • Clip outCellStats to user-defined clipping bounds

Questions

  • Why reproject to 3857 Web Mercator up-front? Is the varied area of each cell a problem?
    • Units are meters, allowing user to specify cell size in meters.
    • Web Mercator is ultimately used to display the rasters
    • As long as the study area is relatively small (how small?), the difference in area per cell across the extent of that study area will be minimal (how minimal?).
  • Why is area set to min of 10_000?
  • Why is sap set to min of 500?
  • Why is the user-defined clipping bounds needed?

Performance improvement opportunities

  • don't generate all the intermediate rasters, one per feature, use burn-in algorithm
  • separate core module that kicks off the actual heatmap jobs, one per processor (local) or one per Lambda
  • use MemoryFile if within memory limits
  • bucket features and use windowed process to parallelize (or create separate rasters and merge)

Clone this wiki locally