From d41ac3c094f733a8038885de3400ed7558b2b878 Mon Sep 17 00:00:00 2001 From: Petri Hienonen Date: Fri, 14 Nov 2025 11:47:49 +0200 Subject: Minor tuning --- app/models.js | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) (limited to 'app/models.js') diff --git a/app/models.js b/app/models.js index 8cd1b5e..b4584f7 100644 --- a/app/models.js +++ b/app/models.js @@ -238,11 +238,17 @@ export class Geospatial { * @param {number} [schoolDistance] * @param {number} [railwayDistance] */ - constructor(marketDistance = 0, schoolDistance = 0, railwayDistance = 0) { + constructor( + marketDistance = Number.POSITIVE_INFINITY, + schoolDistance = Number.POSITIVE_INFINITY, + railwayDistance = Number.POSITIVE_INFINITY, + ) { this.marketDistance = marketDistance; this.schoolDistance = schoolDistance; this.railwayDistance = railwayDistance; - // Removed: crimeRate, safetyIndex, s2StudentRatio + this.distanceTrain = Number.POSITIVE_INFINITY; + this.distanceLightRail = Number.POSITIVE_INFINITY; + this.distanceTram = Number.POSITIVE_INFINITY; } /** @param {GeospatialJson} data @returns {Geospatial} */ @@ -538,6 +544,8 @@ export class House { * @param {Scores} scores * @param {string[]} images * @param {Geospatial} [geospatial] + * @param {StatisticalArea|null} statisticalArea + * @param {string} url */ constructor( id, @@ -563,6 +571,9 @@ export class House { images = [], geospatial = new Geospatial(), value = 0, + statisticalArea = null, + url = "", + pricePerSqm = 0, ) { this.id = id; this.address = address; @@ -587,10 +598,9 @@ export class House { this.images = images; this.geospatial = geospatial; this.value = value; - this.distanceTrain = 0; - this.distanceLightRail = 0; - this.distanceTram = 0; - this.statisticalArea = null; + this.statisticalArea = statisticalArea; + this.url = url; + this.pricePerSqm = pricePerSqm; } /** @param {HouseParameter} param */ @@ -659,6 +669,10 @@ export class House { new Scores(0), data.images || [], new Geospatial(), + 0, + null, + data.url || "", + rawData.pricePerSqm || 0, ); } @@ -795,11 +809,11 @@ export class Collection { house.statisticalArea = this.#findStatisticalArea(house.coordinates); // Calculate transit distances - house.distanceTrain = this.#calculateMinDistanceToStations( + house.geospatial.distanceTrain = this.#calculateMinDistanceToStations( house.coordinates, this.trainStations, ); - house.distanceLightRail = this.#calculateMinDistanceToStations( + house.geospatial.distanceLightRail = this.#calculateMinDistanceToStations( house.coordinates, this.lightRailStops, ); @@ -1065,20 +1079,22 @@ export class ScoringEngine { } // Transit distances (closer is better, but not too close) - if (weights.distanceTrain > 0 && house.distanceTrain > 0) { - const trainScore = ScoringEngine.calculateTransitScore(house.distanceTrain); + if (weights.distanceTrain > 0 && house.geospatial.distanceTrain > 0) { + const trainScore = ScoringEngine.calculateTransitScore(house.geospatial.distanceTrain); score += trainScore * weights.distanceTrain; totalWeight += weights.distanceTrain; } - if (weights.distanceLightRail > 0 && house.distanceLightRail > 0) { - const lightRailScore = ScoringEngine.calculateTransitScore(house.distanceLightRail); + if (weights.distanceLightRail > 0 && house.geospatial.distanceLightRail > 0) { + const lightRailScore = ScoringEngine.calculateTransitScore( + house.geospatial.distanceLightRail, + ); score += lightRailScore * weights.distanceLightRail; totalWeight += weights.distanceLightRail; } - if (weights.distanceTram > 0 && house.distanceTram > 0) { - const tramScore = ScoringEngine.calculateTransitScore(house.distanceTram); + if (weights.distanceTram > 0 && house.geospatial.distanceTram > 0) { + const tramScore = ScoringEngine.calculateTransitScore(house.geospatial.distanceTram); score += tramScore * weights.distanceTram; totalWeight += weights.distanceTram; } -- cgit v1.2.3-70-g09d2