diff --git a/assets/themes/velopark/velopark.json b/assets/themes/velopark/velopark.json
index 63e59c515..35d27cccd 100644
--- a/assets/themes/velopark/velopark.json
+++ b/assets/themes/velopark/velopark.json
@@ -9,8 +9,8 @@
"en"
],
"description": {
- "en": "
Velopark.be is a website collecting data about bicycle parkings in a semi-crowdsourced way. However, only 'authorized' instances are allowed to make changes there, in practice the operator of the bicycle parking such as SNCB, de Lijn or the municipality. They have now decided to synchronize their dataset with OpenStreetMap, and this MapComplete-instance is set up to help link and import their data into OpenStreetMap.
How to use: - A velopark-icon on the map (yellow with bicycle silhouette) represents a bicycle known by Velopark but not yet known by OpenStreetMap
- Blue pins are bicycle parkings known by OpenStreetMap
ref-velopark=*)- Click a velopark item, you can either link it with a nearby OSM-bicycle parking or create a new bicycle parking. Note that the geometry of Velopark is often incorrect and can be a few up till 100 meters away from the actual bicycle parking. Use aerial imagery, linked images and streetview to determine the correct location
- Once linked, you can compare the Velopark- and OSM-attributes and apply correct attributes
- If Velopark has an image, you can also link the image
That's it! Thanks for helping to import this!",
- "nl": "Velopark.be is een website die data verzamelt over fietsenstallingen in een semi-crowdsource manier. Hierbij kunnen enkel geautorizeerde gebruikers data bijdragen, in de praktijk de uitbaters van de fietsenstallingen zoals de bevoegde gemeentebesturen, de NMBS of de Lijn. Velopark.be heeft nu beslist om hun data met OpenStreetMap te synchronizeren. Deze website is de tool om van Velopark.be naar OpenStreetMap te gaan en hun data te importeren.
Hoe te gebruiken? - Een velopark-logo op de kaart (geel met een fietssilhouette) duidt een fietsenstalling aan die gekend is in Velopark maar nog niet gekend (of gelinkt) is aan een fietsenstalling in OpenStreetMap
- Een groene pin duidt een fietsenstalling aan die gekend is in OpenStreetMap
- Een licht-blauwe pin duidt een fietsenstalling aan uit OpenStreetMap die een link heeft naar Velopark.be (ref-velopark=*)
- Als je op een velopark-item klikt op, kan je deze linken met een fietsenstalling in de buurt (<25m) of een nieuwe fietstalling aan OpenStreetMap toevoegen. Let op: de geometrie van Velopark is zelden correct en wijkt makkelijk 10 meter of meer af van de echte locatie - in uitzonderlijke gevallen zelfs tot meer dan 100 meter. Gebruik de meest recente luchtfoto's, de gelinkte foto's en mapillary om de correcte locatie te bepalen
- Eens gelinkt, kan je de Velopark- en OSM-attributen vergelijken en de correcte attributen toepassen in OpenStreetMap
- Indien velopark een foto heeft, kan je die ook nog linken
Dat is het! Bedankt om mee te helpen!"
+ "en": "Velopark.be is a website collecting data about bicycle parkings in a semi-crowdsourced way. However, only 'authorized' instances are allowed to make changes there, in practice the operator of the bicycle parking such as SNCB, de Lijn or the municipality. They have now decided to synchronize their dataset with OpenStreetMap, and this MapComplete-instance is set up to help link and import their data into OpenStreetMap.
See the instructions
",
+ "nl": "Velopark.be is een website die data verzamelt over fietsenstallingen in een semi-crowdsource manier. Hierbij kunnen enkel geautorizeerde gebruikers data bijdragen, in de praktijk de uitbaters van de fietsenstallingen zoals de bevoegde gemeentebesturen, de NMBS of de Lijn. Velopark.be heeft nu beslist om hun data met OpenStreetMap te synchronizeren. Deze website is de tool om van Velopark.be naar OpenStreetMap te gaan en hun data te importeren.
Bekijk de instructies
"
},
"shortDescription": {
"en": "A tool to import data from velopark.be into OpenStreetMap",
@@ -414,6 +414,38 @@
"doCount": false,
"minzoom": 18
}
+ },
+ {
+ "builtin": "current_view",
+ "override": {
+ "=title": {
+ "en": "How to use?",
+ "nl": "Hoe te gebruiken"
+ },
+ "+pointRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "marker": [
+ {
+ "icon": "./assets/svg/help.svg"
+ }
+ ]
+ }
+ ],
+
+ "tagRenderings": [
+ {
+ "id": "tutorial",
+ "render": {
+ "en": "How to use: - A velopark-icon on the map (yellow with bicycle silhouette) represents a bicycle known by Velopark but not yet known by OpenStreetMap
- Blue pins are bicycle parkings known by OpenStreetMap
ref-velopark=*)- Click a velopark item, you can either link it with a nearby OSM-bicycle parking or create a new bicycle parking. Note that the geometry of Velopark is often incorrect and can be a few up till 100 meters away from the actual bicycle parking. Use aerial imagery, linked images and streetview to determine the correct location
- Once linked, you can compare the Velopark- and OSM-attributes and apply correct attributes
- If Velopark has an image, you can also link the image
That's it! Thanks for helping to import this!",
+ "nl": "Hoe te gebruiken? - Een velopark-logo op de kaart (geel met een fietssilhouette) duidt een fietsenstalling aan die gekend is in Velopark maar nog niet gekend (of gelinkt) is aan een fietsenstalling in OpenStreetMap
- Een groene pin duidt een fietsenstalling aan die gekend is in OpenStreetMap
- Een licht-blauwe pin duidt een fietsenstalling aan uit OpenStreetMap die een link heeft naar Velopark.be (ref-velopark=*)
- Als je op een velopark-item klikt op, kan je deze linken met een fietsenstalling in de buurt (<25m) of een nieuwe fietstalling aan OpenStreetMap toevoegen. Let op: de geometrie van Velopark is zelden correct en wijkt makkelijk 10 meter of meer af van de echte locatie - in uitzonderlijke gevallen zelfs tot meer dan 100 meter. Gebruik de meest recente luchtfoto's, de gelinkte foto's en mapillary om de correcte locatie te bepalen
- Eens gelinkt, kan je de Velopark- en OSM-attributen vergelijken en de correcte attributen toepassen in OpenStreetMap
- Indien velopark een foto heeft, kan je die ook nog linken
Dat is het! Bedankt om mee te helpen!"
+ }
+ }
+ ]
+ }
}
],
"overrideAll": {
@@ -473,6 +505,13 @@
"tagRenderings+": [
{
"id": "no_save_needed",
+ "condition": {
+ "or": [
+ "id~node/*",
+ "id~way/*",
+ "id~relation/*"
+ ]
+ },
"render": {
"en": "Changes are automatically saved. You can simply close this popup with the cross at the upper-right",
"nl": "Wijzigingen worden automatisch opgeslaan. Je kan deze popup gewoon sluiten met het kruisje rechtsbovenaan"
diff --git a/langs/en.json b/langs/en.json
index 1e686cf39..f806d1bae 100644
--- a/langs/en.json
+++ b/langs/en.json
@@ -60,6 +60,10 @@
"done": "Done",
"error": "Error",
"loadedFrom": "The following data is loaded from {source} using the embedded JSON-LD",
+ "missing": {
+ "intro": "OpenStreetMap has no information about the following attributes",
+ "title": "Missing items"
+ },
"noDataLoaded": "The external website has no linked data that could be loaded",
"overwrite": "Overwrite in OpenStreetMap"
},
diff --git a/src/Models/ThemeViewState.ts b/src/Models/ThemeViewState.ts
index 635157026..0ce24eafc 100644
--- a/src/Models/ThemeViewState.ts
+++ b/src/Models/ThemeViewState.ts
@@ -69,6 +69,7 @@ import {
import summaryLayer from "../assets/generated/layers/summary.json"
import { LayerConfigJson } from "./ThemeConfig/Json/LayerConfigJson"
import Locale from "../UI/i18n/Locale"
+import Hash from "../Logic/Web/Hash"
/**
*
@@ -496,6 +497,12 @@ export default class ThemeViewState implements SpecialVisualizationState {
if (this.layout.customCss !== undefined && window.location.pathname.indexOf("theme") >= 0) {
Utils.LoadCustomCss(this.layout.customCss)
}
+
+ Hash.hash.addCallbackAndRunD(hash => {
+ if(hash === "current_view" || hash.match(/current_view_[0-9]+/)){
+ this.selectCurrentView()
+ }
+ })
}
/**
@@ -821,4 +828,9 @@ export default class ThemeViewState implements SpecialVisualizationState {
this.userRelatedState.preferredBackgroundLayer
)
}
+
+ public selectCurrentView(){
+ this.guistate.closeAll()
+ this.selectedElement.setData(this.currentView.features?.data?.[0])
+ }
}
diff --git a/src/UI/BigComponents/ThemeIntroPanel.svelte b/src/UI/BigComponents/ThemeIntroPanel.svelte
index 922153eb7..d25ff5947 100644
--- a/src/UI/BigComponents/ThemeIntroPanel.svelte
+++ b/src/UI/BigComponents/ThemeIntroPanel.svelte
@@ -15,6 +15,7 @@
import Add from "../../assets/svg/Add.svelte"
import Location_refused from "../../assets/svg/Location_refused.svelte"
import Location from "../../assets/svg/Location.svelte"
+ import SpecialTranslation from "../Popup/TagRendering/SpecialTranslation.svelte"
/**
* The theme introduction panel
@@ -48,6 +49,7 @@
+
|
{#if layout.layers.some((l) => l.presets?.length > 0)}
diff --git a/src/UI/Comparison/ComparisonTable.svelte b/src/UI/Comparison/ComparisonTable.svelte
index 4fd513a0b..0424811f0 100644
--- a/src/UI/Comparison/ComparisonTable.svelte
+++ b/src/UI/Comparison/ComparisonTable.svelte
@@ -109,16 +109,17 @@
{#if !readonly}
|
-
-
-
{/if}
- {#if !readonly}
-
|
- {/if}
+
{#if $different.length > 0}
+ {#if !readonly}
+
+
+
+
|
+ {/if}
{#each $different as key (key)}
0}
+ {#if !readonly}
+
+
+
+
+
+ {/if}
{#if currentStep === "init"}
{#each $missing as key (key)}
diff --git a/src/UI/SpecialVisualization.ts b/src/UI/SpecialVisualization.ts
index ff0547eb5..23253a2f8 100644
--- a/src/UI/SpecialVisualization.ts
+++ b/src/UI/SpecialVisualization.ts
@@ -1,12 +1,12 @@
import { Store, UIEventSource } from "../Logic/UIEventSource"
import BaseUIElement from "./BaseUIElement"
import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"
-import { IndexedFeatureSource, WritableFeatureSource } from "../Logic/FeatureSource/FeatureSource"
+import { FeatureSource, IndexedFeatureSource, WritableFeatureSource } from "../Logic/FeatureSource/FeatureSource"
import { OsmConnection } from "../Logic/Osm/OsmConnection"
import { Changes } from "../Logic/Osm/Changes"
import { ExportableMap, MapProperties } from "../Models/MapProperties"
import LayerState from "../Logic/State/LayerState"
-import { Feature, Geometry, Point } from "geojson"
+import { Feature, Geometry, Point, Polygon } from "geojson"
import FullNodeDatabaseSource from "../Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource"
import { MangroveIdentity } from "../Logic/Web/MangroveReviews"
import { GeoIndexedStoreForLayer } from "../Logic/FeatureSource/Actors/GeoIndexedStore"
@@ -61,8 +61,10 @@ export interface SpecialVisualizationState {
readonly selectedElement: UIEventSource
+ readonly currentView: FeatureSource>
readonly favourites: FavouritesFeatureSource
+
/**
* If data is currently being fetched from external sources
*/
diff --git a/src/UI/ThemeViewGUI.svelte b/src/UI/ThemeViewGUI.svelte
index 9b4ed5834..d54cf8565 100644
--- a/src/UI/ThemeViewGUI.svelte
+++ b/src/UI/ThemeViewGUI.svelte
@@ -271,7 +271,7 @@
{#if currentViewLayer?.tagRenderings && currentViewLayer.defaultIcon()}
{
- state.selectedElement.setData(state.currentView.features?.data?.[0])
+ state.selectCurrentView()
}}
on:keydown={forwardEventToMap}
htmlElem={openCurrentViewLayerButton}