aboutsummaryrefslogtreecommitdiffstats
path: root/app/models.js
diff options
context:
space:
mode:
authorPetri Hienonen <petri.hienonen@gmail.com>2025-11-14 11:47:49 +0200
committerPetri Hienonen <petri.hienonen@gmail.com>2025-11-14 11:47:49 +0200
commitd41ac3c094f733a8038885de3400ed7558b2b878 (patch)
treea9a7cd54900e0b0c66f3293f4ff6bc6ad5cbbec6 /app/models.js
parent6ca89c37f84c6b1d63c869e6471d3570d51f63be (diff)
downloadhousing-d41ac3c094f733a8038885de3400ed7558b2b878.tar.zst
Minor tuning
Diffstat (limited to 'app/models.js')
-rw-r--r--app/models.js44
1 files changed, 30 insertions, 14 deletions
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;
}