diff --git a/apps/transport/client/javascripts/explore.js b/apps/transport/client/javascripts/explore.js
index 1e8b5c15db..cb63c6b429 100644
--- a/apps/transport/client/javascripts/explore.js
+++ b/apps/transport/client/javascripts/explore.js
@@ -59,9 +59,17 @@ function getTooltip ({ object, layer }) {
if (layer.id === 'bnlc-layer') {
return { html: `Aire de covoiturage
${object.properties.nom_lieu}` }
} else if (layer.id === 'parkings_relais-layer') {
- return { html: `Parking relai
${object.properties.nom}
Capacité : ${object.properties.nb_pr} places` }
+ return { html: `Parking relais
${object.properties.nom}
Capacité : ${object.properties.nb_pr} places` }
} else if (layer.id === 'zfe-layer') {
return { html: 'Zone à Faible Émission' }
+ } else if (layer.id === 'irve-layer') {
+ return {
+ html: `Infrastructure de recharge
+ ${object.properties.nom_station}
+ Enseigne : ${object.properties.nom_enseigne}
+ Identifiant : ${object.properties.id_station_itinerance}
+ Nombre de points de charge : ${object.properties.nbre_pdc}`
+ }
} else {
return { html: `Position temps-réel
transport_resource: ${object.transport.resource_id}
id: ${object.vehicle.id}` }
}
@@ -75,6 +83,7 @@ function getLayers (layers) {
layersArray.push(layers.bnlc)
layersArray.push(layers.parkings_relais)
layersArray.push(layers.zfe)
+ layersArray.push(layers.irve)
return layersArray
}
@@ -131,6 +140,16 @@ document.getElementById('zfe-check').addEventListener('change', (event) => {
}
})
+// Handle IRVE toggle
+document.getElementById('irve-check').addEventListener('change', (event) => {
+ if (event.currentTarget.checked) {
+ fetch('/api/geo-query?data=irve')
+ .then(data => updateIRVELayer(data.json()))
+ } else {
+ updateIRVELayer(null)
+ }
+})
+
function updateBNLCLayer (geojson) {
layers.bnlc = createPointsLayer(geojson, 'bnlc-layer')
deckGLLayer.setProps({ layers: getLayers(layers) })
@@ -143,12 +162,17 @@ function updateZFELayer (geojson) {
layers.zfe = createPointsLayer(geojson, 'zfe-layer')
deckGLLayer.setProps({ layers: getLayers(layers) })
}
+function updateIRVELayer (geojson) {
+ layers.irve = createPointsLayer(geojson, 'irve-layer')
+ deckGLLayer.setProps({ layers: getLayers(layers) })
+}
function createPointsLayer (geojson, id) {
const fillColor = {
'bnlc-layer': [255, 174, 0, 100],
'parkings_relais-layer': [0, 33, 70, 100],
- 'zfe-layer': [155, 89, 182, 100]
+ 'zfe-layer': [155, 89, 182, 100],
+ 'irve-layer': [245, 40, 145, 100]
}[id]
return new GeoJsonLayer({
diff --git a/apps/transport/client/stylesheets/components/_explore.scss b/apps/transport/client/stylesheets/components/_explore.scss
index 8d97d44234..f4ff945a69 100644
--- a/apps/transport/client/stylesheets/components/_explore.scss
+++ b/apps/transport/client/stylesheets/components/_explore.scss
@@ -19,4 +19,7 @@
#zfe-check:checked {
background-color: rgb(155, 89, 182);
}
+ #irve-check:checked {
+ background-color: rgb(245, 40, 145);
+ }
}
diff --git a/apps/transport/lib/transport_web/api/controllers/geo_query_controller.ex b/apps/transport/lib/transport_web/api/controllers/geo_query_controller.ex
index 4273225c1d..dfe489dc5d 100644
--- a/apps/transport/lib/transport_web/api/controllers/geo_query_controller.ex
+++ b/apps/transport/lib/transport_web/api/controllers/geo_query_controller.ex
@@ -34,6 +34,10 @@ defmodule TransportWeb.API.GeoQueryController do
"zfe" => %{
dataset: Transport.Jobs.LowEmissionZonesToGeoData.relevant_dataset(),
transform_fn: &zfe_geojson/1
+ },
+ "irve" => %{
+ dataset: Transport.Jobs.IRVEToGeoData.relevant_dataset(),
+ transform_fn: &irve_geojson/1
}
}
end
@@ -58,4 +62,19 @@ defmodule TransportWeb.API.GeoQueryController do
DB.GeoData.geo_data_as_geojson(geo_data_import, add_fields)
end
+
+ def irve_geojson(%DB.GeoDataImport{} = geo_data_import) do
+ add_fields = fn query ->
+ from(g in query,
+ select_merge: %{
+ nom_enseigne: fragment("payload->>'nom_enseigne'"),
+ id_station_itinerance: fragment("payload->>'id_station_itinerance'"),
+ nom_station: fragment("payload->>'nom_station'"),
+ nbre_pdc: fragment("payload->>'nbre_pdc'")
+ }
+ )
+ end
+
+ DB.GeoData.geo_data_as_geojson(geo_data_import, add_fields)
+ end
end
diff --git a/apps/transport/lib/transport_web/controllers/explore_controller.ex b/apps/transport/lib/transport_web/controllers/explore_controller.ex
index 0f8e7ae6ed..52c38e72a2 100644
--- a/apps/transport/lib/transport_web/controllers/explore_controller.ex
+++ b/apps/transport/lib/transport_web/controllers/explore_controller.ex
@@ -6,6 +6,7 @@ defmodule TransportWeb.ExploreController do
|> assign(:bnlc_dataset, Transport.Jobs.BNLCToGeoData.relevant_dataset())
|> assign(:parcs_relais_dataset, Transport.Jobs.ParkingsRelaisToGeoData.relevant_dataset())
|> assign(:zfe_dataset, Transport.Jobs.LowEmissionZonesToGeoData.relevant_dataset())
+ |> assign(:irve_dataset, Transport.Jobs.IRVEToGeoData.relevant_dataset())
|> render("explore.html")
end
diff --git a/apps/transport/lib/transport_web/templates/explore/explore.html.heex b/apps/transport/lib/transport_web/templates/explore/explore.html.heex
index 8be0ad721a..886cdeb9ed 100644
--- a/apps/transport/lib/transport_web/templates/explore/explore.html.heex
+++ b/apps/transport/lib/transport_web/templates/explore/explore.html.heex
@@ -2,60 +2,83 @@
<% bnlc_link = dataset_path(@conn, :details, @bnlc_dataset.slug) %>
<% parcs_relais_link = dataset_path(@conn, :details, @parcs_relais_dataset.slug) %>
<% zfe_link = dataset_path(@conn, :details, @zfe_dataset.slug) %>
+<% irve_link = dataset_path(@conn, :details, @irve_dataset.slug) %>
<%= dgettext("explore", "Transport Explore") %>
-
-
-
-
- <%= dgettext("explore", "Real time vehicle positions (GTFS-RT)") %>
-
- <%= raw(
- dgettext("explore", "gtfs-rt-explanation",
- link:
- safe_to_string(link(dgettext("explore", "GTFS-RT feeds referenced on this site"), to: real_time_datasets))
- )
- ) %>
-
-
-
-
-
-
-
- <%= dgettext("explore", "Carpooling areas national database") %>
-
- <%= raw(
- dgettext("explore", "bnlc-explanation",
- link: safe_to_string(link(dgettext("explore", "dataset"), to: bnlc_link))
- )
- ) %>
-
-
-
-
-
-
- <%= dgettext("explore", "Park and ride database") %>
-
- <%= raw(
- dgettext("explore", "park-and-ride-explanation",
- link: safe_to_string(link(dgettext("explore", "dataset"), to: parcs_relais_link))
- )
- ) %>
-
-
-
-
-
-
- <%= dgettext("explore", "Low emission zones database") %>
-
- <%= raw(
- dgettext("explore", "lez-explanation", link: safe_to_string(link(dgettext("explore", "dataset"), to: zfe_link)))
- ) %>
-
+
+
+
+
+
+
+ <%= dgettext("explore", "Real time vehicle positions (GTFS-RT)") %>
+
+ <%= raw(
+ dgettext("explore", "gtfs-rt-explanation",
+ link:
+ safe_to_string(
+ link(dgettext("explore", "GTFS-RT feeds referenced on this site"), to: real_time_datasets)
+ )
+ )
+ ) %>
+
+
+
+
+
+
+ <%= dgettext("explore", "Carpooling areas national database") %>
+
+ <%= raw(
+ dgettext("explore", "bnlc-explanation",
+ link: safe_to_string(link(dgettext("explore", "dataset"), to: bnlc_link))
+ )
+ ) %>
+
+
+
+
+
+
+ <%= dgettext("explore", "Park and ride database") %>
+
+ <%= raw(
+ dgettext("explore", "park-and-ride-explanation",
+ link: safe_to_string(link(dgettext("explore", "dataset"), to: parcs_relais_link))
+ )
+ ) %>
+
+
+
+
+
+
+
+
+ <%= dgettext("explore", "Low emission zones database") %>
+
+ <%= raw(
+ dgettext("explore", "lez-explanation",
+ link: safe_to_string(link(dgettext("explore", "dataset"), to: zfe_link))
+ )
+ ) %>
+
+
+
+
+
+
+ <%= dgettext("explore", "IRVE map") %>
+
+ <%= raw(
+ dgettext("explore", "irve-explanation",
+ link: safe_to_string(link(dgettext("explore", "dataset"), to: irve_link))
+ )
+ ) %>
+
+
+
diff --git a/apps/transport/priv/gettext/en/LC_MESSAGES/explore.po b/apps/transport/priv/gettext/en/LC_MESSAGES/explore.po
index abb3ba1355..dca84fc0da 100644
--- a/apps/transport/priv/gettext/en/LC_MESSAGES/explore.po
+++ b/apps/transport/priv/gettext/en/LC_MESSAGES/explore.po
@@ -110,3 +110,11 @@ msgstr "Consolidated GTFS stops map (beta)"
#, elixir-autogen, elixir-format
msgid "Consolidated GTFS stops map explanation"
msgstr "This map consolidates all the GTFS referenced on this site. It is in beta and may include outdated or duplicate data (see %{link}). Feedback is most welcome."
+
+#, elixir-autogen, elixir-format
+msgid "irve-explanation"
+msgstr "Consolidated national map of charging stations static %{link}."
+
+#, elixir-autogen, elixir-format
+msgid "IRVE map"
+msgstr "Electric Vehicule Charging Infrastructure database"
diff --git a/apps/transport/priv/gettext/explore.pot b/apps/transport/priv/gettext/explore.pot
index 51d2d0c16f..bea1c89134 100644
--- a/apps/transport/priv/gettext/explore.pot
+++ b/apps/transport/priv/gettext/explore.pot
@@ -109,3 +109,11 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Consolidated GTFS stops map explanation"
msgstr ""
+
+#, elixir-autogen, elixir-format
+msgid "irve-explanation"
+msgstr ""
+
+#, elixir-autogen, elixir-format
+msgid "IRVE map"
+msgstr ""
diff --git a/apps/transport/priv/gettext/fr/LC_MESSAGES/explore.po b/apps/transport/priv/gettext/fr/LC_MESSAGES/explore.po
index 708360f204..35b4b675a1 100644
--- a/apps/transport/priv/gettext/fr/LC_MESSAGES/explore.po
+++ b/apps/transport/priv/gettext/fr/LC_MESSAGES/explore.po
@@ -110,3 +110,11 @@ msgstr "Carte consolidée des arrêts GTFS (beta)"
#, elixir-autogen, elixir-format, fuzzy
msgid "Consolidated GTFS stops map explanation"
msgstr "Cette carte consolide tous les GTFS référencés sur ce site. En beta, peut inclure des éléments expirés ou des doublons (voir %{link}). Vos retours sont les bienvenus."
+
+#, elixir-autogen, elixir-format, fuzzy
+msgid "irve-explanation"
+msgstr "Carte du %{link} consolidé des IRVE (données statiques)."
+
+#, elixir-autogen, elixir-format
+msgid "IRVE map"
+msgstr "Infrastructures de Recharge des Véhicules Électriques (IRVE)"
diff --git a/apps/transport/test/transport_web/controllers/api/geo_query_controller_test.exs b/apps/transport/test/transport_web/controllers/api/geo_query_controller_test.exs
index de29c9e084..feb79cee1f 100644
--- a/apps/transport/test/transport_web/controllers/api/geo_query_controller_test.exs
+++ b/apps/transport/test/transport_web/controllers/api/geo_query_controller_test.exs
@@ -9,6 +9,7 @@ defmodule TransportWeb.API.GeoQueryControllerTest do
test "a BNLC geo query", %{conn: conn} do
insert_parcs_relais_dataset()
insert_zfe_dataset()
+ insert_irve_dataset()
%{id: dataset_id} = insert_bnlc_dataset()
%{id: resource_history_id} = insert(:resource_history, %{payload: %{"dataset_id" => dataset_id}})
@@ -47,6 +48,7 @@ defmodule TransportWeb.API.GeoQueryControllerTest do
test "a parkings relais geo query", %{conn: conn} do
insert_bnlc_dataset()
insert_zfe_dataset()
+ insert_irve_dataset()
%{id: dataset_id} = insert_parcs_relais_dataset()
%{id: resource_history_id} = insert(:resource_history, %{payload: %{"dataset_id" => dataset_id}})
@@ -97,6 +99,7 @@ defmodule TransportWeb.API.GeoQueryControllerTest do
test "a ZFE geo query", %{conn: conn} do
insert_bnlc_dataset()
insert_parcs_relais_dataset()
+ insert_irve_dataset()
%{id: dataset_id} = insert_zfe_dataset()
%{id: resource_history_id} = insert(:resource_history, %{payload: %{"dataset_id" => dataset_id}})
@@ -150,10 +153,74 @@ defmodule TransportWeb.API.GeoQueryControllerTest do
}
end
+ test "a IRVE geo query", %{conn: conn} do
+ insert_parcs_relais_dataset()
+ insert_zfe_dataset()
+ insert_bnlc_dataset()
+ %{id: dataset_id} = insert_irve_dataset()
+
+ %{id: resource_history_id} = insert(:resource_history, %{payload: %{"dataset_id" => dataset_id}})
+ %{id: geo_data_import_id} = insert(:geo_data_import, %{resource_history_id: resource_history_id})
+
+ point1 = %Geo.Point{coordinates: {1, 1}, srid: 4326}
+ point2 = %Geo.Point{coordinates: {2, 2}, srid: 4326}
+
+ insert(:geo_data, %{
+ geo_data_import_id: geo_data_import_id,
+ geom: point1,
+ payload: %{
+ "nom_enseigne" => "Recharge Super 95",
+ "id_station_itinerance" => "FRELCPEYSPC",
+ "nom_station" => "Dehaven Centre",
+ "nbre_pdc" => 2
+ }
+ })
+
+ insert(:geo_data, %{
+ geo_data_import_id: geo_data_import_id,
+ geom: point2,
+ payload: %{
+ "nom_enseigne" => "Recharge Super 95",
+ "id_station_itinerance" => "FRELCPBLOHM",
+ "nom_station" => "Gemina Port",
+ "nbre_pdc" => 3
+ }
+ })
+
+ conn = conn |> get(TransportWeb.API.Router.Helpers.geo_query_path(conn, :index, data: "irve"))
+
+ assert json_response(conn, 200) == %{
+ "type" => "FeatureCollection",
+ "features" => [
+ %{
+ "geometry" => %{"coordinates" => [1, 1], "type" => "Point"},
+ "properties" => %{
+ "nom_enseigne" => "Recharge Super 95",
+ "id_station_itinerance" => "FRELCPEYSPC",
+ "nom_station" => "Dehaven Centre",
+ "nbre_pdc" => "2"
+ },
+ "type" => "Feature"
+ },
+ %{
+ "geometry" => %{"coordinates" => [2, 2], "type" => "Point"},
+ "properties" => %{
+ "nom_enseigne" => "Recharge Super 95",
+ "id_station_itinerance" => "FRELCPBLOHM",
+ "nom_station" => "Gemina Port",
+ "nbre_pdc" => "3"
+ },
+ "type" => "Feature"
+ }
+ ]
+ }
+ end
+
test "404 cases", %{conn: conn} do
insert_bnlc_dataset()
insert_parcs_relais_dataset()
insert_zfe_dataset()
+ insert_irve_dataset()
conn
|> get(TransportWeb.API.Router.Helpers.geo_query_path(conn, :index))
@@ -186,4 +253,13 @@ defmodule TransportWeb.API.GeoQueryControllerTest do
organization: Application.fetch_env!(:transport, :datagouvfr_transport_publisher_label)
})
end
+
+ defp insert_irve_dataset do
+ insert(:dataset, %{
+ type: "charging-stations",
+ custom_title: "Infrastructures de Recharge pour Véhicules Électriques - IRVE",
+ organization: "data.gouv.fr",
+ organization_id: "646b7187b50b2a93b1ae3d45"
+ })
+ end
end
diff --git a/apps/transport/test/transport_web/controllers/explore_controller_test.exs b/apps/transport/test/transport_web/controllers/explore_controller_test.exs
index 17c6f4e327..32c8e06c26 100644
--- a/apps/transport/test/transport_web/controllers/explore_controller_test.exs
+++ b/apps/transport/test/transport_web/controllers/explore_controller_test.exs
@@ -17,6 +17,13 @@ defmodule TransportWeb.ExploreControllerTest do
organization: pan_org
})
+ insert(:dataset, %{
+ type: "charging-stations",
+ custom_title: "Infrastructures de Recharge pour Véhicules Électriques - IRVE",
+ organization: "data.gouv.fr",
+ organization_id: "646b7187b50b2a93b1ae3d45"
+ })
+
:ok
end