@bangladeshi/bangladesh-address
Version:
A simple npm package for Bangladesh's administrative divisions, districts, upazilas, and metropolitan thanas.
243 lines (173 loc) • 5.99 kB
Markdown
# Bangladesh Address (division, district, upazila, thana)
A simple npm package that exports methods representing divisions, districts, upazilas and thanas (metropolitan police stations) of Bangladesh.
## Data Coverage
- **8 Divisions** - All administrative divisions
- **64 Districts** - All districts
- **495 Upazilas** - All upazilas (updated July 2021 with Eidgaon, Dasar, Madhyanagar)
- **26 Metropolitan Thanas** - Police stations in Dhaka, Chattogram, Rajshahi, Khulna
## Installation
```bash
npm i @bangladeshi/bangladesh-address
```
## Usage
### CommonJS
```javascript
const address = require('@bangladeshi/bangladesh-address')
```
### ES Modules / TypeScript
```typescript
import { allDivision, districtsOf, upazilasOf, DivisionName } from '@bangladeshi/bangladesh-address'
```
## API Reference
### Division
```javascript
allDivision()
// Returns: ['Dhaka', 'Chattogram', 'Mymensingh', ...]
divisionalDataOf(DivisionName.Dhaka)
// Returns: All districts and upazilas of Dhaka division
```
### Districts
```javascript
districtsOf(DivisionName.Dhaka)
// Returns: Districts of Dhaka division
allDistricts()
// Returns: Array of all 64 district names
```
### Upazilas
```javascript
upazilasOf("Tangail")
// Returns: Array of upazila objects for Tangail district
upazilaNamesOf("Tangail")
// Returns: Array of upazila names (strings) for Tangail district
allUpazila()
// Returns: Array of all 495 upazila names
isUpazila("Savar")
// Returns: true (Savar is an upazila)
getUpazila("Savar")
// Returns: { upazila: "Savar", district: "Dhaka", division: "Dhaka" }
```
### Thanas (Metropolitan Police Stations)
```javascript
allThana()
// Returns: Array of all 26 thana objects
allThanaNames()
// Returns: Array of all 26 thana names (strings)
thanasOf("Dhaka")
// Returns: Array of thana objects for Dhaka (15 thanas)
thanaNamesOf("Dhaka")
// Returns: Array of thana names (strings) for Dhaka
isThana("Gulshan")
// Returns: true (Gulshan is a metropolitan thana)
isThana("Savar")
// Returns: false (Savar is an upazila, not a thana)
isThana("Kotwali", "Dhaka")
// Returns: true (disambiguate with district context)
getThana("Gulshan")
// Returns: { thana: "Gulshan", district: "Dhaka", division: "Dhaka" }
getThana("Kotwali", "Chattogram")
// Returns: { thana: "Kotwali", district: "Chattogram", division: "Chattogram" }
```
### Validation Functions
```javascript
isValidDivision("Dhaka")
// Returns: true
isValidDivision("InvalidName")
// Returns: false
isValidDistrict("Tangail")
// Returns: true
isValidDistrict("Savar")
// Returns: false (Savar is an upazila, not a district)
```
### Reverse Lookups
```javascript
getDivisionOfDistrict("Tangail")
// Returns: "Dhaka"
getDivisionOfDistrict("Cox's Bazar")
// Returns: "Chattogram"
getDistrictOfUpazila("Savar")
// Returns: "Dhaka"
getDistrictOfUpazila("Mohammadpur", "Khulna")
// Returns: "Magura" (disambiguate with division context)
```
### Get Upazilas by Division
```javascript
upazilasOfDivision("Sylhet")
// Returns: Array of all upazila objects in Sylhet division
upazilaNamesOfDivision("Sylhet")
// Returns: Array of all upazila names (strings) in Sylhet division
```
### Search Locations
```javascript
searchLocations("pur")
// Returns: Array of matching locations across divisions, districts, upazilas, and thanas
// [
// { name: "Rangpur", type: "division" },
// { name: "Rangpur", type: "district", division: "Rangpur" },
// { name: "Mirpur", type: "thana", district: "Dhaka", division: "Dhaka" },
// ... more matches
// ]
```
### Raw Data Access
```javascript
import { upazilaData, thanaData } from '@bangladeshi/bangladesh-address'
// upazilaData: Array of all 495 upazila objects
// thanaData: Array of all 26 thana objects
```
### Types
```typescript
import { DivisionName, DistrictName, Upazila, Thana, SearchResult } from '@bangladeshi/bangladesh-address'
// Division enum
DivisionName.Dhaka
DivisionName.Chattogram
DivisionName.Mymensingh
DivisionName.Khulna
DivisionName.Rajshahi
DivisionName.Rangpur
DivisionName.Sylhet
DivisionName.Barisal
// DistrictName type (all 64 districts)
type DistrictName = "Dhaka" | "Chattogram" | "Khulna" | ... // 64 districts
// Upazila interface
interface Upazila {
upazila: string;
district: string;
division: string;
}
// Thana interface
interface Thana {
thana: string;
district: string;
division: string;
type: "thana";
}
```
## Metropolitan Thana Distribution
| City | Thana Count |
|------|-------------|
| Dhaka | 15 |
| Chattogram | 6 |
| Khulna | 3 |
| Rajshahi | 2 |
## Database Dumps (For Non-JavaScript Projects)
If you're using PHP, Python, Java, Go, Ruby, or any other language, you can use our pre-built database dumps instead of the npm package.
### Available Formats
| Database | File |
|----------|------|
| MySQL | [`db/mysql/bangladesh-address.sql`](db/mysql/bangladesh-address.sql) |
| PostgreSQL | [`db/postgresql/bangladesh-address.sql`](db/postgresql/bangladesh-address.sql) |
| SQLite | [`db/sqlite/bangladesh-address.sql`](db/sqlite/bangladesh-address.sql) |
| MongoDB | [`db/mongodb/`](db/mongodb/) |
### Quick Import
```bash
# MySQL
mysql -u username -p database_name < db/mysql/bangladesh-address.sql
# PostgreSQL
psql -U username -d database_name -f db/postgresql/bangladesh-address.sql
# SQLite
sqlite3 bangladesh.db < db/sqlite/bangladesh-address.sql
# MongoDB
mongoimport --db bangladesh --collection divisions --file db/mongodb/divisions.json --jsonArray
```
See [db/README.md](db/README.md) for full documentation, schema details, and example queries.
## Contribution
If you want to contribute please follow the guideline. [Contribution](https://github.com/rajuAhmed1705/bangladesh-address/blob/master/CONTRIBUTING.md)