An AWS implementation of CODEM, a tool for 3D data coregistration.
CODEM spatially solves and applies a six or seven degree of freedom transformation to register a 3D area of interest (AoI) dataset to a 3D foundation dataset. The AoI and foundation datasets can be a digital surface model (DSM), point cloud, or mesh product. Refer to CODEM's documentation for supported formats.
flowchart LR
trigger("S3<br>(aoi-trigger)")-- event -->sqs("SQS")
api("API<br>Gateway")-- post -->sqs
sqs-->lambda("Lambda")
lambda-->result("S3<br>(registered)")
data("STAC API<br>(USGS 3DEP)<br><br>S3<br>(aoi)<br>(foundation)")-->lambda
You will need cdk installed and bootstrapped.
-
Populate the
bucket_prefix
field in thecontext
object in the cdk.json file. The prefix is used to create simple s3 bucket names (as opposed to the complex default names assigned by CloudFormation) to ease data transfer via the AWS CLI. The bucket names will be::- <bucket_prefix>-aoi
- <bucket_prefix>-aoi-trigger
- <bucket_prefix>-foundation
- <bucket_prefix>-registered
-
Run
cdk deploy --outputs-file cdk-outputs.json
.- The physical names of the buckets and the API URL will be output to the terminal and saved to the
cdk-outputs.json
file. - Note that you must append
coregister
to the API URL when making a coregister API call.
- The physical names of the buckets and the API URL will be output to the terminal and saved to the
There are two ways to kick off a cloud-coreg
run:
-
Simple: Copy an AoI file to the trigger bucket.
Copy an AoI file to the
<bucket_prefix>-aoi-trigger
bucket. This will pull foundation data from the Planetary Computer's USGS 3DEP digital surface model holdings and run CODEM with all parameters set to their defaults.$ aws s3 cp tests/data/AOI-DigitalSurfaceModel.tif s3://myprefix-aoi-trigger
-
Flexible: Make an API call with optional parameters.
Upload an AoI file to the
<bucket_prefix>-aoi
bucket. Optionally upload a Foundation file to the<bucket_prefix>-foundation
bucket. POST a message to the API Gateway.$ aws s3 cp tests/data/0_smallfnd.tif s3://myprefix-foundation $ aws s3 cp tests/data/1_smallAOI.tif s3://myprefix-aoi % curl -X POST -H "Content-Type: application/json" -d '{"fndFile": "0_smallfnd.tif", "aoiFile": "1_smallAOI.tif"}' https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/test/coregister # { "Enqueued": "True" }%
Valid message parameters are:
aoiFile
: Name of a file in the<bucket_prefix>-aoi
bucket. (required)fndFile
: Name of a file in the<bucket_prefix>-foundation
bucket. If not supplied, foundation data will be pulled from the Planetary Computer's USGS 3DEP DSM holdings. (optional)fndBufferFactor
: Factor by which to scale the AoI boundary when cropping the Foundation data. Accounts for existing mis-registration between the AoI and Foundation data. [default=2] (optional)codemMinResolution
: CODEM's minimum resolution (in meters) parameter. [default=2] (optional)codemSolveScale
: CODEM's solve scale parameter. [default=True] (optional)
In both cases the registered AoI will be saved to the <bucket_prefix>-registered
bucket in a directory named <aoi_file_name>-registered-<timestamp>
. For example, if you ran a coregistration with the AOI-DigitalSurfaceModel.tif file, you can see the created directory by listing the contents of the registered bucket:
$ aws s3 ls s3://myprefix-registered
# PRE AOI-DigitalSurfaceModel-registered-2023-02-05_13-14-52/
$ aws s3 ls s3://myprefix-registered/AOI-DigitalSurfaceModel-registered-2023-02-05_13-14-52/
# 2023-02-05 08:15:01 735778 AOI-DigitalSurfaceModel_registered.tif
# 2023-02-05 08:15:01 546 config.yml
# 2023-02-05 08:15:01 497805 dsm_feature_matches.png
# 2023-02-05 08:15:01 1228 registration.txt
Copy the results to a local directory:
$ aws s3 cp --recursive s3://myprefix-registered/AOI-DigitalSurfaceModel-registered-2023-02-05_13-14-52/ ./results
# download: s3://myprefix-registered/AOI-DigitalSurfaceModel-registered-2023-02-05_13-14-52/registration.txt to results/registration.txt
# download: s3://myprefix-registered/AOI-DigitalSurfaceModel-registered-2023-02-05_13-14-52/config.yml to results/config.yml
# download: s3://myprefix-registered/AOI-DigitalSurfaceModel-registered-2023-02-05_13-14-52/dsm_feature_matches.png to results/dsm_feature_matches.png
# download: s3://myprefix-registered/AOI-DigitalSurfaceModel-registered-2023-02-05_13-14-52/AOI-DigitalSurfaceModel_registered.tif to results/AOI-DigitalSurfaceModel_registered.tif