Skip to content

Commit

Permalink
Add ORVal to map view
Browse files Browse the repository at this point in the history
  • Loading branch information
paulthatjazz committed Apr 16, 2024
1 parent d311ac5 commit d291e4e
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 5 deletions.
22 changes: 22 additions & 0 deletions app/javascript/projects/layer_palette.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,28 @@ export const LayerPalette = ({ addLayer, hide, dbModels, getTeamDatasets, teamNa
)
}
</Section>
<Section title="ORVal">
{
Array<{ name: string, source: string, style: string }>(
{ name: "Parks" , source: "ORVAL:parks_england", style: "ORVAL:orvalparks"},
{ name: "Beaches", source: "ORVAL:beaches_england", style: ""},
{ name: "Paths", source: "ORVAL:paths_england", style: ""},
{ name: "Path Access Points", source: "ORVAL:paths_england_accesspts", style: ""},
).map(({ name, source, style }) =>
<AddLayerButton
addLayer={addLayer}
prototype={{
type: "ORValLayer",
name,
visible: true,
opacity: 1,
source,
style
}}
/>
)
}
</Section>
<Section title="UKCEH Land Cover Maps">
<AddLayerButton
addLayer={addLayer}
Expand Down
2 changes: 2 additions & 0 deletions app/javascript/projects/reify_layer/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { reifyShapeFileLayer } from './shapefile'
import { reifyBoundaryLayer } from './boundary'
import { reifyGeoserverWMSLayer } from './geoserver'
import { reifyKewLayer } from './kew'
import { reifyOrvalLayer } from './orval'

export const reifyLayer = (layer: Layer, existingLayer: BaseLayer | null, dbModels: DBModels, map: Map, modelOutputCache: ModelOutputCache, DatasetCache: DatasetCache, loadteamDataset: (layer: DatasetLayer) => void): BaseLayer => {
const layerType = layer.type
Expand All @@ -33,6 +34,7 @@ export const reifyLayer = (layer: Layer, existingLayer: BaseLayer | null, dbMode
case "BoundaryLayer": return reifyBoundaryLayer(layer, existingLayer, map)
case "MLLayer": return reifyGeoserverWMSLayer(layer, existingLayer)
case "KewLayer": return reifyKewLayer(layer, existingLayer, map)
case "ORValLayer": return reifyOrvalLayer(layer, existingLayer, map)
default: {
// Ensure this switch statement is exhaustive
const unreachable: never = layerType
Expand Down
27 changes: 27 additions & 0 deletions app/javascript/projects/reify_layer/orval.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import BaseLayer from "ol/layer/Base"
import { ORValLayer } from "../state"
import { Map } from "ol"
import TileWMS from "ol/source/TileWMS"
import { memoize } from "lodash"
import TileLayer from "ol/layer/Tile"


const getSourceWMS = memoize((layer: ORValLayer) =>
new TileWMS({
url: 'https://landscapes.wearepal.ai/geoserver/wms',
params: {
'LAYERS': layer.source,
'TILED': true,
'STYLES': layer.style
},
serverType: 'geoserver',
imageSmoothing: false,
attributions: '&copy; <a href="https://www.leep.exeter.ac.uk/orval/">ORVal</a> Partners'
})
)

export function reifyOrvalLayer (layer: ORValLayer, existingLayer: BaseLayer | null, map: Map) {
return new TileLayer({
source: getSourceWMS(layer)
})
}
14 changes: 10 additions & 4 deletions app/javascript/projects/sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -781,10 +781,16 @@ export const Sidebar = ({ state, selectLayer, mutateLayer, deleteLayer, setLayer
}
/>
}
</> :
<em>No layer selected</em>
}
</div>
{
selectedLayer?.type == "ORValLayer" &&
<>
<img src={selectedLayer.style !== "" ? `https://landscapes.wearepal.ai/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=${selectedLayer.source}&STYLE=${selectedLayer.style}` : ""} alt="" />
</>
}
</> :
<em>No layer selected</em>
}
</div>
<button
disabled={state.selectedLayer === undefined || state.project.layers[state.selectedLayer]?.type === "ModelOutputLayer"}
className="btn btn-outline-danger rounded-0 border-left-0 border-right-0 border-bottom-0"
Expand Down
8 changes: 7 additions & 1 deletion app/javascript/projects/state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,12 @@ export interface NevoLayer extends BaseLayer {
fill: "greyscale" | "heatmap"
}

export interface ORValLayer extends BaseLayer {
type: "ORValLayer",
source: string
style: string
}

export interface CehLandCoverLayer extends BaseLayer {
type: "CehLandCoverLayer"
year: 2021 // TODO: allow the user to customise this
Expand Down Expand Up @@ -115,7 +121,7 @@ export interface MLLayer extends BaseLayer {
layerName: string
}

export type Layer = OsmLayer | MapTileLayer | OverlayLayer | NevoLayer | CehLandCoverLayer | ModelOutputLayer | DatasetLayer | CropMapLayer | AtiLayer | ShapeLayer | BoundaryLayer | MLLayer | KewLayer
export type Layer = OsmLayer | MapTileLayer | OverlayLayer | NevoLayer | CehLandCoverLayer | ModelOutputLayer | DatasetLayer | CropMapLayer | AtiLayer | ShapeLayer | BoundaryLayer | MLLayer | KewLayer | ORValLayer

export interface Project {
name: string
Expand Down

0 comments on commit d291e4e

Please sign in to comment.