Skip to content

Latest commit

 

History

History

README.md

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

@geoalgeria/tourisme

Algeria's tourism infrastructure, as data you can install.

npm npm downloads License: MIT

4,348 geocoded tourism sites across Algeria's 69 wilayas, hotels, attractions, historic sites, thermal springs and protected areas, each with coordinates, wilaya linkage and source attribution. Sourced from ASAL Geoportail (thermal springs), OpenStreetMap (hotels, attractions, historic sites, parks) and Wikidata (heritage sites, museums, parks). Shipped as JSON, CSV, and GeoJSON. Part of GeoAlgeria.

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

const everything = tourisme.all();               // 4,348
const hotels = tourisme.lodging();               // 1,602
const springs = tourisme.thermalSprings();        // 282
const inTipaza = tourisme.byWilaya(42);           // all tourism sites in wilaya 42
const ruins = tourisme.byLayer("historic");       // 1,184 historic sites

// Everything has lat/lng – distance-sort, map, or nearest-site in a few lines.

What you can build

  • Tourism apps – searchable directory of hotels, attractions and historic sites by wilaya.
  • Nearest-site lookups – coordinates on every record, ready for distance sorting.
  • Maps – drop-in GeoJSON point layers for the full tourism network.
  • Thermal-spring guides – temperature, flow rate, altitude and mineral composition data for 282 springs.
  • Heritage & culture – Wikipedia/Wikidata-linked historic sites, monuments and archaeological sites.

What's inside

Layer Function Count Notes
Lodging lodging() 1,602 hotels, hostels, guest houses, chalets, alpine huts
Attractions attractions() 1,248 museums, viewpoints, caves, waterfalls, zoos
Historic historic() 1,184 archaeological sites, ruins, monuments, forts, castles
Thermal springs thermalSprings() 282 temperature, flow rate, altitude, minerality
Parks parks() 32 national parks, nature reserves, protected areas
Total all() 4,348

Spanning 69 wilayas. wilaya_code is linked against the geoalgeria wilaya model (69-wilaya scheme).

Formats

The npm package ships the JSON (importable directly):

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

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

import tourisme, { type Lodging, type ThermalSpring } from "@geoalgeria/tourisme";
const hotels: Lodging[] = tourisme.lodging();
const springs: ThermalSpring[] = tourisme.thermalSprings();

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

data/
  lodging.json            # 1,602 lodging entries
  attractions.json        # 1,248 attractions
  historic.json           # 1,184 historic sites
  thermal-springs.json    # 282 thermal springs
  parks.json              # 32 parks
  metadata.json           # sources, counts, coverage
  csv/                    # CSV exports (repo + Release bundle, not in npm tarball)
  geojson/                # GeoJSON features

Record shape

Lodging – hotels, hostels, guest houses:

{
  "id": "lodging-1",
  "name": "عريان الراس",
  "name_ar": "عريان الراس تسابيت",
  "wilaya_code": "01",
  "commune_code": null,
  "commune": null,
  "lat": 28.4162728,
  "lng": -0.2620846,
  "geo_precision": "exact",
  "geo_method": "osm",
  "source": "osm",
  "refs": { "osm": "8107956617" },
  "type": "alpine_hut"
}

type is one of hotel, hostel, guest_house, apartment, chalet, motel, alpine_hut. name_fr and name_ar are present only where OpenStreetMap carries that language. source is a short key resolved in metadata.sources[], and external ids live in refs (refs.osm is the OSM id as a string; refs.wikidata a QID; refs.wikipedia a "<lang>:<title>" sitelink). The four OSM layers carry no commune linkage, so commune_code and commune are null throughout.

Optional contact and classification fields are present where the source publishes them, and absent otherwise, never null. On lodging: address (209 records), phone (204, several numbers ;-separated as OSM tags them), website (84), stars (60) and rooms (24). On attractions: description (26). On historic sites: heritage_status (17, e.g. "part of UNESCO World Heritage Site") and heritage (12, the OSM protection level).

Most records on these four layers come from OpenStreetMap, but 115 come from Wikidata instead (32 attractions, 75 historic sites, 8 parks). Those carry source and geo_method of "wikidata" and a refs.wikidata QID with no refs.osm, they are CC0, not ODbL, so filter on source if the distinction matters for your attribution. In all, 236 records carry a Wikidata QID and 100 a Wikipedia sitelink.

Thermal spring – ASAL Geoportail sourced, with physical properties:

{
  "id": "thermal-spring-1",
  "name": "FORAGE DAR OUAD",
  "wilaya_code": "43",
  "commune_code": null,
  "commune": "BENI H'MIDENE",
  "lat": 36.4625,
  "lng": 6.4827778,
  "geo_precision": "exact",
  "geo_method": "asal",
  "source": "asal",
  "type": "forage",
  "temperature_c": 32,
  "debit_l_s": 15,
  "altitude_m": 423,
  "minerality": "BICARBONATEE CALCIQUE"
}

type is one of hammam, ain, source, forage. Physical properties (temperature_c, debit_l_s, altitude_m, minerality) come directly from the ASAL dataset; minerality is the only optional one. This is the one layer that names a commune, as commune, a name rather than an ONS commune_code, which stays null.

wilaya_code is zero-padded to two digits across all layers and joins GeoAlgeria's wilayas.

Need the administrative divisions too?

If you also need wilayas, dairas, and communes to join against, use the main geoalgeria package, it ships the full 69-wilaya division dataset that wilaya_code here links to. Use @geoalgeria/tourisme when you only need tourism data.

Quality floor

The repository test suite guards this snapshot against silent regressions: bilingual French + Arabic naming must stay at or above 28.8%, every geocoded record must keep geo_precision and geo_method, the currently sourced lodging contact/detail fields cannot shrink, and cross-category OpenStreetMap references stay explicitly bounded. These are regression floors, not completeness claims; a larger verified refresh may raise them.

Source

Data comes from three sources:

  • ASAL Geoportail – thermal springs (temperature, flow rate, altitude, mineral composition). Public government data.
  • OpenStreetMap – hotels, attractions, historic sites, and parks. Licensed under ODbL.
  • Wikidata – heritage sites, museums, and park metadata. Licensed under CC0.

License & attribution

Code is MIT. Underlying data:

  • Thermal springs: public government data (ASAL).
  • OSM-sourced layers: © OpenStreetMap contributors, ODbL.
  • Wikidata-sourced records: CC0.

Redistributed for reference and to power GeoAlgeria. Verify against original sources for authoritative, real-time information.

API docs & field reference → · Browse all packages →


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