Compare commits

...

2 Commits

Author SHA1 Message Date
Tazyeuu e7d437f201 fix: explicitly cast geometry to SRID 4326 in ST_Distance_Sphere to prevent SRID mismatch errors permanently 2026-06-11 02:10:33 +07:00
Tazyeuu 14120dc683 temp: check srids 2026-06-11 02:09:36 +07:00
5 changed files with 22 additions and 8 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ $blankCount = $pdo->query("
WHERE NOT EXISTS (
SELECT 1
FROM rumah_ibadah ri
WHERE ST_Distance_Sphere(w.geom, ri.geom) <= ri.radius_bantuan_meter
WHERE ST_Distance_Sphere(ST_SRID(w.geom, 4326), ST_SRID(ri.geom, 4326)) <= ri.radius_bantuan_meter
)
")->fetch();
$blankSpot = (int)($blankCount['cnt'] ?? 0);
+5 -5
View File
@@ -16,9 +16,9 @@ $sql = "
w.penghasilan,
ST_AsGeoJSON(w.geom) AS geojson,
ri.nama AS rumah_ibadah_terdekat,
ST_Distance_Sphere(w.geom, ri.geom) AS jarak_meter,
ST_Distance_Sphere(ST_SRID(w.geom, 4326), ST_SRID(ri.geom, 4326)) AS jarak_meter,
ri.radius_bantuan_meter,
(ST_Distance_Sphere(w.geom, ri.geom) - ri.radius_bantuan_meter) AS selisih_meter
(ST_Distance_Sphere(ST_SRID(w.geom, 4326), ST_SRID(ri.geom, 4326)) - ri.radius_bantuan_meter) AS selisih_meter
FROM warga_miskin w
JOIN rumah_ibadah ri
JOIN (
@@ -28,18 +28,18 @@ $sql = "
FROM (
SELECT
w2.id AS warga_id,
ST_Distance_Sphere(w2.geom, ri2.geom) AS jarak_meter
ST_Distance_Sphere(ST_SRID(w2.geom, 4326), ST_SRID(ri2.geom, 4326)) AS jarak_meter
FROM warga_miskin w2
CROSS JOIN rumah_ibadah ri2
) nearest_distance
GROUP BY nearest_distance.warga_id
) nearest
ON nearest.warga_id = w.id
AND ABS(ST_Distance_Sphere(w.geom, ri.geom) - nearest.min_jarak_meter) < 0.001
AND ABS(ST_Distance_Sphere(ST_SRID(w.geom, 4326), ST_SRID(ri.geom, 4326)) - nearest.min_jarak_meter) < 0.001
WHERE NOT EXISTS (
SELECT 1
FROM rumah_ibadah ri_in_radius
WHERE ST_Distance_Sphere(w.geom, ri_in_radius.geom) <= ri_in_radius.radius_bantuan_meter
WHERE ST_Distance_Sphere(ST_SRID(w.geom, 4326), ST_SRID(ri_in_radius.geom, 4326)) <= ri_in_radius.radius_bantuan_meter
)
GROUP BY w.id
ORDER BY selisih_meter DESC
+14
View File
@@ -0,0 +1,14 @@
<?php
require_once __DIR__ . '/../config/db.php';
try {
$pdo = Database::getConnection();
$stmt = $pdo->query("SELECT id, ST_SRID(geom) as srid FROM warga_miskin LIMIT 5");
echo "warga_miskin SRIDs: \n";
while ($row = $stmt->fetch()) echo $row['id'] . " => " . $row['srid'] . "\n";
$stmt = $pdo->query("SELECT id, ST_SRID(geom) as srid FROM rumah_ibadah LIMIT 5");
echo "rumah_ibadah SRIDs: \n";
while ($row = $stmt->fetch()) echo $row['id'] . " => " . $row['srid'] . "\n";
} catch (Exception $e) {
echo "ERROR: " . $e->getMessage();
}
+1 -1
View File
@@ -5,7 +5,7 @@ $lat = (float)($_GET['lat'] ?? 0); $lng = (float)($_GET['lng'] ?? 0);
if (!$lat || !$lng) sendError('lat dan lng wajib diisi');
$wkt = sprintf('POINT(%F %F)', $lng, $lat);
$stmt = $pdo->prepare("SELECT id, nama, buka_24_jam, ST_AsGeoJSON(geom) as geojson,
ST_Distance_Sphere(geom, ST_GeomFromText(?)) / 1000 as jarak_km
ST_Distance_Sphere(ST_SRID(geom, 4326), ST_SRID(ST_GeomFromText(?), 4326)) / 1000 as jarak_km
FROM spbu ORDER BY jarak_km ASC LIMIT 1");
$stmt->execute([$wkt]);
$r = $stmt->fetch();
+1 -1
View File
@@ -29,7 +29,7 @@ $blankCount = $pdo->query("
WHERE NOT EXISTS (
SELECT 1
FROM rumah_ibadah ri
WHERE ST_Distance_Sphere(w.geom, ri.geom) <= ri.radius_bantuan_meter
WHERE ST_Distance_Sphere(ST_SRID(w.geom, 4326), ST_SRID(ri.geom, 4326)) <= ri.radius_bantuan_meter
)
")->fetch();
$blankSpot = (int)($blankCount['cnt'] ?? 0);