diff --git a/src/client/components/perspectives/sampo/Perspective1.js b/src/client/components/perspectives/sampo/Perspective1.js index 049b844b2fd23105bf816214e37ea4a92f451c92..f5ad37b674e8c20511d062bdac89b3de54b2799b 100644 --- a/src/client/components/perspectives/sampo/Perspective1.js +++ b/src/client/components/perspectives/sampo/Perspective1.js @@ -204,6 +204,28 @@ const Perspective1 = props => { layoutConfig={props.layoutConfig} />} /> + <Route + path={`${rootUrl}/${perspective.id}/faceted-search/choropleth_map`} + render={() => + <Deck + center={props.perspectiveState.maps.placesMsMigrations.center} + zoom={props.perspectiveState.maps.placesMsMigrations.zoom} + results={props.perspectiveState.results} + facetUpdateID={props.facetState.facetUpdateID} + instanceAnalysisData={props.perspectiveState.instanceAnalysisData} + instanceAnalysisDataUpdateID={props.perspectiveState.instanceAnalysisDataUpdateID} + resultClass='choropleth' + facetClass='perspective1' + fetchResults={props.fetchResults} + fetchInstanceAnalysis={props.fetchInstanceAnalysis} + fetching={props.perspectiveState.fetching} + fetchingInstanceAnalysisData={props.perspectiveState.fetchingInstanceAnalysisData} + layerType='arcLayer' + mapBoxAccessToken={MAPBOX_ACCESS_TOKEN} + mapBoxStyle={MAPBOX_STYLE} + layoutConfig={props.layoutConfig} + />} + /> <Route path={`${rootUrl}/${perspective.id}/faceted-search/production_dates`} render={() => diff --git a/src/server/sparql/Mappers.js b/src/server/sparql/Mappers.js index fa85bf429aacd5578089153b5accfbd328e25420..ca8acdb532f216d79a1852900129474fb455d102 100644 --- a/src/server/sparql/Mappers.js +++ b/src/server/sparql/Mappers.js @@ -171,13 +171,14 @@ export const mapPieChart = sparqlBindings => { export const linearScale = ({ data, config }) => { const { variable, minAllowed, maxAllowed } = config const length = data.length - const min = data[length - 1][variable] - const max = data[0][variable] + const min = Number(data[length - 1][variable]) + const max = Number(data[0][variable]) data.forEach(item => { if (item[variable]) { - const unscaledNum = item[variable] + const unscaledNum = Number(item[variable]) // https://stackoverflow.com/a/31687097 - item[`${variable}Scaled`] = (maxAllowed - minAllowed) * (unscaledNum - min) / (max - min) + minAllowed + const scaled = (maxAllowed - minAllowed) * (unscaledNum - min) / (max - min) + minAllowed + item[`${variable}Scaled`] = scaled.toFixed(2) } }) return data diff --git a/src/server/sparql/sampo/BackendSearchConfig.js b/src/server/sparql/sampo/BackendSearchConfig.js index b06f3827bcf9683c5a7445a3476e4a84b4e7f2a6..749d7a2499e7a0273bace5bb7cbd35bd381d40a1 100644 --- a/src/server/sparql/sampo/BackendSearchConfig.js +++ b/src/server/sparql/sampo/BackendSearchConfig.js @@ -5,6 +5,7 @@ import { findsConfig } from './perspective_configs/FindsConfig' import { actorsConfig } from './perspective_configs/EmloActorsConfig' import { hellerauConfig } from './perspective_configs/HellerauConfig' import { speechesConfig } from './perspective_configs/SemparlSpeechesConfig' +import { warsaConfig } from './perspective_configs/WarsaConfig' import { productionPlacesQuery, lastKnownLocationsQuery, @@ -19,7 +20,8 @@ import { manuscriptInstancePageNetworkLinksQuery, manuscriptFacetResultsNetworkLinksQuery, manuscriptNetworkNodesQuery, - knowledgeGraphMetadataQuery + knowledgeGraphMetadataQuery, + choroplethQuery } from './sparql_queries/SparqlQueriesPerspective1' import { workProperties @@ -75,6 +77,7 @@ export const backendSearchConfig = { emloActors: actorsConfig, hellerau: hellerauConfig, semparlSpeeches: speechesConfig, + warsa: warsaConfig, manuscripts: { perspectiveID: 'perspective1', // get rest of the config from 'perspective1' instance: { @@ -166,6 +169,19 @@ export const backendSearchConfig = { } } }, + choropleth: { + perspectiveID: 'warsa', + q: choroplethQuery, + resultMapper: makeObjectList, + postprocess: { + func: linearScale, + config: { + variable: 'instanceCount', + minAllowed: 0, + maxAllowed: 1 + } + } + }, placesMsMigrationsDialog: { perspectiveID: 'perspective1', q: migrationsDialogQuery, diff --git a/src/server/sparql/sampo/perspective_configs/WarsaConfig.js b/src/server/sparql/sampo/perspective_configs/WarsaConfig.js new file mode 100644 index 0000000000000000000000000000000000000000..18de616e8e0f96c087f615af9507863705ea0c3c --- /dev/null +++ b/src/server/sparql/sampo/perspective_configs/WarsaConfig.js @@ -0,0 +1,9 @@ +import { prefixes } from '../sparql_queries/SparqlQueriesPrefixes' + +export const warsaConfig = { + endpoint: { + url: 'http://ldf.fi/warsa/sparql', + prefixes, + useAuth: false + } +} diff --git a/src/server/sparql/sampo/sparql_queries/SparqlQueriesPerspective1.js b/src/server/sparql/sampo/sparql_queries/SparqlQueriesPerspective1.js index eaf66a7a6f40ae3b42aed0bf397bcb9cf9ddfe62..213da13a9f17e18b962774ddf651f5094dc2b0f8 100644 --- a/src/server/sparql/sampo/sparql_queries/SparqlQueriesPerspective1.js +++ b/src/server/sparql/sampo/sparql_queries/SparqlQueriesPerspective1.js @@ -596,3 +596,16 @@ export const knowledgeGraphMetadataQuery = ` dct:modified ?databaseDump__modified . } ` + +export const choroplethQuery = ` + SELECT ?id ?prefLabel ?polygon (count(?death) as ?instanceCount) + WHERE { + ?id a <http://www.yso.fi/onto/suo/kunta> ; + skos:prefLabel ?prefLabel . + # sch:polygon ?polygon + ?death crm-org:P7_took_place_at ?id . + } + GROUP BY ?id ?prefLabel ?polygon + ORDER BY desc(?instanceCount) + LIMIT 10 +` diff --git a/src/server/sparql/sampo/sparql_queries/SparqlQueriesPrefixes.js b/src/server/sparql/sampo/sparql_queries/SparqlQueriesPrefixes.js index e3692a82e7d07263673f3b4b781a2feebf5661d6..0f9cab5e064e22831eff3af536509d62c2092554 100644 --- a/src/server/sparql/sampo/sparql_queries/SparqlQueriesPrefixes.js +++ b/src/server/sparql/sampo/sparql_queries/SparqlQueriesPrefixes.js @@ -3,6 +3,7 @@ export const prefixes = ` PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX crm: <http://erlangen-crm.org/current/> + PREFIX crm-org: <http://www.cidoc-crm.org/cidoc-crm/> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX text: <http://jena.apache.org/text#>