Skip to content

Latest commit

 

History

History

README.md

English | Français | العربية

@geoalgeria/ecoles

The schools of Algeria, as data you can install.

npm npm downloads License: MIT

11,855 geocoded schools across all 69 wilayas of Algeria, every one with coordinates, classified by cycle (primaire · moyen/CEM · secondaire/lycée · préscolaire), most with Arabic and/or French names, and commune/wilaya linkage. Extracted from OpenStreetMap and framed honestly against the 29,702 educational institutions the Ministry of National Education itself publishes for the 2024-2025 school year. Shipped as JSON, CSV, GeoJSON, and TypeScript. Part of GeoAlgeria.

npm install @geoalgeria/ecoles
import ecoles from "@geoalgeria/ecoles";

const all = ecoles.ecoles();   // 11,855 geocoded schools

// Lycées in a wilaya (joins GeoAlgeria's wilaya_code)
const lyceesSetif = all.filter((e) => e.wilaya_code === "19" && e.cycle === "secondaire");

// Only the named ones, with a French label
const named = all.filter((e) => e.name_fr);

What you can build

  • School maps & locators – coordinates on all 11,855 records, ready for a map or nearest-school distance sorting.
  • Cycle breakdowns – filter primaire / moyen / secondaire / préscolaire, or rank school density per commune/wilaya across the country.
  • Bilingual directories – thousands of Arabic and French names, side by side.

What's inside

Dataset Count Coordinates Notes
Schools 11,855 ✅ all 8,635 named, 69 wilayas

By cycle

Cycle Count Meaning
primaire 4,019 école primaire (ISCED 1)
moyen 2,378 collège d'enseignement moyen / CEM (ISCED 2)
secondaire 1,576 lycée (ISCED 3)
prescolaire 268 préscolaire / maternelle / روضة (ISCED 0)
autre 3,614 school of undetermined cycle (unnamed, or a name with no cycle word)

This is an OpenStreetMap extract, not an official registry. Coverage is partial and uneven by wilaya, 11,855 schools mapped against the 29,702 educational institutions the Ministry of National Education publishes on education.gov.dz for the 2024-2025 school year, about 40%. That denominator is the ministry's own aggregate, not our estimate. Counts move as OpenStreetMap is edited; each rebuild reflects the current state of the map.

Cycle is inferred. It comes from isced:level and the French/Arabic name, a CEM always names itself متوسطة/collège, a lycée ثانوية/lycée, a maternelle روضة/préscolaire. A bare "école"/"مدرسة" with no cycle word is classified primaire by Algerian convention (a standalone school is a primary school); anything unresolved is autre. 93% of named schools resolve to a specific cycle.

By kindkind is the establishment type, orthogonal to cycle, so you can filter out (or in) the special-purpose places OSM files under amenity=school:

Kind Count Meaning Cycle
regular 11,664 a standard école / CEM / lycée / maternelle its real cycle
formation 92 vocational / training centre autre
coranique 40 Quranic school autre
langues 24 language school / institute autre
special 30 adapted / special-needs school (deaf, blind…) keeps its cycle
conduite 5 driving school (auto-école) autre

The four non-K-12 kinds (formation/coranique/langues/conduite) carry cycle autre, they're not primary schools even though their name contains "école"; kind is what makes them findable instead of buried in autre.

Also on each record: isced_levels (the OSM isced:level served, normalized to a sorted list like "1;2", on 2,048 records), address (from OSM addr:* tags, on 2,626), and sector (public/private where the map signals it).

Formats

The npm package ships the JSON (importable directly):

import ecoles from "@geoalgeria/ecoles/data/ecoles.json" with { type: "json" };
// or via CDN, no install:
// https://cdn.jsdelivr.net/npm/@geoalgeria/ecoles/data/ecoles.json

The loaders and record shapes are fully typed, TypeScript definitions ship in the package:

import ecoles, { type Ecole } from "@geoalgeria/ecoles";
const all: Ecole[] = ecoles.ecoles();

CSV and GeoJSON are in the repo under data/ and bundled in every GitHub Release:

data/
  ecoles.json              # 11,855 schools (array)
  metadata.json            # sources, counts, coverage, updated
  csv/ecoles.csv           # repo + Release bundle (not in npm tarball)
  geojson/ecoles.geojson   # Point features

Record shape

{
  "id": "16-00275",
  "name": "Lycée Semrouni 1",
  "name_fr": "Lycée Semrouni 1",
  "name_ar": null,
  "wilaya_code": "16",
  "commune_code": "1651",
  "commune": "Ouled Fayet",
  "lat": 36.729359,
  "lng": 2.939451,
  "geo_precision": "approximate",
  "geo_method": "osm_centroid",
  "source": "osm",
  "refs": {
    "osm": "way/1041517830"
  },
  "cycle": "secondaire",
  "cycle_label_fr": "Lycée",
  "cycle_label_ar": "ثانوية",
  "kind": "regular",
  "kind_label_fr": "École ordinaire",
  "kind_label_ar": "مدرسة عادية",
  "isced_levels": null,
  "sector": null,
  "address": null
}

id is a stable {wilaya_code}-{seq} key synthesized by GeoAlgeria, unique within this dataset; the matched OSM element is kept as refs.osm. name is the best available display name and is null for unnamed points. cycle is the education level and kind the establishment type (see above), each with bilingual labels. isced_levels and address come straight from OSM (null when the tags are absent). sector is "public"/"private" only when the map carries an explicit signal, else null. geo_precision is "exact" for a surveyed OSM node or "approximate" for a building/area centroid, geo_method records which (osm_node/osm_centroid). wilaya_code joins to GeoAlgeria's wilaya_code.

Commune/wilaya linkage is derived, not from the source. OpenStreetMap does not carry Algerian administrative codes. GeoAlgeria attaches wilaya_code, commune_code, and commune by first locating the containing wilaya polygon, then choosing the nearest commune centroid within that wilaya from the geoalgeria commune set. Wilaya assignment is polygon-based; commune is best-effort centroid proximity within that boundary.

Need the administrative divisions too?

For wilayas, dairas, and communes, use the main geoalgeria package, it's how you turn a school's commune_code into a polygon or centroid. Use @geoalgeria/ecoles when you only need the schools.

Source & method

Run npm run fetch to regenerate every output. It:

  1. queries OpenStreetMap (Overpass) for amenity=school and amenity=kindergarten inside Algeria;
  2. classifies the cycle from isced:level and the French/Arabic name;
  3. de-duplicates the same school mapped as both a node and a building;
  4. locates the containing wilaya polygon, then attaches the nearest commune centroid within that wilaya.

The raw source pull is captured under sources/ecoles/.

License & attribution

Package code is MIT. The data is from OpenStreetMap: © OpenStreetMap contributors, licensed under the ODbL 1.0. If you use or redistribute this dataset, you must attribute OpenStreetMap contributors and keep derived databases under a compatible license.

Verify against official sources for authoritative information. This dataset is provided for reference and to power GeoAlgeria.

API docs & field reference → · Browse all packages →


Made by Yasser's Studio · LinkedIn · X · hello@yasser.studio