Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove grid format, mod, and legend; optional layer qid; vector format viewport; featureFormats util & theme.field_stats #871

Merged
merged 7 commits into from Aug 21, 2023
5 changes: 1 addition & 4 deletions lib/layer/format/_format.mjs
Expand Up @@ -10,15 +10,12 @@ import cluster from './cluster.mjs'

import vector from './vector.mjs'

import grid from './grid.mjs'

export default {
mbtiles,
maplibre,
tiles,
mvt,
cluster,
geojson: vector,
wkt: vector,
grid
wkt: vector
}
198 changes: 0 additions & 198 deletions lib/layer/format/grid.mjs

This file was deleted.

77 changes: 29 additions & 48 deletions lib/layer/format/vector.mjs
@@ -1,47 +1,3 @@
const formatFeatures = {
geojson,
wkt
}

const formatGeojson = new ol.format.GeoJSON

const formatWKT = new ol.format.WKT

function geojson(layer, features) {

return features.map((f) =>
new ol.Feature({
id: f.id,
geometry: formatGeojson.readGeometry(f.geometry, {
dataProjection: 'EPSG:' + layer.srid,
featureProjection: 'EPSG:' + layer.mapview.srid,
}),
properties: f.properties
}))
}

function wkt(layer, features) {

return features.map((r) => {

const properties = {}

// Assign field key and value to properties object
layer.fields.forEach((k, i) => properties[k] = r[i + 2])

// Return feature from geometry with properties.
return new ol.Feature({
id: r.shift(),
geometry: formatWKT.readGeometry(r.shift(), {
dataProjection: 'EPSG:' + layer.srid,
featureProjection: 'EPSG:' + layer.mapview.srid,
}),
properties
})

})
}

export default layer => {

if (layer.properties) {
Expand All @@ -59,7 +15,7 @@ export default layer => {
if (!features) return;

let source = new ol.source.Vector({
features: formatFeatures[layer.format](layer, [features].flat())
features: mapp.utils.featureFormats[layer.format](layer, [features].flat())
})

// Geojson is a cluster layer.
Expand All @@ -84,21 +40,31 @@ export default layer => {
// Do not reload the layer if features have been assigned.
if (layer.features) return;

const table = layer.tableCurrent()

if (!table) return;

// Create a set of feature properties for styling.
layer.fields = [...new Set([
// Array.isArray(layer.style.theme?.fields) ?
// layer.style.theme.fields : layer.style.theme?.field,
layer.style.theme?.field,
layer.style.label?.field,
layer.cluster?.label
].filter(field => !!field))]
].flat().filter(field => !!field))]

// Assign current viewport if not falsy.
layer.viewport = layer.viewport && layer.mapview.getBounds();

mapp.utils.xhr(
`${layer.mapview.host}/api/query?${mapp.utils.paramString({
template: layer.queryTemplate || layer.format,
locale: layer.mapview.locale.key,
layer: layer.key,
table: layer.table,
table,
filter: layer.filter?.current,
fields: layer.fields
fields: layer.fields,
viewport: typeof layer.viewport === 'object' && [layer.viewport.west, layer.viewport.south, layer.viewport.east, layer.viewport.north, layer.mapview.srid],
})}`)
.then(layer.setSource)

Expand All @@ -113,9 +79,24 @@ export default layer => {

layer.setSource(layer.features)

let changeEndTimeout;

// Add event listener to reload layer for viewport on changeEnd.
layer.viewport && layer.mapview.Map.getTargetElement().addEventListener('changeEnd', ()=>{

if (!layer.display) return;

clearTimeout(changeEndTimeout)

changeEndTimeout = setTimeout(layer.reload, 100)
})

// Change method for the cluster feature properties and layer stats.
layer.L.on('change', e => {

// To prevent layer.L.change() from crashing if called before data is loaded.
if (!layer.cluster.source) return;

if (!layer.cluster?.distance) return;

delete layer.max_size;
Expand Down
3 changes: 0 additions & 3 deletions lib/ui/layers/_layers.mjs
Expand Up @@ -27,8 +27,6 @@ import distributed from './legends/distributed.mjs'

import graduated from './legends/graduated.mjs'

import grid from './legends/grid.mjs'

import basic from './legends/basic.mjs'

export default {
Expand All @@ -48,7 +46,6 @@ export default {
categorized,
distributed,
graduated,
grid,
basic,
},
styles: {
Expand Down