Merge branch 'develop' into feature/station-map

This commit is contained in:
Robin van der Linde 2022-11-25 22:14:15 +01:00
commit 9a557b0bd1
Signed by untrusted user: Robin-van-der-Linde
GPG key ID: 53956B3252478F0D
22 changed files with 37 additions and 57 deletions

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,12 @@
Timing: 25 minutes including questions -> about 15 minutes of presentation
10minutes questions
- One slide: What is OSM? Baserules
- The problem: WTF is this shit
- Enter Jos P. who wants to know where the charging stations for ebikes are
- Many topical maps which can be edited -> MapComplete
- Some examples: cyclofix, etymology, waste, benches
- Toerisme Vlaanderen

View file

@ -1,49 +0,0 @@
# What do I want to tell at SOTM '22?
4 main topics:
The MapComplete Editor:
- What is MapComplete? The vision
+ Simple to use viewer
+ Simple to contribute
+ Packed with features under the hood (where applicable)
+ Pareto frontier
- Projects
- some highlights from the stats (etymology, cyclofix)
- pin je punt
- Imports
+ STart with AEDs in Brugge
+ GRB
+ Pin je punt: map notes
- MapComplete and community
+ Little "drag" on older contributors (allthough they did a lot of cartographic work)
+ Pitfall: eternal september (themes must be good!)
+ Pitfall: "obligated mapping"
+ Pitfall: should not lose the ghost of OSM
+ Small but relatively active community around MC
- Build your own theme
- Future
+ More funded projects?
+ Donations welcome
+ Move to more traditional satnav?
MapComplete: introduction, retrospective, projects and community
## Introduction
MapComplete is a simple to use OSM-map viewer and map editor. This web-based application has seen a few successful projects and makes on-the-go mapping easy and accessible.
In this talk, the MapComplete developer will talk about the vision behind mapcomplete, do a retrospective of the first two years; highlight some successful projects (which included data imports) and the impact on the OSM-community in Belgium and beyond.
# Building your own theme
## Intro
What does it take to build a successful and easy to use editor? How can phrasing, order of question, presenting filters, ... be used to prevent mapping errors?

View file

@ -1 +1 @@
["file-overview.json","missing_editor.json","stats.2020-10.json","stats.2020-11.json","stats.2020-12.json","stats.2020-5.json","stats.2020-6.json","stats.2020-7.json","stats.2020-8.json","stats.2020-9.json","stats.2021-1.json","stats.2021-10.json","stats.2021-11.json","stats.2021-12.json","stats.2021-2.json","stats.2021-3.json","stats.2021-4.json","stats.2021-5.json","stats.2021-6.json","stats.2021-7.json","stats.2021-8.json","stats.2021-9.json","stats.2022-1.json","stats.2022-10.json","stats.2022-11-01.day.json","stats.2022-11-02.day.json","stats.2022-11-03.day.json","stats.2022-11-04.day.json","stats.2022-11-05.day.json","stats.2022-11-06.day.json","stats.2022-11-07.day.json","stats.2022-11-08.day.json","stats.2022-2.json","stats.2022-3.json","stats.2022-4.json","stats.2022-5.json","stats.2022-6.json","stats.2022-7.json","stats.2022-8.json","stats.2022-9.json"]
["file-overview.json","missing_editor.json","stats.2020-10.json","stats.2020-11.json","stats.2020-12.json","stats.2020-5.json","stats.2020-6.json","stats.2020-7.json","stats.2020-8.json","stats.2020-9.json","stats.2021-1.json","stats.2021-10.json","stats.2021-11.json","stats.2021-12.json","stats.2021-2.json","stats.2021-3.json","stats.2021-4.json","stats.2021-5.json","stats.2021-6.json","stats.2021-7.json","stats.2021-8.json","stats.2021-9.json","stats.2022-1.json","stats.2022-10.json","stats.2022-11-01.day.json","stats.2022-11-02.day.json","stats.2022-11-03.day.json","stats.2022-11-04.day.json","stats.2022-11-05.day.json","stats.2022-11-06.day.json","stats.2022-11-07.day.json","stats.2022-11-08.day.json","stats.2022-11-09.day.json","stats.2022-11-10.day.json","stats.2022-11-11.day.json","stats.2022-11-12.day.json","stats.2022-11-13.day.json","stats.2022-11-14.day.json","stats.2022-11-15.day.json","stats.2022-11-16.day.json","stats.2022-11-17.day.json","stats.2022-11-18.day.json","stats.2022-11-19.day.json","stats.2022-11-20.day.json","stats.2022-11-21.day.json","stats.2022-11-22.day.json","stats.2022-2.json","stats.2022-3.json","stats.2022-4.json","stats.2022-5.json","stats.2022-6.json","stats.2022-7.json","stats.2022-8.json","stats.2022-9.json"]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -18,7 +18,7 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti
private readonly state: {
locationControl: Store<{ zoom: number }>
selectedElement: Store<any>
globalFilters: Store<{ filter: FilterState }[]>
globalFilters?: Store<{ filter: FilterState }[]>
allElements: ElementStorage
}
private readonly _alreadyRegistered = new Set<UIEventSource<any>>()
@ -30,7 +30,7 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti
locationControl: Store<{ zoom: number }>
selectedElement: Store<any>
allElements: ElementStorage
globalFilters: Store<{ filter: FilterState }[]>
globalFilters?: Store<{ filter: FilterState }[]>
},
tileIndex,
upstream: FeatureSourceForLayer,
@ -63,7 +63,7 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti
self._is_dirty.setData(true)
})
state.globalFilters.addCallback((_) => {
state.globalFilters?.addCallback((_) => {
self.update()
})
@ -76,7 +76,7 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti
const features: { feature: OsmFeature; freshness: Date }[] =
this.upstream.features.data ?? []
const includedFeatureIds = new Set<string>()
const globalFilters = self.state.globalFilters.data.map((f) => f.filter)
const globalFilters = self.state.globalFilters?.data?.map((f) => f.filter)
const newFeatures = (features ?? []).filter((f) => {
self.registerCallback(f.feature)
@ -98,7 +98,7 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti
}
}
for (const filter of globalFilters) {
for (const filter of (globalFilters ?? [])) {
const neededTags: TagsFilter = filter?.currentFilter
if (
neededTags !== undefined &&

View file

@ -128,7 +128,7 @@ class MassAction extends Combine {
},
/*
{
// This was a one-off for one of the first imports
// This was a one-off for one of the first imports
value:{
predicate: p => p.status === "open" && p.comments[0].text.split("\n").find(l => l.startsWith("note=")) !== undefined,
action: async p => {
@ -440,7 +440,10 @@ class ImportInspector extends VariableUiElement {
)
}
// We only care about the properties here
const props: NoteProperties[] = notes["success"].features.map((f) => f.properties)
let props: NoteProperties[] = notes["success"].features.map((f) => f.properties)
if(userDetails["uid"]){
props = props.filter(n => n.comments[0].uid === userDetails["uid"])
}
const perBatch: NoteState[][] = Array.from(
ImportInspector.SplitNotesIntoBatches(props).values()
)