Skip to content

Commit

Permalink
Rajout des IRVE à la carte d’exploration (#3323)
Browse files Browse the repository at this point in the history
* WIP

* Base map

* specific irve color

* add custom fields

* i18n

* checkboxes on two colums

* fix locales

* mix format

* typo

* Update apps/transport/client/javascripts/explore.js

Co-authored-by: Antoine Augusti <[email protected]>

* fix js linter problem

* geo_query test

* explore controller test

* mix format

---------

Co-authored-by: Antoine Augusti <[email protected]>
  • Loading branch information
vdegove and AntoineAugusti authored Jul 18, 2023
1 parent 99f95c6 commit 78608e5
Show file tree
Hide file tree
Showing 10 changed files with 230 additions and 53 deletions.
28 changes: 26 additions & 2 deletions apps/transport/client/javascripts/explore.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,17 @@ function getTooltip ({ object, layer }) {
if (layer.id === 'bnlc-layer') {
return { html: `<strong>Aire de covoiturage</strong><br>${object.properties.nom_lieu}` }
} else if (layer.id === 'parkings_relais-layer') {
return { html: `<strong>Parking relai</strong><br>${object.properties.nom}<br>Capacité : ${object.properties.nb_pr} places` }
return { html: `<strong>Parking relais</strong><br>${object.properties.nom}<br>Capacité : ${object.properties.nb_pr} places` }
} else if (layer.id === 'zfe-layer') {
return { html: '<strong>Zone à Faible Émission</strong>' }
} else if (layer.id === 'irve-layer') {
return {
html: `<strong>Infrastructure de recharge</strong><br>
${object.properties.nom_station}<br>
Enseigne&nbsp;: ${object.properties.nom_enseigne}<br>
Identifiant&nbsp;: ${object.properties.id_station_itinerance}<br>
Nombre de points de charge&nbsp;: ${object.properties.nbre_pdc}`
}
} else {
return { html: `<strong>Position temps-réel</strong><br>transport_resource: ${object.transport.resource_id}<br>id: ${object.vehicle.id}` }
}
Expand All @@ -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
}

Expand Down Expand Up @@ -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) })
Expand All @@ -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({
Expand Down
3 changes: 3 additions & 0 deletions apps/transport/client/stylesheets/components/_explore.scss
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,7 @@
#zfe-check:checked {
background-color: rgb(155, 89, 182);
}
#irve-check:checked {
background-color: rgb(245, 40, 145);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
125 changes: 74 additions & 51 deletions apps/transport/lib/transport_web/templates/explore/explore.html.heex
Original file line number Diff line number Diff line change
Expand Up @@ -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) %>
<div class="container dataset-page-top">
<h2><%= dgettext("explore", "Transport Explore") %></h2>

<div class="checkbox-explore pb-24">
<input id="gtfs-rt-check" name="gtfs-rt" type="checkbox" value="true" checked />
<details>
<summary>
<%= dgettext("explore", "Real time vehicle positions (GTFS-RT)") %>
</summary>
<%= raw(
dgettext("explore", "gtfs-rt-explanation",
link:
safe_to_string(link(dgettext("explore", "GTFS-RT feeds referenced on this site"), to: real_time_datasets))
)
) %>
</details>
</div>

<div class="checkbox-explore pb-24">
<input id="bnlc-check" name="bnlc" type="checkbox" value="true" />
<details>
<summary>
<%= dgettext("explore", "Carpooling areas national database") %>
</summary>
<%= raw(
dgettext("explore", "bnlc-explanation",
link: safe_to_string(link(dgettext("explore", "dataset"), to: bnlc_link))
)
) %>
</details>
</div>
<div class="checkbox-explore pb-24">
<input id="parkings_relais-check" name="parkings_relais" type="checkbox" value="true" />
<details>
<summary>
<%= dgettext("explore", "Park and ride database") %>
</summary>
<%= raw(
dgettext("explore", "park-and-ride-explanation",
link: safe_to_string(link(dgettext("explore", "dataset"), to: parcs_relais_link))
)
) %>
</details>
</div>
<div class="checkbox-explore pb-24">
<input id="zfe-check" name="zfe" type="checkbox" value="true" />
<details>
<summary>
<%= dgettext("explore", "Low emission zones database") %>
</summary>
<%= raw(
dgettext("explore", "lez-explanation", link: safe_to_string(link(dgettext("explore", "dataset"), to: zfe_link)))
) %>
</details>
<div class="row">
<div>
<div class="checkbox-explore pb-24">
<input id="gtfs-rt-check" name="gtfs-rt" type="checkbox" value="true" checked />
<details>
<summary>
<%= dgettext("explore", "Real time vehicle positions (GTFS-RT)") %>
</summary>
<%= raw(
dgettext("explore", "gtfs-rt-explanation",
link:
safe_to_string(
link(dgettext("explore", "GTFS-RT feeds referenced on this site"), to: real_time_datasets)
)
)
) %>
</details>
</div>
<div class="checkbox-explore pb-24">
<input id="bnlc-check" name="bnlc" type="checkbox" value="true" />
<details>
<summary>
<%= dgettext("explore", "Carpooling areas national database") %>
</summary>
<%= raw(
dgettext("explore", "bnlc-explanation",
link: safe_to_string(link(dgettext("explore", "dataset"), to: bnlc_link))
)
) %>
</details>
</div>
<div class="checkbox-explore pb-24">
<input id="parkings_relais-check" name="parkings_relais" type="checkbox" value="true" />
<details>
<summary>
<%= dgettext("explore", "Park and ride database") %>
</summary>
<%= raw(
dgettext("explore", "park-and-ride-explanation",
link: safe_to_string(link(dgettext("explore", "dataset"), to: parcs_relais_link))
)
) %>
</details>
</div>
</div>
<div>
<div class="checkbox-explore pb-24">
<input id="zfe-check" name="zfe" type="checkbox" value="true" />
<details>
<summary>
<%= dgettext("explore", "Low emission zones database") %>
</summary>
<%= raw(
dgettext("explore", "lez-explanation",
link: safe_to_string(link(dgettext("explore", "dataset"), to: zfe_link))
)
) %>
</details>
</div>
<div class="checkbox-explore pb-24">
<input id="irve-check" name="irve" type="checkbox" value="true" />
<details>
<summary>
<%= dgettext("explore", "IRVE map") %>
</summary>
<%= raw(
dgettext("explore", "irve-explanation",
link: safe_to_string(link(dgettext("explore", "dataset"), to: irve_link))
)
) %>
</details>
</div>
</div>
</div>
</div>

Expand Down
8 changes: 8 additions & 0 deletions apps/transport/priv/gettext/en/LC_MESSAGES/explore.po
Original file line number Diff line number Diff line change
Expand Up @@ -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"
8 changes: 8 additions & 0 deletions apps/transport/priv/gettext/explore.pot
Original file line number Diff line number Diff line change
Expand Up @@ -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 ""
8 changes: 8 additions & 0 deletions apps/transport/priv/gettext/fr/LC_MESSAGES/explore.po
Original file line number Diff line number Diff line change
Expand Up @@ -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)"
Original file line number Diff line number Diff line change
Expand Up @@ -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}})
Expand Down Expand Up @@ -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}})
Expand Down Expand Up @@ -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}})
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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
Loading

0 comments on commit 78608e5

Please sign in to comment.