feat: support parcel sub-number search

This commit is contained in:
2026-07-22 07:54:33 +01:00
parent c60840e4c1
commit 1e25cfc575
+14 -2
View File
@@ -170,7 +170,7 @@ async function searchParcela(event) {
typeNames: PARCEL_LAYER_NAME, typeNames: PARCEL_LAYER_NAME,
outputFormat: "application/json", outputFormat: "application/json",
srsName: "EPSG:3857", srsName: "EPSG:3857",
CQL_FILTER: `cod_parcela = '${escapeCqlLiteral(parcelNumber)}'`, CQL_FILTER: buildParcelSearchFilter(parcelNumber),
}); });
const response = await fetch(`${API_WMS}?${params}`); const response = await fetch(`${API_WMS}?${params}`);
@@ -198,7 +198,7 @@ async function searchParcela(event) {
updateParcelSearchStatus( updateParcelSearchStatus(
features.length === 1 features.length === 1
? `Found parcel ${parcelNumber}.` ? `Found parcel ${parcelNumber}.`
: `Found ${features.length} parcels numbered ${parcelNumber}.`, : `Found ${features.length} parcels matching ${parcelNumber}.`,
"success", "success",
); );
} catch (error) { } catch (error) {
@@ -207,6 +207,18 @@ async function searchParcela(event) {
} }
} }
function buildParcelSearchFilter(parcelNumber) {
const escapedParcelNumber = escapeCqlLiteral(parcelNumber);
// Whole parcel numbers identify a group: 278 includes sub-parcels such as
// 278.1 and 278.2. A supplied sub-parcel number remains an exact lookup.
if (/^\d+$/.test(parcelNumber)) {
return `(cod_parcela = '${escapedParcelNumber}' OR cod_parcela LIKE '${escapedParcelNumber}.%')`;
}
return `cod_parcela = '${escapedParcelNumber}'`;
}
async function loadLayers() { async function loadLayers() {
updateStatus("Loading WMS layers..."); updateStatus("Loading WMS layers...");