Import/Catalogue/Chargy Import Luxembourg

From OpenStreetMap Wiki
Jump to navigation Jump to search


Chargy Import Luxembourg is an import of charging stations available to the public in Luxembourg. The import is currently at phase 3.

Goals

As of 14 March 2018, there are 24 amenity=charging_station POIs in Luxembourg. The dataset provided by Chargy currently has about 219 charging stations (12/01/2019), and is expected to grow to 800 by 2020.

Schedule

Phase 1 - Planning

Goal: Get community approval, write documentation and tools, prepare data.

Timeframe: Early to mid-March 2018

Status: Done

Phase 2 - Import

Goal: First import of data, verification of all existing amenity=charging_station in Luxembourg.

Timeframe: mid-March 2018

Status: Done, https://www.openstreetmap.org/changeset/57226075 for the initial import.

Phase 3 - Maintenance

Goal: Update data.

Timeframe: TBD

Import Data

Background

The data source can be found on the Luxembourgish Data Platform.

Data source site: https://data.public.lu/fr/datasets/bornes-de-chargement-publiques-pour-voitures-electriques/
Data license: https://creativecommons.org/publicdomain/zero/1.0/
Type of license (if applicable): CC0 1.0 Universal (CC0 1.0)
ODbL Compliance verified: yes

Import Type

The import will be a recurring import, validation before uploading will always be done manually (see Conflation).

Data will be imported using JOSM.

Data Preparation

Data Description

It is important to understand the difference between charging stations and charging points. A charging station can be compared to a fuel station, while a charging point can be compared to a fuel pump. The provided dataset contains coordinates for charging stations, not charging points. Furthermore, only the charging points have unique Ids, however those do not match the Id found on the back of the physical machine. Charging stations don’t have ids in the dataset, only name, coordinates and address.

Tagging Plans

Here is a sample entry from the dataset:

<Placemark>
    <name>PLACEHOLDER_NAME</name>
    <visibility>1</visibility>
    <address>PLACEHOLDER_ADDRESS</address>
    <description>&lt;span&gt;&lt;b&gt;2&lt;/b&gt; connectors with 22kW and Type 2 connector&lt;span&gt;&lt;br/&gt;&lt;span&gt;&lt;b&gt;2&lt;/b&gt; available connectors&lt;span&gt;&lt;br/&gt;&lt;span&gt;&lt;b&gt;0&lt;/b&gt; occupied connectors&lt;span&gt;&lt;br/&gt;</description>
    <styleUrl>#AVAILABLE</styleUrl>
    <ExtendedData>
        <Data name="CPnum">
            <displayName>Number of chargingpoints</displayName>
            <value>2</value>
        </Data>
        <Data name="chargingdevice">
            <displayName>Charging device</displayName>
            <value>{"id":PLACEHOLDER_ID,"name":"CP5007","numberOfConnectors":2,"connectors":[{"id":51566,"name":"CP5007 - 1","maxchspeed":22.0,"connector":1,"description":"AVAILABLE"},{"id":51603,"name":"CP5007 - 2","maxchspeed":22.0,"connector":2,"description":"AVAILABLE"}]}</value>
        </Data>
    </ExtendedData>
    <Point>
        <altitudeMode>clampToGround</altitudeMode>
        <coordinates>PLACEHOLDER_COORDINATE_1,PLACEHOLDER_COORDINATE_2</coordinates>
    </Point>
</Placemark>

Here is the mapping to OSM tags:

OSM Key OSM Value Description
amenity charging_station
authentication:membership_card yes
brand Chargy
capacity 2 Count of available sockets on this location.
car yes
devices 1 Count of physical stations on this location.
name PLACEHOLDER_NAME
opening_hours 24/7
operator Chargy
phone PLACEHOLDER_PHONE
socket:type2 2 Parsed from the description-content, even though this value is standard for all Chargy stations.
socket:type2:output 22kW Parsed from the description-content, even though this value is standard for all Chargy stations.

Changeset Tags

Data Transformation

To transform the source data into a more appropriate format, we use ChargingStations2GeoJson, a Python 3 script written specifically for this purpose. Even though some values are standardized across all charging stations, the script still checks the data and makes sure it contains the appropriate texts. Logging allows us to find "weird" entries, and if something looks odd, we skip it (and log it, for manual verification). We purposefully chose a very defensive approach, as to not import broken data.

Data Transformation Results

{
   "type":"FeatureCollection",
   "features":[
      {
         "type":"Feature",
         "properties":{
            "authentication:membership_card":"yes",
            "operator":"Chargy",
            "socket:type2":2,
            "opening_hours":"24/7",
            "socket:type2:output":"22kW",
            "capacity":2,
            "devices":1,
            "name":"PLACEHOLDER_NAME",
            "brand":"Chargy",
            "phone":"PLACEHOLDER_PHONE",
            "amenity":"charging_station",
            "car":"yes"
         },
         "geometry":{
            "type":"Point",
            "coordinates":[
               PLACEHOLDER_COORDINATE_1,
               PLACEHOLDER_COORDINATE_2
            ]
         }
      }
   ]
}

Data Merge Workflow

Team Approach

Currently this import is being organized by User icon 2.svgdmlu (on osm), with the support of #osm-fr and talk-lu.

References

The Page amenity=charging_station will be used as a reference.

Link to talk-lu announcement: https://lists.openstreetmap.org/pipermail/talk-lu/2018-March/000189.html

Link to imports announcement: https://lists.openstreetmap.org/pipermail/imports/2018-March/005434.html

Workflow and Conflation

  • Download the Chargy dataset from the OpenData Portal (click here)
  • Download the conversion utility (click here)
  • Execute the conversion utility, you should now have a geojson file (Refer to README on Github)
  • Read the logs for additional information
  • Open JOSM and install the Conflation Plugin
  • Open the geojson file in JOSM
  • Retrieve all charging stations from OSM into a new OSM Layer using the following Overpass query:
   [out:xml][timeout:90];
   Template:GeocodeArea:Luxembourg->.searchArea;
   (
   nwr["amenity"="charging_station"](area.searchArea);
   );
   (._;>;);
   out meta;
  • Click "Configure"
  • Select all items (CTRL-A) in the geojson layer and press the Reference "Freeze" button
  • Select all items (CTRL-A) in the OSM layer and press the Subject "Freeze" button
  • Set the Distance to 150
  • Click "Generate Matches"
  • Conflate the points, set the appropriate changeset tags and upload the data using a dedicated user account
  • In the event that something does goes wrong, revert the whole changeset using the JOSM Reverter Plugin

QA

Why did you remove ref:chargy=*?

First of all, the value is not used in the conflation process. Additionally, the ref:chargy=* for a charging station is calculated by concatenating the individual charging point ids. As new charging points are added or removed, this ID will be modified and does therefore not identify an individual charging station.