docs+tooling: OSM POI export workflow + Shell stations data; graded DQ report
- scripts/export_osm_pois.py: reproducible OSM .pbf -> GeoJSON+CSV exporter (amenity/brand filter; pyosmium via uv, no system deps). - docs/OSM_POI_EXPORT.md: runbook (extract -> export -> FleetNow layer) with reference counts (1,794 fuel stations; Shell=232). - shell_stations.geojson/.csv: the Shell export of record (232 pts, kenya-260605). - docs/reports/260608_fleet_registry_data_quality.*: rewritten as a graded (Red/Amber/Yellow) action plan with owners. - .gitignore: ignore *.osm.pbf (331MB, reproducible). CLAUDE.md: index the new docs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
376965e978
commit
3015104f5b
8 changed files with 3124 additions and 4224 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -13,6 +13,9 @@ __pycache__/
|
|||
|
||||
# OS
|
||||
.DS_Store
|
||||
|
||||
# OSM extracts (large, reproducible from download — see docs/OSM_POI_EXPORT.md)
|
||||
*.osm.pbf
|
||||
Thumbs.db
|
||||
|
||||
# Backups
|
||||
|
|
|
|||
|
|
@ -105,7 +105,9 @@ docs/ # Reference docs (connections, API, KPIs, project co
|
|||
docs/PLATFORM_OVERVIEW.html # Current-state platform reference (architecture, deploy, read-API,
|
||||
# full DB schema, Grafana panels) — open in a browser. Post n8n→fleetapi.
|
||||
docs/DWH_PIPELINE.md # DWH pipeline operations runbook (setup, troubleshooting)
|
||||
docs/OSM_POI_EXPORT.md # Runbook: OSM .pbf → POI GeoJSON → FleetNow map layer (Shell stations)
|
||||
docs/superpowers/ # Pitch specs and implementation plans (not deployed code)
|
||||
scripts/export_osm_pois.py # OSM .pbf → GeoJSON+CSV POI exporter (amenity/brand filter); see OSM_POI_EXPORT.md
|
||||
dwh/ # DWH migrations for tracksolid_dwh@31.97.44.246:5888
|
||||
# 260423_dwh_ddl_v1.sql — bronze/silver/gold schemas + roles
|
||||
# 261001_dwh_control.sql — watermarks + run log
|
||||
|
|
|
|||
50
docs/OSM_POI_EXPORT.md
Normal file
50
docs/OSM_POI_EXPORT.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# OSM POI Export → FleetNow map layer
|
||||
|
||||
How we turn an OpenStreetMap extract into a toggleable **FleetNow overlay layer**
|
||||
(e.g. the 232 Shell fuel stations). Reproducible end-to-end.
|
||||
|
||||
## 1. Get a Kenya extract
|
||||
|
||||
Download a `.osm.pbf` (Geofabrik / BBBike), e.g. `kenya-260605.osm.pbf`.
|
||||
|
||||
> **Do not commit the `.pbf`** — it's ~331 MB and is gitignored (`*.osm.pbf`).
|
||||
> It's fully reproducible from the download.
|
||||
|
||||
## 2. Export the POIs
|
||||
|
||||
No system tooling required — `pyosmium`'s prebuilt wheel is fetched by `uv`:
|
||||
|
||||
```bash
|
||||
uv run --no-project --with osmium python scripts/export_osm_pois.py \
|
||||
kenya-260605.osm.pbf --amenity fuel --brand Shell \
|
||||
--out-geojson shell_stations.geojson --out-csv shell_stations.csv
|
||||
```
|
||||
|
||||
- Gas stations are OSM **`amenity=fuel`**. Brand is the **`brand`** tag — but only
|
||||
~36% of Kenyan stations carry it (≈92% have a `name`), so when `--brand` is given
|
||||
and a feature has no `brand` tag, the script falls back to matching `name`/`operator`.
|
||||
- Omit `--brand` to export **every** station of that amenity.
|
||||
- Nodes use their own coordinate; ways/areas use their node **centroid**.
|
||||
|
||||
**Reference counts** (extract `kenya-260605`, captured 2026-06-08):
|
||||
|
||||
| Metric | Value |
|
||||
|---|---|
|
||||
| Total fuel stations (`amenity=fuel`) | 1,794 (1,582 nodes + 212 areas) |
|
||||
| With a `brand` tag | 659 (36%) · with a `name` | 1,652 (92%) |
|
||||
| **Shell** | **232** (209 `brand=Shell` + 23 by name) |
|
||||
| Other top brands | Total 154 · Rubis 147 · TotalEnergies 50 · Kobil 10 |
|
||||
|
||||
## 3. Add it to FleetNow as a layer
|
||||
|
||||
Copy the GeoJSON into the FleetNow repo's `layers/` directory and register it —
|
||||
full details in the **fleetnow** repo `README.md` → *"Map overlay layers"*:
|
||||
|
||||
```bash
|
||||
cp shell_stations.geojson ../fleetnow/layers/
|
||||
# then add one entry to the OVERLAYS array in fleetnow/index.html, commit + push.
|
||||
```
|
||||
|
||||
FleetNow keeps its own served copy under `fleetnow/layers/`; the artifact here
|
||||
(`shell_stations.geojson` / `.csv`) is the export of record. Re-running step 2 on a
|
||||
newer extract and re-copying refreshes the layer.
|
||||
|
|
@ -1,117 +1,75 @@
|
|||
# Fleet Registry — Data Quality Report
|
||||
# Fleet Registry — Outstanding Data-Quality Issues
|
||||
|
||||
**Date:** 2026-06-08
|
||||
**Source:** `tracksolid.devices` (the single registry of record)
|
||||
**Prepared for:** Fireside leadership / fleet operations
|
||||
**Scope:** 181 tracking devices → **80 physical vehicles** after de-duplicating the GPS-tracker + dashcam pairs that share a number plate.
|
||||
**Date:** 2026-06-08 · **Source:** `tracksolid.devices` (verified live) · **Scope:** 181 devices → 80 vehicles
|
||||
|
||||
**Urgency:** 🔴 **RED** = fix now (blocks ops / safety / visibility) · 🟠 **AMBER** = fix soon (accountability, classification, data trust) · 🟡 **YELLOW** = cleanup.
|
||||
|
||||
> ## ⭐ Biggest single fix: run the driver/plate CSV import
|
||||
> Most items below are **missing source fields**. The prepared **`import_drivers_csv.py --apply`** has **not been run** (`vehicle_category` still 0/181, device count still 181). Running it — or entering the fields at source in the Tracksolid Pro portal — clears the bulk of this list at once.
|
||||
|
||||
---
|
||||
|
||||
## 1. Executive summary
|
||||
## 🔴 RED — fix now
|
||||
|
||||
The fleet registry is **operationally usable but materially incomplete**, and the gaps concentrate in exactly the fields the business needs to run field-service KPIs: driver identity, driver contact, vehicle type, and device pairing.
|
||||
**R1. No driver phone — 175 / 181 (97%).** Dispatch/escalation can't contact a driver; only 6 are reachable. → Capture mobiles. **Owner:** Operations + Engineering (import).
|
||||
|
||||
| Theme | Headline | Business impact |
|
||||
|---|---|---|
|
||||
| **Driver contact** | **97%** of records have **no driver phone** (175 / 181) | Dispatch and escalation can't reach the driver from our own systems |
|
||||
| **Driver identity** | **23%** have **no driver name** (41 / 181) | Trips, speeding and idle time can't be attributed to a person — no accountability |
|
||||
| **Vehicle type** | **22%** have **no model** (40 / 181) | We can't cleanly separate ticket-closing service cars from cranes / bikes |
|
||||
| **Device pairing** | **29%** of vehicles (23 / 80) are **missing a tracker or a camera** | Blind spots: 6 vehicles have **no GPS at all**; 16 have **no dashcam evidence** |
|
||||
| **Unidentified hardware** | **41** device rows carry **no plate**; 19 of those are fully blank | Hardware we are paying to track but cannot tie to a vehicle, driver or city |
|
||||
**R2. 6 vehicles have NO GPS tracker** (dashcam only → invisible on the live map, no trips/mileage): `KCN 496A · KCQ 215F · KCU 237Z · KDM 306S · KDN 759G · KCZ 199P`. → Field-check; install/repair or decommission. **Owner:** Field ops.
|
||||
|
||||
**Root cause is upstream, not in our database.** Almost every gap is a field that was never entered in the **Tracksolid Pro portal** at provisioning time — our pipeline faithfully stores whatever the portal holds. This is a **data-entry discipline** problem at vehicle onboarding, plus an **incomplete driver/plate import** that is still pending (the 144-device CSV).
|
||||
**R3. 37 fully-unidentified devices being tracked** (no plate, model, or driver; "unknown" status). → Match serial/IMEI to a vehicle or decommission. **Owner:** Field ops + Engineering.
|
||||
|
||||
---
|
||||
|
||||
## 2. The fleet, de-duplicated
|
||||
## 🟠 AMBER — fix soon
|
||||
|
||||
After collapsing tracker+camera pairs to one row per number plate:
|
||||
**A1. No driver name — 41 / 181 (23%).** Trips/speeding/idle can't be attributed → no accountability. → Assign drivers at source. **Owner:** Operations. *(CSV covers most.)*
|
||||
|
||||
| Segment | Vehicles | Detail |
|
||||
|---|---|---|
|
||||
| **Field service** (closes customer tickets) | ~62 | Probox ×57, Van, Vezel, Mazda, + a few UG/other cars |
|
||||
| **Specialist** (cranes, bikes, pick-ups — *not* immediate tickets) | ~17 | Crane ×3, Motorbike ×8, Pick-Up ×~6 |
|
||||
| **Ambiguous** (type conflicts — see §3) | 2 | KCY 080X, KCZ 223P |
|
||||
| **Total physical vehicles** | **80** | from 181 devices |
|
||||
| **Unassigned spare devices** (no plate) | 41 rows | cannot be counted as vehicles |
|
||||
**A2. 16 vehicles have a tracker but NO dashcam** — no incident/safety video (all 8 motorbikes, the Uganda units, several Proboxes). → Decide which need a camera; schedule installs. **Owner:** Field ops.
|
||||
|
||||
---
|
||||
**A3. No vehicle model — 40 / 181 (22%).** Forces guesswork on the field-service vs specialist split. → Set `vehicle_models` at source. **Owner:** Operations. *(CSV covers most.)*
|
||||
|
||||
## 3. Findings by severity
|
||||
**A4. Duplicate plates corrupting the count:**
|
||||
- `KDS 453Y` entered twice — `KDS 453Y` (tracker) + `KDS 453 Y` (camera, stray space).
|
||||
- `KCC 199P` vs `KCZ 199P` — both pick-ups, both driver *Mbuvi Kioko*, one tracker + one camera → almost certainly **one vehicle under two plates**.
|
||||
→ Correct the plate in the portal, then re-sync. **Owner:** Operations.
|
||||
|
||||
### 🔴 Critical — operational blind spots
|
||||
|
||||
**C1. 6 vehicles have a dashcam but NO GPS tracker** — they are invisible on the live fleet map and contribute no trips/mileage.
|
||||
`KCN 496A · KCQ 215F · KCU 237Z · KDM 306S · KDN 759G · KCZ 199P`
|
||||
|
||||
**C2. 16 vehicles have a GPS tracker but NO dashcam** — no video evidence for incidents, disputes, or safety review. Concentrated in the **specialist fleet** (all 8 motorbikes, the Uganda vehicles) plus several Proboxes.
|
||||
|
||||
**C3. 41 device rows (23%) carry no number plate** — they cannot be tied to a vehicle, driver, or city. **19 of these are entirely blank** (no plate, no model, no driver, status "unknown") — hardware we track but cannot identify at all.
|
||||
|
||||
### 🟠 High — accountability & classification gaps
|
||||
|
||||
**H1. 97% of records have no driver phone** (175 / 181). Only 6 drivers are contactable from our data.
|
||||
|
||||
**H2. 23% have no driver name** (41 / 181). Behaviour analytics (speeding, idle, harsh events) cannot be attributed.
|
||||
|
||||
**H3. 22% have no vehicle model** (40 / 181) — this is the field that drives the field-service vs specialist split. Until it's populated, ~22% of the fleet can only be classified by guessing from the device name.
|
||||
|
||||
**H4. Plate data-entry inconsistencies** corrupting the vehicle count:
|
||||
- **`KDS 453Y` is entered twice** — `KDS 453Y` (tracker) and `KDS 453 Y` (camera, stray space). One vehicle, counted as two.
|
||||
- **`KCC 199P` vs `KCZ 199P`** — both pick-ups, both driver *Mbuvi Kioko*, one tracker + one camera. Almost certainly **one vehicle mis-keyed under two plates**.
|
||||
|
||||
**H5. Two plates disagree with themselves** — the tracker and dashcam on the *same plate* report different vehicle types:
|
||||
**A5. Two plates disagree with themselves (model conflict):**
|
||||
|
||||
| Plate | Tracker says | Camera says | Driver |
|
||||
|---|---|---|---|
|
||||
| KCY 080X | Pick-Up | Probox | Lawrence Kijogi |
|
||||
| KCZ 223P | Pick-Up | Probox | Felix Muema |
|
||||
|
||||
### 🟡 Medium — analytics reliability
|
||||
→ Confirm the real type; set both devices to match. **Owner:** Operations.
|
||||
|
||||
**M1. `assigned_city` is unreliable.** 4 vehicles have their two devices assigned to *different cities* (e.g. KDC 490Q: Mombasa vs Nairobi; KCY 838X: Mombasa vs Voi). The field appears **derived from the Tracksolid account** the device sits in, not the vehicle's actual base — so **regional (Nairobi / Mombasa / Kampala) reporting is suspect**.
|
||||
|
||||
**M2. Placeholder / non-person driver names** pollute driver-level analytics: `Garage` (×4), `UG` (×2), `Management_Mazda` (×2), `Parked` (×1). These are slots, not people.
|
||||
|
||||
**M3. One driver, multiple plates** — 5 cases (`Garage`, `Gideon Kiprono`, `Kelvin Wambugu`, `Mbuvi Kioko`, `UG`). Some are the duplicate-plate issues above; the rest need confirmation of whether a driver genuinely rotates vehicles.
|
||||
|
||||
### ⚪ Low — asset-register completeness (low operational impact today)
|
||||
|
||||
**L1. `vehicle_brand` is 99% empty** (179 / 181) and **`vin` is 100% empty** (181 / 181). Not currently used in any KPI, but would be needed for a formal asset/insurance register.
|
||||
**A6. `assigned_city` unreliable → regional reporting suspect.** 4 vehicles show two cities (e.g. KDC 490Q: Mombasa/Nairobi; KCY 838X: Mombasa/Voi) — it's inherited from the account, not the vehicle. → Set per vehicle. **Owner:** Operations + Engineering.
|
||||
|
||||
---
|
||||
|
||||
## 4. Completeness scorecard (device-level, 181 rows)
|
||||
## 🟡 YELLOW — cleanup
|
||||
|
||||
| Field | Populated | Missing | % missing |
|
||||
|---|---|---|---|
|
||||
| Number plate | 140 | 41 | 23% |
|
||||
| Vehicle model | 141 | 40 | 22% |
|
||||
| Driver name | 140 | 41 | 23% |
|
||||
| Driver phone | 6 | 175 | **97%** |
|
||||
| SIM | 155 | 26 | 14% |
|
||||
| Assigned city | 152 | 29 | 16% |
|
||||
| Vehicle brand | 2 | 179 | **99%** |
|
||||
| VIN | 0 | 181 | **100%** |
|
||||
**Y1. Placeholder driver names** — `Garage` (×4), `UG` (×2), `Management_Mazda` (×2), `Parked` (×1). → Replace with real names or a clear "unassigned" convention. **Owner:** Operations.
|
||||
|
||||
**Y2. Missing SIM (26) and cost-centre (31).** → Backfill from records/CSV. **Owner:** Operations + Engineering.
|
||||
|
||||
**Y3. `vehicle_category` empty (0 / 181).** Low urgency — the map/KPIs derive the segment from `vehicle_models` automatically. → Optional; CSV fills it. **Owner:** Engineering.
|
||||
|
||||
---
|
||||
|
||||
## 5. Recommended actions
|
||||
## Action plan
|
||||
|
||||
| # | Action | Owner | Effort | Fixes |
|
||||
|---|---|---|---|---|
|
||||
| 1 | **Run the pending driver/plate CSV import** (144 devices with names + plates already prepared) | Engineering | Low — one command | H1, H2, H3 (large chunk) |
|
||||
| 2 | **Mandate model + driver + phone at vehicle onboarding** in the Tracksolid Pro portal; make them required fields in the process | Operations | Process change | Root cause of most gaps |
|
||||
| 3 | **Resolve the 4 specific record issues** in §3 (KDS 453Y dup, KCC/KCZ 199P, KCY 080X, KCZ 223P) | Operations to confirm, Engineering to correct | Low | H4, H5 |
|
||||
| 4 | **Audit the 22 vehicles missing a tracker or camera** (§3 C1/C2) — install missing hardware or confirm intentional | Field ops | Medium | C1, C2 |
|
||||
| 5 | **Identify the 19 fully-blank devices** — match serial → vehicle, or decommission | Field ops | Medium | C3 |
|
||||
| 6 | **Stop trusting `assigned_city` for regional reporting** until it's set per-vehicle rather than inherited from the account | Engineering + Ops | Medium | M1 |
|
||||
| 7 | Replace placeholder driver names with real assignments or a clear "unassigned" convention | Operations | Low | M2, M3 |
|
||||
| # | Tier | Issue | Action | Owner | Cleared by CSV import? |
|
||||
|---|---|---|---|---|---|
|
||||
| R1 | 🔴 | No driver phone (97%) | Capture mobiles | Ops + Eng | ✅ mostly |
|
||||
| R2 | 🔴 | 6 vehicles, no GPS tracker | Field-check / install | Field ops | — |
|
||||
| R3 | 🔴 | 37 unidentified devices | Identify or decommission | Field ops + Eng | ✅ partly |
|
||||
| A1 | 🟠 | No driver name (23%) | Assign drivers | Ops | ✅ mostly |
|
||||
| A2 | 🟠 | 16 vehicles, no dashcam | Schedule installs | Field ops | — |
|
||||
| A3 | 🟠 | No vehicle model (22%) | Set model at source | Ops | ✅ mostly |
|
||||
| A4 | 🟠 | Duplicate plates (KDS 453Y; KCC/KCZ 199P) | Fix plate, re-sync | Ops | — |
|
||||
| A5 | 🟠 | Model conflicts (KCY 080X, KCZ 223P) | Confirm type | Ops | partial |
|
||||
| A6 | 🟠 | Unreliable assigned_city | Set per vehicle | Ops + Eng | ✅ yes |
|
||||
| Y1 | 🟡 | Placeholder driver names | Replace | Ops | partial |
|
||||
| Y2 | 🟡 | Missing SIM (26) / cost-centre (31) | Backfill | Ops + Eng | ✅ mostly |
|
||||
| Y3 | 🟡 | vehicle_category empty | Optional populate | Eng | ✅ yes |
|
||||
|
||||
**Quick wins:** Actions 1 and 3 are low-effort and would clear the majority of the High-severity gaps immediately.
|
||||
|
||||
---
|
||||
|
||||
## 6. Method & reproducibility
|
||||
|
||||
All figures derived from a single read-only scan of `tracksolid.devices`. De-duplication keys on a normalised plate (`UPPER(REPLACE(vehicle_number,' ',''))`) so spacing variants collapse. Tracker = device types `GT06E / X3 / AT4`; camera = `JC400P`. The scan script and the proposed `tracksolid.v_vehicles` de-duplicated view are tracked in the repository; re-running the scan after each remediation step will show progress against this baseline.
|
||||
**Suggested order:** (1) run/validate the **CSV import** — clears R1, R3(part), A1, A3, A6, Y2, Y3; (2) field-ops sweep for **R2 + A2** (tracker/camera hardware); (3) Operations fixes **A4/A5 plates + Y1** in the portal; (4) re-run the scan to confirm.
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
88
scripts/export_osm_pois.py
Normal file
88
scripts/export_osm_pois.py
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Export OSM POIs (e.g. fuel stations) from a .osm.pbf to GeoJSON + CSV.
|
||||
|
||||
These exports feed FleetNow's toggleable map-overlay layers (see
|
||||
docs/OSM_POI_EXPORT.md and the fleetnow repo's README "Map overlay layers").
|
||||
|
||||
No system tooling needed — run via uv so pyosmium's prebuilt wheel is fetched:
|
||||
|
||||
uv run --no-project --with osmium python scripts/export_osm_pois.py \
|
||||
kenya-260605.osm.pbf --amenity fuel --brand Shell \
|
||||
--out-geojson shell_stations.geojson --out-csv shell_stations.csv
|
||||
|
||||
Notes:
|
||||
- Gas stations are OSM ``amenity=fuel``. Brand lives in the ``brand`` tag, but
|
||||
only ~36% of Kenyan stations carry it, so when ``--brand`` is given and a
|
||||
feature has no ``brand`` tag we fall back to matching ``name``/``operator``.
|
||||
- Omit ``--brand`` to export every feature of that amenity.
|
||||
- Nodes use their own coordinate; ways/areas use the centroid of their nodes
|
||||
(so ``locations=True`` is required on apply_file).
|
||||
"""
|
||||
import argparse, json, csv
|
||||
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
|
||||
ap.add_argument("pbf", help="input .osm.pbf")
|
||||
ap.add_argument("--amenity", default="fuel", help="OSM amenity value (default: fuel)")
|
||||
ap.add_argument("--brand", default=None, help="case-insensitive brand/name match; omit for all")
|
||||
ap.add_argument("--out-geojson", default="pois.geojson")
|
||||
ap.add_argument("--out-csv", default="pois.csv")
|
||||
args = ap.parse_args()
|
||||
|
||||
import osmium
|
||||
|
||||
brand_lc = args.brand.lower() if args.brand else None
|
||||
|
||||
def match(t):
|
||||
if t.get("amenity") != args.amenity:
|
||||
return False
|
||||
if brand_lc is None:
|
||||
return True
|
||||
b = (t.get("brand") or "").lower()
|
||||
if b:
|
||||
return brand_lc in b
|
||||
return brand_lc in (t.get("name") or "").lower() or brand_lc in (t.get("operator") or "").lower()
|
||||
|
||||
feats = []
|
||||
|
||||
def add(lon, lat, t, kind, oid):
|
||||
feats.append({
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"name": t.get("name"), "brand": t.get("brand"),
|
||||
"operator": t.get("operator"), "osm_type": kind, "osm_id": oid,
|
||||
},
|
||||
"geometry": {"type": "Point", "coordinates": [round(lon, 6), round(lat, 6)]},
|
||||
})
|
||||
|
||||
class H(osmium.SimpleHandler):
|
||||
def node(self, o):
|
||||
if match(o.tags):
|
||||
add(o.location.lon, o.location.lat, o.tags, "node", o.id)
|
||||
def way(self, o):
|
||||
if match(o.tags):
|
||||
xs = []; ys = []
|
||||
for n in o.nodes:
|
||||
try:
|
||||
if n.location.valid():
|
||||
xs.append(n.location.lon); ys.append(n.location.lat)
|
||||
except Exception:
|
||||
pass
|
||||
if xs:
|
||||
add(sum(xs) / len(xs), sum(ys) / len(ys), o.tags, "way", o.id)
|
||||
|
||||
H().apply_file(args.pbf, locations=True)
|
||||
|
||||
json.dump({"type": "FeatureCollection", "features": feats}, open(args.out_geojson, "w"))
|
||||
with open(args.out_csv, "w", newline="") as f:
|
||||
w = csv.writer(f); w.writerow(["name", "lat", "lon", "brand", "operator", "osm_type", "osm_id"])
|
||||
for ft in feats:
|
||||
p = ft["properties"]; lon, lat = ft["geometry"]["coordinates"]
|
||||
w.writerow([p["name"], lat, lon, p["brand"], p["operator"], p["osm_type"], p["osm_id"]])
|
||||
|
||||
print(f"exported {len(feats)} features -> {args.out_geojson}, {args.out_csv}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
233
shell_stations.csv
Normal file
233
shell_stations.csv
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
name,lat,lon,brand,operator,brand_source,osm_type,osm_id
|
||||
Shell Kabuagi,-1.316594,36.718419,Shell,,brand_tag,node,30088444
|
||||
Shell,-1.316337,36.814074,Shell,,brand_tag,node,30092268
|
||||
Shell,-1.292004,36.784895,Shell,,brand_tag,node,30210342
|
||||
Shell,-1.292514,36.821731,Shell,,brand_tag,node,30215041
|
||||
Shell,-1.264944,36.811142,Shell,,brand_tag,node,30402252
|
||||
Shell Bellevue,-1.321222,36.841704,Shell,,brand_tag,node,30695844
|
||||
Shell,-1.259212,36.818551,,,name,node,295829498
|
||||
Shell,-3.400363,38.549144,Shell,,brand_tag,node,344711386
|
||||
Shell,-4.064245,39.671241,Shell,,brand_tag,node,344969183
|
||||
Shell,-4.04045,39.678266,Shell,,brand_tag,node,344970554
|
||||
Shell,-4.035198,39.684952,Shell,,brand_tag,node,344971084
|
||||
Shell Links Road Filling Station,-4.051857,39.688222,Shell,,brand_tag,node,346562706
|
||||
Shell,-0.71861,36.432908,Shell,,brand_tag,node,415582755
|
||||
Shell,-1.307743,36.803669,Shell,,brand_tag,node,490741522
|
||||
Shell Petrol Station,-1.288024,36.741743,Shell,,brand_tag,node,558923029
|
||||
Shell,-1.310587,36.817074,Shell,,brand_tag,node,582803761
|
||||
Shell,-1.305716,36.827261,Shell,,brand_tag,node,582803763
|
||||
Shell,-1.520877,37.267142,Shell,,brand_tag,node,582803840
|
||||
Shell Makupa,-4.041392,39.656827,Shell,Shell,brand_tag,node,612947282
|
||||
Shell Changamwe,-4.027279,39.62732,Shell,Shell,brand_tag,node,612947302
|
||||
Shell,-1.249864,36.861223,Shell,,brand_tag,node,703562830
|
||||
Shell,-1.246981,36.871498,Shell,,brand_tag,node,703562919
|
||||
Shell - Ruiru,-1.149099,36.958483,Shell,,brand_tag,node,711491743
|
||||
Shell,-1.293773,36.886453,Shell,Shell,brand_tag,node,712868923
|
||||
Shell,-1.256982,36.922912,Shell,,brand_tag,node,734051667
|
||||
Shell,-1.230839,36.80343,Shell,Shell,brand_tag,node,812840504
|
||||
Shell,-1.232602,36.875076,Shell,,brand_tag,node,900302335
|
||||
Shell Avenue Service Station,-1.285422,36.818863,Shell,,brand_tag,node,911026324
|
||||
Shell Adams Arcade,-1.300601,36.779709,Shell,,brand_tag,node,1045731889
|
||||
Shell,-1.267364,36.81745,Shell,,brand_tag,node,1147234418
|
||||
Shell,-4.085069,39.654867,Shell,Shell,brand_tag,node,1320763086
|
||||
Shell,0.181801,34.295817,Shell,Indivdual,brand_tag,node,1419926800
|
||||
Shell,-1.265026,36.740926,Shell,,brand_tag,node,1506606959
|
||||
Shell,-0.284215,36.068872,Shell,,brand_tag,node,1636429762
|
||||
Shell,-1.31465,36.859873,Shell,Shell/BP,brand_tag,node,1678061764
|
||||
Shell,-1.090556,35.871981,Shell,,brand_tag,node,1690703696
|
||||
Shell,0.03559,37.655216,Shell,,brand_tag,node,1814694405
|
||||
Shell,0.05734,37.642474,Shell,,brand_tag,node,1814694430
|
||||
Shell,0.016696,37.077472,Shell,,brand_tag,node,1830086395
|
||||
Shell,-0.363566,35.293414,Shell,,brand_tag,node,1838955746
|
||||
Shell,0.634907,34.280633,Shell,,brand_tag,node,1856237414
|
||||
Shell Bidii,-1.279267,36.848606,Shell,,brand_tag,node,1997615249
|
||||
Shell,-2.693933,38.166679,Shell,,brand_tag,node,2137912798
|
||||
Shell Baraka,-1.259949,36.785711,Shell,,brand_tag,node,2218541216
|
||||
Shell,-4.047937,39.662737,Shell,,brand_tag,node,2377336397
|
||||
Shell,2.32971,37.988219,Shell,,brand_tag,node,2462468244
|
||||
Shell,-1.281187,36.816595,Shell,,brand_tag,node,2533881587
|
||||
Shell,-1.446789,36.968782,Shell,Shell,brand_tag,node,2653484553
|
||||
Shell Roysambu,-1.217787,36.890669,Shell,,brand_tag,node,2953872784
|
||||
Shell petrol station,-0.424642,36.952432,,2NK,name,node,3078763165
|
||||
Shell petrol station,-0.421785,36.952518,,,name,node,3078776472
|
||||
Shell,-0.334861,37.646147,Shell,,brand_tag,node,3243527416
|
||||
Isiolo Service Station,0.3519,37.582829,Shell,,brand_tag,node,3247766463
|
||||
Shell,-0.500952,36.314893,Shell,,brand_tag,node,3421681816
|
||||
Bajoo Shell Services,1.749142,40.057779,Shell,,brand_tag,node,3683457938
|
||||
Buna Filling Station,2.786999,39.509127,Shell,,brand_tag,node,3695322660
|
||||
Shell,-1.395443,36.939718,Shell,,brand_tag,node,3729203207
|
||||
Shell,-1.10888,36.641976,Shell,,brand_tag,node,3808532767
|
||||
Shell,-1.299065,36.763624,Shell,,brand_tag,node,4210622090
|
||||
Shell,-1.245784,36.662797,Shell,,brand_tag,node,4324873067
|
||||
Shell,0.337182,37.578977,Shell,,brand_tag,node,4461211795
|
||||
Shell,-3.405215,38.362976,Shell,,brand_tag,node,4475364889
|
||||
Shell,-0.454161,39.645824,Shell,,brand_tag,node,4685351383
|
||||
Shell,-0.625556,34.75581,Shell,,brand_tag,node,4720565411
|
||||
Shell,-0.697715,36.427394,Shell,,brand_tag,node,4914118412
|
||||
"Shell Petrol Station, Muguga",-1.061481,37.157952,,,name,node,4946660224
|
||||
"Shell New Thika Rd, Ruiru",-1.160387,36.958055,Shell,,brand_tag,node,4947103423
|
||||
Shell,-1.226429,36.663491,Shell,,brand_tag,node,4972148621
|
||||
Shell,-1.229222,36.840393,Shell,,brand_tag,node,5119552023
|
||||
Shell,-1.264064,36.838234,Shell,,brand_tag,node,5119573528
|
||||
Shell,-0.977475,37.095977,Shell,,brand_tag,node,5126219526
|
||||
Shell,-0.929697,37.160111,Shell,,brand_tag,node,5126247329
|
||||
Shell,-1.011913,36.903025,Shell,,brand_tag,node,5162725223
|
||||
Shell Petrol Station Kajiado,-1.835716,36.799667,Shell,Shell,brand_tag,node,5179571022
|
||||
Shell,-1.180887,37.440173,Shell,,brand_tag,node,5181243643
|
||||
Shell,-1.280736,36.827944,Shell,,brand_tag,node,5217418921
|
||||
Shell,-1.171399,36.828308,Shell,,brand_tag,node,5327749961
|
||||
Shell,-1.262778,36.801048,Shell,,brand_tag,node,5340449107
|
||||
Shell,0.540157,35.296916,Shell,,brand_tag,node,5392739324
|
||||
Shell,0.448948,35.967056,,,name,node,5403105422
|
||||
Shell,-1.292007,36.84313,Shell,,brand_tag,node,5496066065
|
||||
Shell,-1.295157,36.854441,Shell,,brand_tag,node,5496079228
|
||||
Shell Kasarani Petrol Station,-1.218327,36.895867,,,name,node,5526332569
|
||||
Shell,-1.30385,36.856284,Shell,,brand_tag,node,5539579719
|
||||
Shell,-1.195935,36.751887,Shell,,brand_tag,node,5540791550
|
||||
Shell,-1.3074,36.842468,Shell,,brand_tag,node,5569591300
|
||||
Shell Banana,-1.175701,36.759722,Shell,,brand_tag,node,5581701614
|
||||
Shell Kiserian,-1.432004,36.686175,Shell,Vivo,brand_tag,node,5588931919
|
||||
Mwingi Shell Petrol Station,-0.937425,38.044514,Shell,Shell,brand_tag,node,5768445294
|
||||
Mart Petrol Station,0.494496,35.746217,Shell,,brand_tag,node,5781632986
|
||||
Shell,-1.263474,36.981924,Shell,,brand_tag,node,5887135685
|
||||
Shell,-4.060892,39.662713,Shell,,brand_tag,node,6054282205
|
||||
Shell,-4.043209,39.663984,Shell,,brand_tag,node,6054858991
|
||||
Shell,-0.984791,36.584131,Shell,,brand_tag,node,6054861952
|
||||
Shell,-1.089833,35.882185,Shell,,brand_tag,node,6054877097
|
||||
Shell,-0.769528,36.501316,Shell,,brand_tag,node,6054980226
|
||||
Shell,-1.057588,36.776239,,,name,node,6063644317
|
||||
Shell Filling station,-4.084926,39.654747,Shell,,brand_tag,node,6072960948
|
||||
Shell,-1.456045,37.004306,Shell,,brand_tag,node,6086991186
|
||||
Shell,-0.780234,34.948265,Shell,,brand_tag,node,6105930796
|
||||
Shell,1.01741,35.002629,Shell,,brand_tag,node,6106202680
|
||||
Shell,-0.929519,37.159777,Shell,,brand_tag,node,6140765579
|
||||
Shell,-0.074245,37.670579,Shell,,brand_tag,node,6144610331
|
||||
Shell,0.524964,35.251383,Shell,,brand_tag,node,6147580921
|
||||
Shell,0.489345,35.269825,Shell,,brand_tag,node,6149443773
|
||||
Shell Petrol Station,0.465501,35.297389,,,name,node,6149634448
|
||||
Shell,-1.248207,36.876,Shell,,brand_tag,node,6198796724
|
||||
Shell,-1.043083,37.066139,Shell,,brand_tag,node,6207691351
|
||||
Shell,-1.042001,37.071543,Shell,,brand_tag,node,6207707073
|
||||
Shell,-1.037044,37.071925,Shell,,brand_tag,node,6209964953
|
||||
Shell,-0.841126,37.137857,,,name,node,6212995383
|
||||
Shell,-0.485965,37.138349,Shell,,brand_tag,node,6213405879
|
||||
Shell,-1.347761,36.662815,Shell,,brand_tag,node,6216321668
|
||||
Shell Petrol Station,-1.416823,36.686915,,,name,node,6218487553
|
||||
Shell,-1.396852,36.755199,Shell,,brand_tag,node,6218698870
|
||||
PETRO Shelly,-4.085731,39.667207,,,name,node,6222293185
|
||||
Shell Maanzoni,-1.516527,37.107005,Shell,,brand_tag,node,6226894926
|
||||
Shell,-1.532784,37.131763,Shell,,brand_tag,node,6229374240
|
||||
Shell Kitengela,-1.50442,36.954102,,,name,node,6229505975
|
||||
shell,-1.735489,37.198837,Shell,,brand_tag,node,6229624406
|
||||
Shell,-2.081484,37.477328,Shell,,brand_tag,node,6232739137
|
||||
Shell,-3.973832,39.547043,Shell,,brand_tag,node,6235829860
|
||||
Shell,-4.007792,39.60037,Shell,,brand_tag,node,6235830590
|
||||
Shell,0.580828,34.557734,Shell,,brand_tag,node,6236062090
|
||||
Shell,-1.365272,38.012171,Shell,,brand_tag,node,6236068237
|
||||
Shell Filling Station,0.035,36.364412,,,name,node,6241664256
|
||||
Shell Chaka,-0.361651,36.999992,Shell,,brand_tag,node,6244921195
|
||||
Shell,0.005805,37.072986,Shell,,brand_tag,node,6246803075
|
||||
Shell,-1.260591,36.710164,Shell,,brand_tag,node,6251561800
|
||||
Shell service station Fedha,-1.316073,36.895595,Shell,,brand_tag,node,6259798932
|
||||
Shell Service Station - Kayole,-1.2829,36.90304,Shell,,brand_tag,node,6259810690
|
||||
Shell Mumias Road,-1.286405,36.88066,Shell,,brand_tag,node,6259860371
|
||||
Shell,3.094471,35.614012,Shell,,brand_tag,node,6263511612
|
||||
Shell,0.509984,35.293509,Shell,Shell Petrol Station,brand_tag,node,6327543347
|
||||
Shell,-0.144338,34.8022,Shell,,brand_tag,node,6633204913
|
||||
Shell,-0.779415,36.426665,Shell,,brand_tag,node,6644488886
|
||||
Shell,-3.578128,39.87102,Shell,,brand_tag,node,6716512885
|
||||
Shell,-3.214362,40.117773,Shell,,brand_tag,node,6793044096
|
||||
Shell,-1.273195,36.911201,Shell,,brand_tag,node,6819692388
|
||||
Shell Petrol Station,-1.055007,37.111221,Shell,,brand_tag,node,6851086245
|
||||
Shell,-0.542158,37.454875,Shell,,brand_tag,node,6860253187
|
||||
Shell,0.06024,37.636552,Shell,,brand_tag,node,6882011852
|
||||
Shell,-0.71496,37.261577,Shell,,brand_tag,node,6895782975
|
||||
shell- Bonje,-3.991998,39.562412,Shell,,brand_tag,node,6938700260
|
||||
Shell,0.453207,34.130811,Shell,,brand_tag,node,6945529552
|
||||
Shell,-0.130428,34.794978,Shell,,brand_tag,node,6969176798
|
||||
Shell,-3.211576,40.121388,Shell,,brand_tag,node,7166621203
|
||||
Shell,-3.39087,38.581827,Shell,,brand_tag,node,7166621204
|
||||
shell makupa service station,-4.040825,39.656857,Shell,,brand_tag,node,7172031316
|
||||
Shell,-0.322371,36.15036,Shell,,brand_tag,node,7187879248
|
||||
shell,-0.074322,34.682137,Shell,,brand_tag,node,7227297576
|
||||
Shell,0.28749,34.756277,Shell,,brand_tag,node,7239126633
|
||||
Shell,-1.323004,36.706266,Shell,,brand_tag,node,7305927852
|
||||
Shell- Syokimau,-1.357374,36.907769,Shell,,brand_tag,node,7507287888
|
||||
Shell,-1.210901,36.875751,Shell,Shell,brand_tag,node,7643261185
|
||||
Shell,-0.973363,37.095865,Shell,,brand_tag,node,7872591802
|
||||
Shell,-0.366585,35.284074,Shell,,brand_tag,node,7893551877
|
||||
Shell,0.87809,35.120238,Shell,,brand_tag,node,7934573084
|
||||
Shell,-1.089807,35.882577,Shell,,brand_tag,node,7988261701
|
||||
Shell,-0.541871,37.455485,Shell,,brand_tag,node,8039934769
|
||||
Shell,-1.358313,38.007156,Shell,,brand_tag,node,8047307634
|
||||
Shell,-3.92977,39.53407,Shell,,brand_tag,node,8050570392
|
||||
Shell,-0.264808,36.377656,,,name,node,8182514303
|
||||
Shell Ruai,-1.276187,37.016097,Shell,,brand_tag,node,8202067662
|
||||
Shell,-1.170384,36.91699,Shell,,brand_tag,node,8231893217
|
||||
Shell - Eastern By-pass - Ruiru,-1.166976,36.964879,Shell,,brand_tag,node,8247882582
|
||||
Shell,-1.281858,36.962424,Shell,,brand_tag,node,8293614674
|
||||
Shell,-1.280476,36.690323,Shell,,brand_tag,node,8318718279
|
||||
Shell,-1.281238,36.634916,Shell,,brand_tag,node,8321307638
|
||||
Shell,-1.267623,36.609868,Shell,,brand_tag,node,8321307639
|
||||
Shell,-1.234142,36.989696,Shell,,brand_tag,node,8338714141
|
||||
Shell,-1.267493,37.315826,Shell,,brand_tag,node,8338714151
|
||||
Shell,-1.256284,36.879297,Shell,,brand_tag,node,8345317201
|
||||
Shell,-1.425451,36.958715,Shell,,brand_tag,node,8371880141
|
||||
Shell,-0.78364,36.871819,,,name,node,8483709617
|
||||
Shell,-1.28234,37.104729,Shell,,brand_tag,node,8862700293
|
||||
Shell,-1.231358,36.924224,Shell,,brand_tag,node,9004506167
|
||||
Shell Mirema,-1.213808,36.892432,Shell,,brand_tag,node,9014259343
|
||||
Shell,-1.459477,37.25047,Shell,,brand_tag,node,9028867156
|
||||
Shell,0.027305,36.365863,Shell,,brand_tag,node,9048281880
|
||||
Shell,-0.20372,35.843587,Shell,,brand_tag,node,9053460332
|
||||
Shell,-1.229246,36.84025,Shell,,brand_tag,node,10080456017
|
||||
Shell,-3.936283,39.744896,,,name,node,10255650224
|
||||
Shell Petrol Station,-1.286734,36.740804,,,name,node,10971302670
|
||||
Shell -Bombolulu,-4.025633,39.697377,Shell,,brand_tag,node,11500364389
|
||||
Shell,-1.313698,36.720914,Shell,,brand_tag,node,11711795482
|
||||
Shell,-1.274671,36.799912,Shell,,brand_tag,node,12163148139
|
||||
Shell,-1.307959,36.781587,Shell,,brand_tag,node,12165032865
|
||||
Shell,0.28095,34.744859,Shell,,brand_tag,node,12489868997
|
||||
Shell Syokimau,-1.378091,36.927818,,,name,node,12600151901
|
||||
Shell,-1.262862,36.90678,,,name,node,12886546509
|
||||
Shell Gas Station,-0.779732,36.427412,,,name,node,13088820396
|
||||
Shell,-1.230649,34.482215,Shell,,brand_tag,node,13446964574
|
||||
Shell,-0.900865,34.53639,Shell,,brand_tag,node,13446964578
|
||||
Shell,0.078482,34.720706,Shell,,brand_tag,node,13447042942
|
||||
Shell,0.600804,35.163178,Shell,,brand_tag,node,13528448115
|
||||
shell,-0.143442,34.801363,,,name,node,13714210044
|
||||
shell,-0.077947,34.727069,Shell,,brand_tag,node,13720608494
|
||||
Shell,-1.282701,36.824838,Shell,,brand_tag,way,123365084
|
||||
Shell,-1.2799,36.82273,Shell,,brand_tag,way,125107079
|
||||
Shell,-1.289727,36.811096,Shell,,brand_tag,way,125336232
|
||||
Shell,-1.287955,36.838738,Shell,,brand_tag,way,126936993
|
||||
Shell,-1.272506,36.83183,Shell,,brand_tag,way,126995763
|
||||
Shell Service Station - Jogoo Road,-1.295715,36.860244,Shell,,brand_tag,way,129323643
|
||||
Shell,-1.268949,36.817225,Shell,,brand_tag,way,133548150
|
||||
Shell,-1.310807,36.817766,Shell,,brand_tag,way,144188726
|
||||
Shell- Lavington,-1.280811,36.769286,Shell,Shell,brand_tag,way,226322138
|
||||
Shell,-1.322412,36.708022,Shell,,brand_tag,way,226714111
|
||||
Shell,-1.263021,36.802726,Shell,,brand_tag,way,238857325
|
||||
Shell,-1.30349,36.828502,Shell,,brand_tag,way,366568545
|
||||
Shell,-0.09443,34.76444,Shell,,brand_tag,way,390104534
|
||||
Shell,-0.282248,36.09429,Shell,,brand_tag,way,483211211
|
||||
Shell,-0.285481,36.075122,Shell,,brand_tag,way,488459901
|
||||
Shell Kitengela ex-Engen,-1.491085,36.954337,Shell,,brand_tag,way,536796727
|
||||
Shell Voi,-3.400372,38.549126,Shell,Shell,brand_tag,way,593734920
|
||||
Shell,-0.865417,36.566545,,,name,way,642076596
|
||||
Shell,-1.275817,36.834388,Shell,,brand_tag,way,686179946
|
||||
Shell,-0.536827,37.452256,Shell,,brand_tag,way,732602668
|
||||
Shell Petrol Station - Greenspan,-1.288893,36.902407,Shell,,brand_tag,way,977833647
|
||||
Shell petrol station (feroze),-1.26303,36.906097,Shell,,brand_tag,way,1055608664
|
||||
Shell,-0.268103,34.971231,Shell,,brand_tag,way,1069555494
|
||||
Shell Hurlingham,-1.295405,36.799606,Shell,,brand_tag,way,1088482284
|
||||
Shell Service Station - Embakassi,-1.317926,36.917619,Shell,,brand_tag,way,1107378445
|
||||
Shell,-1.328958,36.683097,Shell,,brand_tag,way,1107729725
|
||||
Shell,-2.831336,37.524927,Shell,,brand_tag,way,1110216588
|
||||
Shell Kahawa Sukari,-1.188788,36.931934,Shell,,brand_tag,way,1135425767
|
||||
Shell,-0.074421,34.691528,Shell,,brand_tag,way,1222533725
|
||||
Shell Service Station - Likoni Road,-1.303854,36.856227,Shell,,brand_tag,way,1273152921
|
||||
Shell,-1.835509,36.799548,Shell,,brand_tag,way,1290701573
|
||||
Shell,-2.538055,36.800975,Shell,,brand_tag,way,1413265354
|
||||
Shell Fuel Station - Tala,-1.26749,37.315706,,,name,way,1434009884
|
||||
Shell,-1.266132,36.98704,Shell,Shell,brand_tag,way,1497383075
|
||||
|
1
shell_stations.geojson
Normal file
1
shell_stations.geojson
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue