From d7b5a89a5eceaa4d014342e58ab4dd9498090c13 Mon Sep 17 00:00:00 2001 From: JORGE Date: Wed, 11 Jun 2025 16:14:57 -0400 Subject: [PATCH 1/4] [TM-2139] add centroid data for site polygons --- .../src/site-polygons/dto/site-polygon.dto.ts | 22 +++++++++++++++++-- .../site-polygon-query.builder.ts | 13 ++++++++++- .../lib/entities/polygon-geometry.entity.ts | 10 ++++++++- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts b/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts index 8740b197..77bb8649 100644 --- a/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts +++ b/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts @@ -57,7 +57,9 @@ export class SitePolygonLightDto extends HybridSupportDto { projectShortName: sitePolygon.site?.project?.shortName, indicators: indicators ?? [], siteName: sitePolygon.site?.name, - lightResource: true + lightResource: true, + centroidLatitude: sitePolygon.polygon?.centroidLatitude ?? null, + centroidLongitude: sitePolygon.polygon?.centroidLongitude ?? null }); } } @@ -87,6 +89,20 @@ export class SitePolygonLightDto extends HybridSupportDto { @ApiProperty({ nullable: true, type: Number }) calcArea: number | null; + @ApiProperty({ + nullable: true, + type: Number, + description: "Latitude of the polygon's centroid, computed using PostGIS ST_Centroid" + }) + centroidLatitude: number | null; + + @ApiProperty({ + nullable: true, + type: Number, + description: "Longitude of the polygon's centroid, computed using PostGIS ST_Centroid" + }) + centroidLongitude: number | null; + @ApiProperty({ type: "array", items: { @@ -127,7 +143,9 @@ export class SitePolygonFullDto extends SitePolygonLightDto { geometry: sitePolygon.polygon?.polygon, establishmentTreeSpecies: establishmentTreeSpecies ?? [], reportingPeriods: reportingPeriods ?? [], - lightResource: false + lightResource: false, + centroidLatitude: sitePolygon.polygon?.centroidLatitude ?? null, + centroidLongitude: sitePolygon.polygon?.centroidLongitude ?? null }); } diff --git a/apps/research-service/src/site-polygons/site-polygon-query.builder.ts b/apps/research-service/src/site-polygons/site-polygon-query.builder.ts index 8a4e7c57..e8b27430 100644 --- a/apps/research-service/src/site-polygons/site-polygon-query.builder.ts +++ b/apps/research-service/src/site-polygons/site-polygon-query.builder.ts @@ -53,7 +53,18 @@ export class SitePolygonQueryBuilder extends PaginatedQueryBuilder constructor(pageSize?: number) { super(SitePolygon, pageSize); - this.findOptions.include = [{ model: PolygonGeometry, attributes: ["polygon"], required: true }, this.siteJoin]; + this.findOptions.include = [ + { + model: PolygonGeometry, + attributes: [ + "polygon", + [literal("ST_Y(ST_Centroid(geom))"), "centroidLatitude"], + [literal("ST_X(ST_Centroid(geom))"), "centroidLongitude"] + ], + required: true + }, + this.siteJoin + ]; this.where({ isActive: true }); } diff --git a/libs/database/src/lib/entities/polygon-geometry.entity.ts b/libs/database/src/lib/entities/polygon-geometry.entity.ts index 89455b75..bbc0c3ca 100644 --- a/libs/database/src/lib/entities/polygon-geometry.entity.ts +++ b/libs/database/src/lib/entities/polygon-geometry.entity.ts @@ -1,5 +1,5 @@ import { AllowNull, AutoIncrement, Column, ForeignKey, Index, Model, PrimaryKey, Table } from "sequelize-typescript"; -import { BIGINT, GEOMETRY, UUID, UUIDV4 } from "sequelize"; +import { BIGINT, GEOMETRY, UUID, UUIDV4, DOUBLE } from "sequelize"; import { Polygon } from "geojson"; import { User } from "./user.entity"; @@ -18,6 +18,14 @@ export class PolygonGeometry extends Model { @Column({ type: GEOMETRY, field: "geom" }) polygon: Polygon; + @AllowNull + @Column({ type: DOUBLE }) + centroidLatitude: number | null; + + @AllowNull + @Column({ type: DOUBLE }) + centroidLongitude: number | null; + @ForeignKey(() => User) @AllowNull @Column(BIGINT.UNSIGNED) From b6e75a339bc697c3dbc90d5284c192ab365dd008 Mon Sep 17 00:00:00 2001 From: JORGE Date: Tue, 17 Jun 2025 15:36:21 -0400 Subject: [PATCH 2/4] [TM-2139] add centroids and polygonUuid --- .../src/site-polygons/dto/site-polygon.dto.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts b/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts index 77bb8649..7624c5d5 100644 --- a/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts +++ b/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts @@ -1,4 +1,4 @@ -import { populateDto } from "@terramatch-microservices/common/dto/json-api-attributes"; +import { populateDto, AdditionalProps } from "@terramatch-microservices/common/dto/json-api-attributes"; import { JsonApiDto } from "@terramatch-microservices/common/decorators"; import { ApiProperty } from "@nestjs/swagger"; import { HybridSupportDto } from "@terramatch-microservices/common/dto/hybrid-support.dto"; @@ -77,6 +77,13 @@ export class SitePolygonLightDto extends HybridSupportDto { }) siteId: string | null; + @ApiProperty({ + description: "UUID of the associated polygon geometry", + nullable: true, + type: String + }) + polygonUuid: string | null; + @ApiProperty({ nullable: true, type: String }) projectId?: string; From 64fbec779c3023c435a726f685d331b25ee05e52 Mon Sep 17 00:00:00 2001 From: JORGE Date: Wed, 18 Jun 2025 15:14:42 -0400 Subject: [PATCH 3/4] [TM-2139] remove unused variable --- apps/research-service/src/site-polygons/dto/site-polygon.dto.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts b/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts index 7624c5d5..8ceb6c83 100644 --- a/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts +++ b/apps/research-service/src/site-polygons/dto/site-polygon.dto.ts @@ -1,4 +1,4 @@ -import { populateDto, AdditionalProps } from "@terramatch-microservices/common/dto/json-api-attributes"; +import { populateDto } from "@terramatch-microservices/common/dto/json-api-attributes"; import { JsonApiDto } from "@terramatch-microservices/common/decorators"; import { ApiProperty } from "@nestjs/swagger"; import { HybridSupportDto } from "@terramatch-microservices/common/dto/hybrid-support.dto"; From 6f87ce970a4d29e17aaad3483388b6640896204e Mon Sep 17 00:00:00 2001 From: JORGE Date: Thu, 19 Jun 2025 09:50:00 -0400 Subject: [PATCH 4/4] [TM-2139] remove required geometry --- .../src/site-polygons/site-polygon-query.builder.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/research-service/src/site-polygons/site-polygon-query.builder.ts b/apps/research-service/src/site-polygons/site-polygon-query.builder.ts index e8b27430..b9d97012 100644 --- a/apps/research-service/src/site-polygons/site-polygon-query.builder.ts +++ b/apps/research-service/src/site-polygons/site-polygon-query.builder.ts @@ -60,8 +60,7 @@ export class SitePolygonQueryBuilder extends PaginatedQueryBuilder "polygon", [literal("ST_Y(ST_Centroid(geom))"), "centroidLatitude"], [literal("ST_X(ST_Centroid(geom))"), "centroidLongitude"] - ], - required: true + ] }, this.siteJoin ];