Open joschne opened 9 months ago
@flicksolutions please review specs
@joschne
The map shows one circle per pointURI and type.
What does and type mean here? Does it mean the possibility of the pointURI being in the list twice but with a different type and then two points are being displayed on top of each other?
The size of a circle depends on the number of events
...at the same coordinates, right? It's not the case that all circles of EventA are the same size because there are 3 EventA in total. On the same point, this kind of implies, that the size of the circles implies that the size depends on the number of different Events:
one point for
with radius 2 (for Laura and May) and color A (for Work)
If that is the case, please make it explicit.
I don't really get the difference between type and Event. Is a type something like a generalization of events? Isn't the fact that Maria worked in Lyon dependent on the Event? Why do we need a type?
On init, the map and the timeline zoom to the extend of the data
timeline shouldn't zoom right? The lowest value should just be the lowest value in the data and the max value should be the max value in the data and on init it should all be selected, right?
What does and type mean here? Does it mean the possibility of the pointURI being in the list twice but with a different type and then two points are being displayed on top of each other?
Exactly. In the example, <geoplace2>
is displayed as two points, one per type.
The size of a circle depends on the number of events
...at the same coordinates, right? It's not the case that all circles of EventA are the same size because there are 3 EventA in total. On the same point, this kind of implies, that the size of the circles implies that the size depends on the number of different Events:
one point for with radius 2 (for Laura and May) and color A (for Work)
If that is the case, please make it explicit.
Would this text make the specs more understandable?
The map displays one circle per pointURI and type. This means, we group the events per pointURI and type. Each group will be displayed as a circle. The circle radius is proportional to the number of events per group, the color depends on the type.
More technically, each group of pointURI and type aggregates the event attributes in a list: start
, end
, eventLabel
, eventURI
and picks one pointLabel
, lat
, long
for each group. The output data structure could look like this (pseudo code):
{
"<geoplace1>_Work": {
"group": {
"pointURI": "<geoplace1>",
"pointLabel": "Bern",
"type": "Work",
"long": 12.3,
"lat": 56.7
},
"events": [
{
"eventUri": "<eventA>",
"eventLabel": "Laura in Bern",
"start": "1597-02-25",
"end": "1597-08-11"
},
{
"eventUri": "<eventB>",
...
}
]
},
"<geoplace2>_Work": {...},
"<geoplace2>_Voyage": {...}
}
For each key, the map displays a circle. The color depends on group.type, the radius on events.length. The above json example could also be expressed as an array of groups instead of an object with a key per group. I chose this approach, because it illustrates, that the groups identity is defined by pointUri and type.
timeline shouldn't zoom right? The lowest value should just be the lowest value in the data and the max value should be the max value in the data and on init it should all be selected, right?
correct!
Yes, I now understand it better. Thanks! Could you update the description according to our discussion?
I estimate 5 full days of work for this (complete with code review)
Problem description
The current map plugin is great for visualization of a static map.
Since Geovistory deals with historical data, time is an important aspect. In order to show developments of historical phenomena on a map, a map with time filter and time line would be great.
Functional requirement
<geoplace1>
<eventA>
<geoplace1>
<eventB>
<geoplace2>
<eventA>
<geoplace2>
<eventA>
This example data can be interpreted so: Laura worked a few months in Bern in 1597, Max in 1599. Jean travelled through Lyon the January 21st of 1600. Maria worked one year in Lyon in 1600.
The
long
andlat
are geographic coordinates;start
andend
define the event-time-interval.The component has these functional requirements:
With the above example data and a time-interval-filter of 1590–1610 (showing all 4 records), there would be
<geoplace1>
with radius 2 (for Laura and May) and color A (for Work)<geoplace2>
with radius 1 (for Jean) and color B (for Voyage)<geoplace2>
with radius 1 (for Maria) and color A (for Work)[EDIT after discussion below]
The map displays one circle per pointURI and type. This means, we group the events per pointURI and type. Each group will be displayed as a circle. The circle radius is proportional to the number of events per group, the color depends on the type.
More technically, each group of pointURI and type aggregates the event attributes in a list:
start
,end
,eventLabel
,eventURI
and picks onepointLabel
,lat
,long
for each group. The output data structure could look like this (pseudo code):For each key, the map displays a circle. The color depends on group.type, the radius on events.length. The above json example could also be expressed as an array of groups instead of an object with a key per group. I chose this approach, because it illustrates, that the groups identity is defined by pointUri and type.
Technical Specification
The component has these inputs: data: Parser.Binding[] (as in geov-yasgui-map-circles) colorScale: string[] (as in geov-yasgui-map-circles) timeFilterStart: string (in the form of xsd:date, setting the start of time-interva-filter on init)
timeFilterEnd: string (in the form of xsd:date, setting the end of time-interva-filter on init)
This example query can be copied it here to get useful sample data:
Acceptance Criteria
The user interface works as described in the functional requirements.