PHPackages                             mazharvai/bd-geo-location - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mazharvai/bd-geo-location

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

mazharvai/bd-geo-location
=========================

Bangladesh Geo Location data package for Laravel with support for Divisions, Districts, Upazilas, and Unions

v1.0.0(3mo ago)10MITPHPPHP ^8.2CI passing

Since Apr 4Pushed 3mo agoCompare

[ Source](https://github.com/mazharvai007/bd-geo-location-laravel)[ Packagist](https://packagist.org/packages/mazharvai/bd-geo-location)[ RSS](/packages/mazharvai-bd-geo-location/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (5)Versions (2)Used By (0)

BD Geo Location for Laravel
===========================

[](#bd-geo-location-for-laravel)

A comprehensive Bangladesh Geo Location data package for Laravel with support for Divisions, Districts, Upazilas, and Unions.

[![Latest Version](https://camo.githubusercontent.com/4f434bb1892feb5d52ffee31168a4066bf68f7d1984d6991312f18cd5c16518b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d617a6861722f62642d67656f2d6c6f636174696f6e3f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mazhar/bd-geo-location)[![Total Downloads](https://camo.githubusercontent.com/1b59650482bb82c84253bba34885b9877287d73d32e06b88583d3a17efc919f0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d617a6861722f62642d67656f2d6c6f636174696f6e3f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mazhar/bd-geo-location)[![License](https://camo.githubusercontent.com/96defe7c84ea3588b4b5e322b3d3abb46923072183bde0cc962307ac32f6dab5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6d617a6861722f62642d67656f2d6c6f636174696f6e3f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mazhar/bd-geo-location)[![PHP Version](https://camo.githubusercontent.com/e4cb2de2c5c0de1e0d1f3cc1353d2cddbe4062e1cd499b723fe4cbb2cfc67f73/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6d617a6861722f62642d67656f2d6c6f636174696f6e3f7374796c653d666c61742d737175617265)](https://packagist.org/packages/mazhar/bd-geo-location)[![Laravel](https://camo.githubusercontent.com/f60c226e0ead3c361e0ecbb045244f6c6d64b543beb87c46a01ff5b250083826/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d3130253230253743253230313125323025374325323031322d4646324432303f7374796c653d666c61742d737175617265)](https://laravel.com)[![Tests](https://github.com/mazharvai007/bd-geo-location-laravel/actions/workflows/tests.yml/badge.svg)](https://github.com/mazharvai007/bd-geo-location-laravel/actions/workflows/tests.yml)[![codecov](https://camo.githubusercontent.com/e292ea28e6624a374e3103ca34e85f0c321a67ce2d15da2f6116dfb91e8b954c/68747470733a2f2f636f6465636f762e696f2f67682f6d617a6861727661693030372f62642d67656f2d6c6f636174696f6e2d6c61726176656c2f6272616e63682f6d61696e2f67726170682f62616467652e737667)](https://codecov.io/gh/mazharvai007/bd-geo-location-laravel)

Features
--------

[](#features)

- Complete administrative hierarchy of Bangladesh
    - 8 Divisions
    - 68 Districts
    - 531 Upazilas
    - 4,916 Unions
- Bilingual (English &amp; Bengali) names
- JSON-based data (fast, zero-config)
- Optional database support
- Search functionality
- Validation rules
- Artisan commands
- Helper functions
- Laravel Facade support

Requirements
------------

[](#requirements)

- **PHP**: 8.2, 8.3, 8.4
- **Laravel**: 10, 11, 12
- **Composer**: 2.x

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require mazhar/bd-geo-location
```

The package will auto-register the service provider and facade in Laravel.

Configuration (Optional)
------------------------

[](#configuration-optional)

Publish the configuration file:

```
php artisan vendor:publish --tag=bd-geo-config
```

This will create `config/bd-geo.php` where you can configure:

```
return [
    // Data source: 'json' (default) or 'database'
    'data_source' => env('BD_GEO_DATA_SOURCE', 'json'),

    // Cache duration in seconds (default: 0 = disabled)
    // Set to a positive value to enable caching (e.g., 604800 for 7 days)
    'cache_duration' => env('BD_GEO_CACHE_DURATION', 0),

    // Database table prefix
    'table_prefix' => env('BD_GEO_TABLE_PREFIX', 'bd_'),
];
```

Usage
-----

[](#usage)

### Using Facade

[](#using-facade)

```
use Mazhar\BDGeoLocation\Facades\BDGeo;

// Get all divisions
$divisions = BDGeo::getAllDivisions();

// Get division by ID
$division = BDGeo::getDivisionById('30');

// Get districts by division
$districts = BDGeo::getDistrictsByDivision('30');

// Get upazilas by district
$upazilas = BDGeo::getUpazilasByDistrict('3034');

// Get unions by upazila
$unions = BDGeo::getUnionsByUpazila('303427');

// Search by name
$results = BDGeo::searchByName('Dhaka');

// Get complete hierarchy
$hierarchy = BDGeo::getGeoHierarchy('303427', 'upazila');
```

### Using Helper Functions

[](#using-helper-functions)

```
// Get all divisions
$divisions = bd_divisions();

// Get division by ID
$division = bd_division('30');

// Get districts (all or by division)
$districts = bd_districts('30');

// Get upazilas (all or by district)
$upazilas = bd_upazilas('3034');

// Get unions (all or by upazila)
$unions = bd_unions('303427');

// Search locations
$results = bd_geo_search('Dhaka');

// Get hierarchy
$hierarchy = bd_geo_hierarchy('303427', 'upazila');
```

### In Controllers

[](#in-controllers)

```
use Mazhar\BDGeoLocation\Facades\BDGeo;

class LocationController extends Controller
{
    public function index()
    {
        $divisions = BDGeo::getAllDivisions();

        return response()->json($divisions);
    }

    public function districts($divisionId)
    {
        $districts = BDGeo::getDistrictsByDivision($divisionId);

        return response()->json($districts);
    }

    public function search(Request $request)
    {
        $results = BDGeo::searchByName($request->query('q'));

        return response()->json($results);
    }
}
```

### In Blade Templates

[](#in-blade-templates)

```

    @foreach(bd_divisions() as $division)

            {{ $division['name'] }} ({{ $division['name_bn'] }})

    @endforeach

```

Validation Rules
----------------

[](#validation-rules)

Use the built-in validation rules to validate geo location IDs:

```
use Illuminate\Http\Request;
use Mazhar\BDGeoLocation\Validation\Rules\BDDivision;
use Mazhar\BDGeoLocation\Validation\Rules\BDDistrict;
use Mazhar\BDGeoLocation\Validation\Rules\BDUpazila;
use Mazhar\BDGeoLocation\Validation\Rules\BDUnion;

public function store(Request $request)
{
    $validated = $request->validate([
        'division_id' => ['required', new BDDivision],
        'district_id' => ['required', new BDDistrict],
        'upazila_id' => ['nullable', new BDUpazila],
        'union_id' => ['nullable', new BDUnion],
    ]);

    // Your logic here
}
```

Artisan Commands
----------------

[](#artisan-commands)

### Seed Geo Data to Database

[](#seed-geo-data-to-database)

If you want to use database instead of JSON, first publish and run migrations:

```
# Publish migrations
php artisan vendor:publish --tag=bd-geo-migrations

# Run migrations
php artisan migrate

# Seed data to database
php artisan bd-geo:seed
```

Database Support (Optional)
---------------------------

[](#database-support-optional)

By default, the package uses JSON files for fast access. If you prefer database queries:

1. Set `BD_GEO_DATA_SOURCE=database` in your `.env` file
2. Publish and run migrations
3. Seed the data

```
php artisan vendor:publish --tag=bd-geo-migrations
php artisan migrate
php artisan bd-geo:seed
```

Now you can also use Eloquent models:

```
use Mazhar\BDGeoLocation\Models\Division;
use Mazhar\BDGeoLocation\Models\District;
use Mazhar\BDGeoLocation\Models\Upazila;
use Mazhar\BDGeoLocation\Models\Union;

// Get division with districts
$division = Division::with('districts')->find('30');

// Get district with upazilas
$district = District::with('upazilas')->find('3034');

// Query with relationships
$upazilas = Upazila::with('district.division')->get();
```

Data Structure
--------------

[](#data-structure)

Each location entity contains:

```
[
    'id' => '30',           // Unique ID
    'name' => 'Dhaka',      // English name
    'name_bn' => 'ঢাকা',   // Bengali name
    'lat' => 23.7104,       // Latitude (divisions & districts)
    'long' => 90.4074,      // Longitude (divisions & districts)
]
```

API Response Example
--------------------

[](#api-response-example)

```
{
    "divisions": [
        {
            "id": "30",
            "name": "Dhaka",
            "name_bn": "ঢাকা",
            "lat": "23.71040000",
            "long": "90.40740000"
        }
    ],
    "districts": [
        {
            "id": "3034",
            "division_id": "30",
            "name": "Dhaka",
            "name_bn": "ঢাকা",
            "lat": "23.71153000",
            "long": "90.41158000"
        }
    ]
}
```

Testing
-------

[](#testing)

```
# Run tests
composer test

# Run tests with coverage report
composer test:coverage

# Run full CI pipeline locally
composer ci
```

Development
-----------

[](#development)

### Code Quality Checks

[](#code-quality-checks)

This package includes automated code quality checks:

```
# Run static analysis (PHPStan)
composer analyse

# Validate composer.json
composer validate --strict

# Run all quality checks
composer quality
```

### PHPStan Configuration

[](#phpstan-configuration)

The package uses [Larastan](https://github.com/larastan/larastan) for static analysis at level 5. Configuration is in `phpstan.neon`.

### CI/CD

[](#cicd)

This package uses GitHub Actions for continuous integration:

- ✅ Tests on PHP 8.2, 8.3, 8.4 with Laravel 10, 11, and 12
- ✅ Static analysis with PHPStan
- ✅ Code quality checks
- ✅ Security audits
- ✅ Code coverage reporting via Codecov

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Contributions are welcome! Please feel free to submit a Pull Request.

Credits
-------

[](#credits)

- [mazharvai](https://github.com/mazharvai)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [LICENSE](LICENSE) for more information.

Also Available
--------------

[](#also-available)

- [JavaScript/TypeScript version (npm)](https://www.npmjs.com/package/bd-geo-location) - For React, Vue, Angular, Node.js
- [React Native version](https://www.npmjs.com/package/bd-geo-location) - For mobile apps

Support
-------

[](#support)

For issues, questions, or contributions, please visit [GitHub Issues](https://github.com/mazharvai/bd-geo-location-laravel/issues).

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance82

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 92.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

92d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9638e8f31d72e927f113ccf9f6985320f3a59c076f93c6b49a6edf42ed3d939c?d=identicon)[mazharvai](/maintainers/mazharvai)

---

Top Contributors

[![mazhar-cognate](https://avatars.githubusercontent.com/u/234772215?v=4)](https://github.com/mazhar-cognate "mazhar-cognate (12 commits)")[![mazharvai007](https://avatars.githubusercontent.com/u/3949434?v=4)](https://github.com/mazharvai007 "mazharvai007 (1 commits)")

---

Tags

laravellocationgeographygeo-locationunionsdistrictsbangladeshdivisionsbdupazilas

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/mazharvai-bd-geo-location/health.svg)

```
[![Health](https://phpackages.com/badges/mazharvai-bd-geo-location/health.svg)](https://phpackages.com/packages/mazharvai-bd-geo-location)
```

###  Alternatives

[stevebauman/location

Retrieve a user's location by their IP Address

1.3k8.5M92](/packages/stevebauman-location)[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M346](/packages/psalm-plugin-laravel)[renatomarinho/laravel-page-speed

Laravel Page Speed

2.5k1.7M10](/packages/renatomarinho-laravel-page-speed)[vinkius-labs/laravel-page-speed

Laravel Page Speed

2.5k12.5k1](/packages/vinkius-labs-laravel-page-speed)[emargareten/inertia-modal

Inertia Modal is a Laravel package that lets you implement backend-driven modal dialogs for Inertia apps.

90142.9k](/packages/emargareten-inertia-modal)[interaction-design-foundation/laravel-geoip

Support for multiple Geographical Location services.

19267.9k3](/packages/interaction-design-foundation-laravel-geoip)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
