Skip to main content

pak_geodata 0.10.1 copy "pak_geodata: ^0.10.1" to clipboard
pak_geodata: ^0.10.1 copied to clipboard

Comprehensive, typed, offline geographic data for all areas and cities in Pakistan

pak_geodata #

Pub Version License: MIT Live Interactive Demo

Comprehensive, typed, offline geographic data for all areas and cities in Pakistan.

pak_geodata is a pure Dart package providing offline access to verified geographic data for Pakistan with zero runtime dependencies. Built for Flutter mobile applications, web apps, and Dart backend services.

Explore the Interactive Live Demo to test multi-script search, interactive map exploration, and reverse geocoding in real-time.


Features #

  • ⚡ Zero Runtime Dependencies: Pure Dart SDK only (dart:core, dart:math). No Flutter dependency required; runs on iOS, Android, Web, Desktop, and Server.
  • 📦 Offline & Instant Cold-Start: 7 provinces, 79 cities, and 3,953 areas compiled directly as typed const models with zero runtime JSON parsing latency.
  • 🎯 Strict Geofencing: All coordinates strictly verified within Pakistan's geographical bounding box (23.5 <= lat <= 37.1, 60.8 <= lng <= 77.8).
  • 🏷️ Canonical Slugs: Standardized <city-slug>-<area-slug> identifiers (e.g. lahore-dha-phase-5, karachi-clifton-block-2).
  • 🔍 Multi-Script & Alias Search: English queries, colloquial aliases (e.g. "dha 5", "isb", "pindi"), native Urdu script ("گلبرگ", "کلفٹن"), and fuzzy typo tolerance.
  • 📍 Spatial Reverse Geocoding: Nearest neighbor resolution via spherical Haversine formula ($R = 6371.0088\text{ km}$).
  • 📮 Pakistan Post Codes: 5-digit postal code resolution and reverse lookups.

Dataset Statistics #

Level Count Coverage Key Details
Provinces & Territories 7 100% of Pakistan Punjab, Sindh, KPK, Balochistan, Islamabad (ICT), AJK, Gilgit-Baltistan
Verified Cities 79 100% Coverage Centroids, bounding boxes, administrative divisions, postal code ranges
Verified Areas 3,953 All 79 Cities Neighborhoods, sectors, housing schemes, commercial centers

Installation #

Add to your pubspec.yaml:

dependencies:
  pak_geodata: ^0.10.1

Or run:

dart pub add pak_geodata

For Flutter:

flutter pub add pak_geodata

Quick Start #

import 'package:pak_geodata/pak_geodata.dart';

void main() {
  // 1. Provinces & Cities
  final provinces = getAllProvinces();
  final lahore = getCityById('lahore');
  final punjabCities = getCitiesByProvince('punjab');

  // 2. Areas & Postal Codes
  final dha5 = getAreaById('lahore-dha-phase-5');
  final lahoreAreas = getAreasByCity('lahore');
  final postalArea = findAreaByPostalCode('54000');

  // 3. Nearest Area Spatial Lookup (Spherical Haversine)
  final nearest = getNearestArea(
    const Coordinates(lat: 31.4581, lng: 74.4121),
  );
  if (nearest != null) {
    print('Nearest: ${nearest.name} (${nearest.distanceKm.toStringAsFixed(2)} km)');
  }

  // 4. Multi-Script Search (English, Urdu, Colloquial)
  final searchResults = searchAreas('گلبرگ', cityId: 'lahore');
  for (final result in searchResults) {
    print('${result.name} (Score: ${result.score.toInt()})');
  }
}

Check out the full runnable example in example/main.dart.


Flutter Autocomplete Example #

Autocomplete<PakistanArea>(
  displayStringForOption: (PakistanArea area) => '${area.name}, ${area.cityId}',
  optionsBuilder: (TextEditingValue textEditingValue) {
    if (textEditingValue.text.isEmpty) {
      return const Iterable<PakistanArea>.empty();
    }
    return searchAreas(textEditingValue.text, limit: 10).map((r) => r.area);
  },
  onSelected: (PakistanArea selection) {
    print('Selected area: ${selection.id} with coords (${selection.coordinates.lat}, ${selection.coordinates.lng})');
  },
)

API Reference #

Function Return Type Description
getAllProvinces() List<PakistanProvince> Returns all 7 provinces/territories
getProvinceById(id) PakistanProvince? Case-insensitive province lookup
getAllCities() List<PakistanCity> Returns all 79 verified cities
getCitiesByProvince(provinceId) List<PakistanCity> Returns all cities in a province
getCityById(id) PakistanCity? Finds city by canonical slug
getAllAreas() List<PakistanArea> Returns all 3,953 verified areas
getAreasByCity(cityId) List<PakistanArea> Returns all areas in a city
getAreaById(id) PakistanArea? Finds area by canonical slug
findAreaByPostalCode(code) PakistanArea? Finds primary area by 5-digit postal code
findAreasByPostalCode(code) List<PakistanArea> Finds all areas sharing a postal code
haversineDistanceKm(c1, c2) double Spherical distance in kilometers
getNearestArea(coords, ...) NearestAreaResult? Finds closest area to target coordinates
searchAreas(query, ...) List<SearchResult> Multi-script ranked search
normalizeUrduText(text) String Strips diacritics, unifies letters and digits

Contributing & Repository #

Source code and issue tracking are hosted on GitHub:


License #

MIT License. See LICENSE for details.

1
likes
160
points
299
downloads

Documentation

API reference

Publisher

verified publisherthemohsinproject.org

Weekly Downloads

Comprehensive, typed, offline geographic data for all areas and cities in Pakistan

Repository (GitHub)
View/report issues
Contributing

License

MIT (license)

More

Packages that depend on pak_geodata