quantaroute-geocoding


Namequantaroute-geocoding JSON
Version 1.0.5 PyPI version JSON
download
home_pagehttps://github.com/quantaroute/quantaroute-geocoding-python
SummaryRevolutionary Python SDK for QuantaRoute Geocoding API with Location Lookup and offline DigiPin processing
upload_time2025-10-30 20:28:12
maintainerNone
docs_urlNone
authorQuantaRoute
requires_python>=3.7
licenseMIT
keywords geocoding digipin gis location india address coordinates administrative-boundaries pincode postal-lookup location-intelligence
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # QuantaRoute Geocoding Python SDK

A **revolutionary** Python library for geocoding addresses to DigiPin codes with **groundbreaking Location Lookup API** and offline processing capabilities.

## 🚀 Revolutionary Features

### 🎯 **NEW: Location Lookup API** - *Service that even government doesn't provide!*
- 🗺️ **Administrative Boundary Lookup**: Get state, division, locality, pincode from coordinates
- 📍 **36,000+ Postal Boundaries**: Complete coverage across India
- ⚡ **Sub-100ms Response**: Cached responses with database fallback
- 🎯 **Government-Level Precision**: Accuracy that official services don't offer
- 🔄 **Batch Processing**: Up to 100 locations per request

### 🌟 **Core Features**
- 🌐 **Online API Integration**: Full access to QuantaRoute Geocoding API
- 🔌 **Offline Processing**: Process coordinates ↔ DigiPin without internet
- 📊 **CSV Bulk Processing**: Handle large datasets efficiently
- 🚀 **CLI Tools**: Command-line interface for quick operations
- 📈 **Progress Tracking**: Real-time progress bars for bulk operations
- 🔄 **Retry Logic**: Automatic retry with exponential backoff
- 🎯 **Rate Limit Handling**: Intelligent rate limit management

## Installation

```bash
pip install quantaroute-geocoding
```

## Upgrade

```bash
pip install --upgrade quantaroute-geocoding
or
pip install quantaroute-geocoding==<version>
or
pip install --force-reinstall quantaroute-geocoding==1.0.3
or
pip cache purge
pip install --upgrade quantaroute-geocoding
or
pip install --no-cache-dir --upgrade quantaroute-geocoding
```

For offline DigiPin processing, also install the official DigiPin library:

```bash
pip install digipin
```

## Quick Start

### 🚀 **NEW: Revolutionary Location Lookup API**

```python
from quantaroute_geocoding import QuantaRouteClient, LocationLookupClient

# Initialize client
client = QuantaRouteClient(api_key="your-api-key")

# 🚀 REVOLUTIONARY: Get administrative boundaries from coordinates
result = client.lookup_location_from_coordinates(28.6139, 77.2090)
print(f"Pincode: {result['pincode']}")           # 110001
print(f"Office: {result['office_name']}")        # New Delhi GPO
print(f"Division: {result['division']}")         # New Delhi GPO
print(f"Circle: {result['circle']}")             # Delhi
print(f"DigiPin: {result['digipin']}")           # 39J-438-TJC7
print(f"Response Time: {result['response_time_ms']}ms")  # <100ms

# 🚀 REVOLUTIONARY: Get boundaries from DigiPin
result = client.lookup_location_from_digipin("39J-438-TJC7")
print(f"Pincode: {result['administrative_info']['pincode']}")
print(f"State: {result['administrative_info']['state']}")
print(f"Division: {result['administrative_info']['division']}")
print(f"Locality: {result['administrative_info']['locality']}")

# 📊 Get live statistics (36,000+ boundaries)
stats = client.get_location_statistics()
print(f"Total Boundaries: {stats['totalBoundaries']:,}")
print(f"Total States: {stats['totalStates']}")
```

### 🌟 **Traditional Geocoding API**

```python
# Geocode an address
result = client.geocode("India Gate, New Delhi, India")
print(f"DigiPin: {result['digipin']}")
print(f"Coordinates: {result['coordinates']}")

# Convert coordinates to DigiPin
result = client.coordinates_to_digipin(28.6139, 77.2090)
print(f"DigiPin: {result['digipin']}")

# Reverse geocode DigiPin
result = client.reverse_geocode("39J-438-TJC7")
print(f"Coordinates: {result['coordinates']}")
```

### Offline Processing

```python
from quantaroute_geocoding import OfflineProcessor

# Initialize offline processor
processor = OfflineProcessor()

# Convert coordinates to DigiPin (offline)
result = processor.coordinates_to_digipin(28.6139, 77.2090)
print(f"DigiPin: {result['digipin']}")

# Convert DigiPin to coordinates (offline)
result = processor.digipin_to_coordinates("39J-438-TJC7")
print(f"Coordinates: {result['coordinates']}")

# Validate DigiPin format
result = processor.validate_digipin("39J-438-TJC7")
print(f"Valid: {result['isValid']}")
```

### CSV Bulk Processing

```python
from quantaroute_geocoding import CSVProcessor

# Initialize processor
processor = CSVProcessor(api_key="your-api-key")

# Process addresses to DigiPin
result = processor.process_geocoding_csv(
    input_file="addresses.csv",
    output_file="results.csv",
    address_column="address"
)

print(f"Processed {result['total_rows']} rows")
print(f"Success rate: {result['success_rate']:.1%}")

# Process coordinates to DigiPin (can use offline mode)
processor_offline = CSVProcessor(use_offline=True)
result = processor_offline.process_coordinates_to_digipin_csv(
    input_file="coordinates.csv",
    output_file="digipins.csv"
)
```

## Command Line Interface

The package includes a **revolutionary** CLI with Location Lookup capabilities:

### 🚀 **NEW: Revolutionary Location Lookup Commands**

```bash
# Get administrative boundaries from coordinates
quantaroute-geocode location-lookup 28.6139 77.2090 --api-key your-key

# Get boundaries from DigiPin
quantaroute-geocode location-from-digipin "39J-438-TJC7" --api-key your-key

# Get live statistics (36,000+ boundaries)
quantaroute-geocode location-stats --api-key your-key

# Batch location lookup from CSV (coming soon)
quantaroute-geocode location-lookup-csv coordinates.csv boundaries.csv --api-key your-key
```

### 🌟 **Traditional Geocoding Commands**

```bash
# Using API
quantaroute-geocode geocode addresses.csv results.csv --api-key your-key

# With custom columns
quantaroute-geocode geocode data.csv output.csv \
    --address-column street_address \
    --city-column city_name \
    --state-column state_name
```

### Convert coordinates to DigiPin

```bash
# Online processing
quantaroute-geocode coords-to-digipin coordinates.csv digipins.csv --api-key your-key

# Offline processing (no API key needed)
quantaroute-geocode coords-to-digipin coordinates.csv digipins.csv --offline
```

### Convert DigiPin to coordinates

```bash
# Online processing
quantaroute-geocode digipin-to-coords digipins.csv coordinates.csv --api-key your-key

# Offline processing
quantaroute-geocode digipin-to-coords digipins.csv coordinates.csv --offline
```

### Single operations

```bash
# Convert single coordinate to DigiPin
quantaroute-geocode single-coord-to-digipin 28.6139 77.2090 --offline

# Convert single DigiPin to coordinates
quantaroute-geocode single-digipin-to-coords "39J-438-TJC7" --offline

# Check API usage
quantaroute-geocode usage --api-key your-key
```

## CSV File Formats

### Input CSV for Address Geocoding

```csv
address,city,state,pincode,country
"123 Main Street","New Delhi","Delhi","110001","India"
"456 Park Avenue","Mumbai","Maharashtra","400001","India"
```

### Input CSV for Coordinates to DigiPin

```csv
latitude,longitude
28.6139,77.2090
19.0760,72.8777
```

### Input CSV for DigiPin to Coordinates

```csv
digipin
39J-438-TJC7
39J-49J-4867
```

## 🚀 Revolutionary Location Lookup API

### Dedicated Location Lookup Client

```python
from quantaroute_geocoding import LocationLookupClient

# Initialize dedicated location client
location_client = LocationLookupClient(api_key="your-api-key")

# Single coordinate lookup
result = location_client.lookup_coordinates(28.6139, 77.2090)
print(f"📮 Pincode: {result['pincode']}")
print(f"🏢 Office: {result['office_name']}")
print(f"🏛️ Division: {result['division']}")
print(f"⚡ Response Time: {result['response_time_ms']}ms")

# DigiPin to boundaries
result = location_client.lookup_digipin("39J-438-TJC7")
print(f"Administrative boundaries: {result}")

# Batch processing (up to 100 locations)
locations = [
    {"latitude": 28.6139, "longitude": 77.2090},
    {"latitude": 19.0760, "longitude": 72.8777},
    {"digipin": "39J-438-TJC7"}
]
results = location_client.batch_lookup(locations)
print(f"Processed {len(results['results'])} locations")

# Live statistics
stats = location_client.get_statistics()
print(f"🗺️ Total Boundaries: {stats['total_boundaries']:,}")
print(f"⚡ Cache Size: {stats['cache_size']}")

# Coverage information
coverage = location_client.get_coverage_info()
print(f"Service capabilities: {coverage}")
```

### Location Lookup Output Format

```json
{
  "pincode": "110001",
  "office_name": "New Delhi GPO",
  "division": "New Delhi GPO",
  "region": "",
  "circle": "Delhi",
  "coordinates": {
    "latitude": 28.6139,
    "longitude": 77.2090
  },
  "digipin": "39J-438-TJC7",
  "cached": true,
  "response_time_ms": 45
}
```

### Why This is Revolutionary

🎯 **Government-Level Precision**: Access to administrative boundaries that even government APIs don't provide at this level of detail and accessibility.

📍 **36,000+ Boundaries**: Complete coverage of Indian postal boundaries with sub-district level precision.

⚡ **Performance**: Sub-100ms cached responses, <500ms database queries.

🔄 **Batch Processing**: Process up to 100 locations in a single API call.

✨ **Unique Value**: The only service providing this level of administrative boundary lookup precision for India.

## Advanced Features

### Webhook Management

```python
# Register webhook
webhook = client.register_webhook(
    url="https://your-app.com/webhook",
    events=["bulk_processing.completed", "geocoding.completed"]
)

# List webhooks
webhooks = client.list_webhooks()

# Delete webhook
client.delete_webhook(webhook['id'])
```

### Batch Processing with Progress Callback

```python
def progress_callback(processed, total, success, errors):
    print(f"Progress: {processed}/{total} - Success: {success}, Errors: {errors}")

processor = CSVProcessor(api_key="your-key")
result = processor.process_geocoding_csv(
    input_file="large_dataset.csv",
    output_file="results.csv",
    progress_callback=progress_callback
)
```

### Offline Grid Operations

```python
processor = OfflineProcessor()

# Get grid information
grid_info = processor.get_grid_info("39J-438-TJC7")
print(f"Grid center: {grid_info['center']}")
print(f"Grid bounds: {grid_info['bounds']}")

# Find nearby grids
nearby = processor.find_nearby_grids(28.6139, 77.2090, radius_meters=100)
for grid in nearby:
    print(f"DigiPin: {grid['digipin']}, Distance: {grid['distance_meters']}m")

# Calculate distance between coordinates
distance = processor.calculate_distance(28.6139, 77.2090, 28.6150, 77.2100)
print(f"Distance: {distance:.2f} km")
```

## Configuration

### Environment Variables

Set your API key as an environment variable:

```bash
export QUANTAROUTE_API_KEY="your-api-key"
```

### API Configuration

```python
client = QuantaRouteClient(
    api_key="your-key",
    base_url="https://api.quantaroute.com",  # Custom base URL
    timeout=30,  # Request timeout in seconds
    max_retries=3  # Maximum retry attempts
)
```

### CSV Processor Configuration

```python
processor = CSVProcessor(
    api_key="your-key",
    use_offline=False,  # Use offline processing when possible
    batch_size=50,  # Records per API batch
    delay_between_batches=1.0  # Delay in seconds between batches
)
```

## Error Handling

```python
from quantaroute_geocoding import (
    QuantaRouteError,
    APIError,
    RateLimitError,
    AuthenticationError,
    ValidationError
)

try:
    result = client.geocode("Invalid address")
except RateLimitError as e:
    print(f"Rate limit exceeded. Retry after {e.retry_after} seconds")
except AuthenticationError:
    print("Invalid API key")
except ValidationError as e:
    print(f"Validation error: {e}")
except APIError as e:
    print(f"API error: {e} (Status: {e.status_code})")
```

## Performance Tips

1. **Use Batch Processing**: Process multiple addresses in batches for better performance
2. **Offline Mode**: Use offline processing for coordinate ↔ DigiPin conversions
3. **Caching**: The API includes intelligent caching - repeated requests are faster
4. **Rate Limits**: The SDK handles rate limits automatically with retry logic
5. **CSV Processing**: Use the CSV processor for large datasets instead of individual API calls

## API Limits

### Traditional Geocoding API

| Tier | Requests/Minute | Monthly Limit | Batch Size |
|------|----------------|---------------|------------|
| Free | 10 | 1,000 | 50 |
| Paid | 100 | 10,000 | 100 |
| Enterprise | 1,000 | Unlimited | 100 |

### 🚀 Revolutionary Location Lookup API

| Tier | Requests/Minute | Monthly Limit | Batch Size | Boundaries |
|------|----------------|---------------|------------|------------|
| Free | 20 | 2,000 | 50 | 36,000+ |
| Paid | 200 | 20,000 | 100 | 36,000+ |
| Enterprise | 2,000 | Unlimited | 100 | 36,000+ |

**Performance Guarantees:**
- ⚡ Cached responses: <100ms
- 🔍 Database queries: <500ms
- 📊 Batch processing: <50ms per location
- 🎯 99.9% uptime SLA (Enterprise)

## Support

- 📧 Email: support@quantaroute.com
- 🌐 Website: https://quantaroute.com
- 📖 Traditional API Docs: https://api.quantaroute.com/v1/digipin/docs
- 🚀 **NEW: Location Lookup API**: https://api.quantaroute.com/v1/location
- 📊 **Live Statistics**: https://api.quantaroute.com/v1/location/stats

### 🚀 What Makes This Revolutionary?

**QuantaRoute's Location Lookup API is the first and only service to provide:**

✨ **Government-Level Precision**: Administrative boundary data that even government APIs don't provide at this level of detail and accessibility.

📍 **Complete Coverage**: 36,000+ postal boundaries across India with sub-district precision.

⚡ **Blazing Performance**: Sub-100ms cached responses, guaranteed <500ms database queries.

🎯 **Unique Value Proposition**: The only service providing this level of administrative boundary lookup precision for India.

🔄 **Developer-Friendly**: Simple APIs, comprehensive SDKs, and excellent documentation.

**Ready to revolutionize your location intelligence applications?**

## License

MIT License - see LICENSE file for details.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/quantaroute/quantaroute-geocoding-python",
    "name": "quantaroute-geocoding",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "geocoding, digipin, gis, location, india, address, coordinates, administrative-boundaries, pincode, postal-lookup, location-intelligence",
    "author": "QuantaRoute",
    "author_email": "QuantaRoute <support@quantaroute.com>",
    "download_url": "https://files.pythonhosted.org/packages/9a/4a/7480b23fb5716a4b7a181b4e6d10adf575c915afd4758ad36e5778baf332/quantaroute_geocoding-1.0.5.tar.gz",
    "platform": null,
    "description": "# QuantaRoute Geocoding Python SDK\n\nA **revolutionary** Python library for geocoding addresses to DigiPin codes with **groundbreaking Location Lookup API** and offline processing capabilities.\n\n## \ud83d\ude80 Revolutionary Features\n\n### \ud83c\udfaf **NEW: Location Lookup API** - *Service that even government doesn't provide!*\n- \ud83d\uddfa\ufe0f **Administrative Boundary Lookup**: Get state, division, locality, pincode from coordinates\n- \ud83d\udccd **36,000+ Postal Boundaries**: Complete coverage across India\n- \u26a1 **Sub-100ms Response**: Cached responses with database fallback\n- \ud83c\udfaf **Government-Level Precision**: Accuracy that official services don't offer\n- \ud83d\udd04 **Batch Processing**: Up to 100 locations per request\n\n### \ud83c\udf1f **Core Features**\n- \ud83c\udf10 **Online API Integration**: Full access to QuantaRoute Geocoding API\n- \ud83d\udd0c **Offline Processing**: Process coordinates \u2194 DigiPin without internet\n- \ud83d\udcca **CSV Bulk Processing**: Handle large datasets efficiently\n- \ud83d\ude80 **CLI Tools**: Command-line interface for quick operations\n- \ud83d\udcc8 **Progress Tracking**: Real-time progress bars for bulk operations\n- \ud83d\udd04 **Retry Logic**: Automatic retry with exponential backoff\n- \ud83c\udfaf **Rate Limit Handling**: Intelligent rate limit management\n\n## Installation\n\n```bash\npip install quantaroute-geocoding\n```\n\n## Upgrade\n\n```bash\npip install --upgrade quantaroute-geocoding\nor\npip install quantaroute-geocoding==<version>\nor\npip install --force-reinstall quantaroute-geocoding==1.0.3\nor\npip cache purge\npip install --upgrade quantaroute-geocoding\nor\npip install --no-cache-dir --upgrade quantaroute-geocoding\n```\n\nFor offline DigiPin processing, also install the official DigiPin library:\n\n```bash\npip install digipin\n```\n\n## Quick Start\n\n### \ud83d\ude80 **NEW: Revolutionary Location Lookup API**\n\n```python\nfrom quantaroute_geocoding import QuantaRouteClient, LocationLookupClient\n\n# Initialize client\nclient = QuantaRouteClient(api_key=\"your-api-key\")\n\n# \ud83d\ude80 REVOLUTIONARY: Get administrative boundaries from coordinates\nresult = client.lookup_location_from_coordinates(28.6139, 77.2090)\nprint(f\"Pincode: {result['pincode']}\")           # 110001\nprint(f\"Office: {result['office_name']}\")        # New Delhi GPO\nprint(f\"Division: {result['division']}\")         # New Delhi GPO\nprint(f\"Circle: {result['circle']}\")             # Delhi\nprint(f\"DigiPin: {result['digipin']}\")           # 39J-438-TJC7\nprint(f\"Response Time: {result['response_time_ms']}ms\")  # <100ms\n\n# \ud83d\ude80 REVOLUTIONARY: Get boundaries from DigiPin\nresult = client.lookup_location_from_digipin(\"39J-438-TJC7\")\nprint(f\"Pincode: {result['administrative_info']['pincode']}\")\nprint(f\"State: {result['administrative_info']['state']}\")\nprint(f\"Division: {result['administrative_info']['division']}\")\nprint(f\"Locality: {result['administrative_info']['locality']}\")\n\n# \ud83d\udcca Get live statistics (36,000+ boundaries)\nstats = client.get_location_statistics()\nprint(f\"Total Boundaries: {stats['totalBoundaries']:,}\")\nprint(f\"Total States: {stats['totalStates']}\")\n```\n\n### \ud83c\udf1f **Traditional Geocoding API**\n\n```python\n# Geocode an address\nresult = client.geocode(\"India Gate, New Delhi, India\")\nprint(f\"DigiPin: {result['digipin']}\")\nprint(f\"Coordinates: {result['coordinates']}\")\n\n# Convert coordinates to DigiPin\nresult = client.coordinates_to_digipin(28.6139, 77.2090)\nprint(f\"DigiPin: {result['digipin']}\")\n\n# Reverse geocode DigiPin\nresult = client.reverse_geocode(\"39J-438-TJC7\")\nprint(f\"Coordinates: {result['coordinates']}\")\n```\n\n### Offline Processing\n\n```python\nfrom quantaroute_geocoding import OfflineProcessor\n\n# Initialize offline processor\nprocessor = OfflineProcessor()\n\n# Convert coordinates to DigiPin (offline)\nresult = processor.coordinates_to_digipin(28.6139, 77.2090)\nprint(f\"DigiPin: {result['digipin']}\")\n\n# Convert DigiPin to coordinates (offline)\nresult = processor.digipin_to_coordinates(\"39J-438-TJC7\")\nprint(f\"Coordinates: {result['coordinates']}\")\n\n# Validate DigiPin format\nresult = processor.validate_digipin(\"39J-438-TJC7\")\nprint(f\"Valid: {result['isValid']}\")\n```\n\n### CSV Bulk Processing\n\n```python\nfrom quantaroute_geocoding import CSVProcessor\n\n# Initialize processor\nprocessor = CSVProcessor(api_key=\"your-api-key\")\n\n# Process addresses to DigiPin\nresult = processor.process_geocoding_csv(\n    input_file=\"addresses.csv\",\n    output_file=\"results.csv\",\n    address_column=\"address\"\n)\n\nprint(f\"Processed {result['total_rows']} rows\")\nprint(f\"Success rate: {result['success_rate']:.1%}\")\n\n# Process coordinates to DigiPin (can use offline mode)\nprocessor_offline = CSVProcessor(use_offline=True)\nresult = processor_offline.process_coordinates_to_digipin_csv(\n    input_file=\"coordinates.csv\",\n    output_file=\"digipins.csv\"\n)\n```\n\n## Command Line Interface\n\nThe package includes a **revolutionary** CLI with Location Lookup capabilities:\n\n### \ud83d\ude80 **NEW: Revolutionary Location Lookup Commands**\n\n```bash\n# Get administrative boundaries from coordinates\nquantaroute-geocode location-lookup 28.6139 77.2090 --api-key your-key\n\n# Get boundaries from DigiPin\nquantaroute-geocode location-from-digipin \"39J-438-TJC7\" --api-key your-key\n\n# Get live statistics (36,000+ boundaries)\nquantaroute-geocode location-stats --api-key your-key\n\n# Batch location lookup from CSV (coming soon)\nquantaroute-geocode location-lookup-csv coordinates.csv boundaries.csv --api-key your-key\n```\n\n### \ud83c\udf1f **Traditional Geocoding Commands**\n\n```bash\n# Using API\nquantaroute-geocode geocode addresses.csv results.csv --api-key your-key\n\n# With custom columns\nquantaroute-geocode geocode data.csv output.csv \\\n    --address-column street_address \\\n    --city-column city_name \\\n    --state-column state_name\n```\n\n### Convert coordinates to DigiPin\n\n```bash\n# Online processing\nquantaroute-geocode coords-to-digipin coordinates.csv digipins.csv --api-key your-key\n\n# Offline processing (no API key needed)\nquantaroute-geocode coords-to-digipin coordinates.csv digipins.csv --offline\n```\n\n### Convert DigiPin to coordinates\n\n```bash\n# Online processing\nquantaroute-geocode digipin-to-coords digipins.csv coordinates.csv --api-key your-key\n\n# Offline processing\nquantaroute-geocode digipin-to-coords digipins.csv coordinates.csv --offline\n```\n\n### Single operations\n\n```bash\n# Convert single coordinate to DigiPin\nquantaroute-geocode single-coord-to-digipin 28.6139 77.2090 --offline\n\n# Convert single DigiPin to coordinates\nquantaroute-geocode single-digipin-to-coords \"39J-438-TJC7\" --offline\n\n# Check API usage\nquantaroute-geocode usage --api-key your-key\n```\n\n## CSV File Formats\n\n### Input CSV for Address Geocoding\n\n```csv\naddress,city,state,pincode,country\n\"123 Main Street\",\"New Delhi\",\"Delhi\",\"110001\",\"India\"\n\"456 Park Avenue\",\"Mumbai\",\"Maharashtra\",\"400001\",\"India\"\n```\n\n### Input CSV for Coordinates to DigiPin\n\n```csv\nlatitude,longitude\n28.6139,77.2090\n19.0760,72.8777\n```\n\n### Input CSV for DigiPin to Coordinates\n\n```csv\ndigipin\n39J-438-TJC7\n39J-49J-4867\n```\n\n## \ud83d\ude80 Revolutionary Location Lookup API\n\n### Dedicated Location Lookup Client\n\n```python\nfrom quantaroute_geocoding import LocationLookupClient\n\n# Initialize dedicated location client\nlocation_client = LocationLookupClient(api_key=\"your-api-key\")\n\n# Single coordinate lookup\nresult = location_client.lookup_coordinates(28.6139, 77.2090)\nprint(f\"\ud83d\udcee Pincode: {result['pincode']}\")\nprint(f\"\ud83c\udfe2 Office: {result['office_name']}\")\nprint(f\"\ud83c\udfdb\ufe0f Division: {result['division']}\")\nprint(f\"\u26a1 Response Time: {result['response_time_ms']}ms\")\n\n# DigiPin to boundaries\nresult = location_client.lookup_digipin(\"39J-438-TJC7\")\nprint(f\"Administrative boundaries: {result}\")\n\n# Batch processing (up to 100 locations)\nlocations = [\n    {\"latitude\": 28.6139, \"longitude\": 77.2090},\n    {\"latitude\": 19.0760, \"longitude\": 72.8777},\n    {\"digipin\": \"39J-438-TJC7\"}\n]\nresults = location_client.batch_lookup(locations)\nprint(f\"Processed {len(results['results'])} locations\")\n\n# Live statistics\nstats = location_client.get_statistics()\nprint(f\"\ud83d\uddfa\ufe0f Total Boundaries: {stats['total_boundaries']:,}\")\nprint(f\"\u26a1 Cache Size: {stats['cache_size']}\")\n\n# Coverage information\ncoverage = location_client.get_coverage_info()\nprint(f\"Service capabilities: {coverage}\")\n```\n\n### Location Lookup Output Format\n\n```json\n{\n  \"pincode\": \"110001\",\n  \"office_name\": \"New Delhi GPO\",\n  \"division\": \"New Delhi GPO\",\n  \"region\": \"\",\n  \"circle\": \"Delhi\",\n  \"coordinates\": {\n    \"latitude\": 28.6139,\n    \"longitude\": 77.2090\n  },\n  \"digipin\": \"39J-438-TJC7\",\n  \"cached\": true,\n  \"response_time_ms\": 45\n}\n```\n\n### Why This is Revolutionary\n\n\ud83c\udfaf **Government-Level Precision**: Access to administrative boundaries that even government APIs don't provide at this level of detail and accessibility.\n\n\ud83d\udccd **36,000+ Boundaries**: Complete coverage of Indian postal boundaries with sub-district level precision.\n\n\u26a1 **Performance**: Sub-100ms cached responses, <500ms database queries.\n\n\ud83d\udd04 **Batch Processing**: Process up to 100 locations in a single API call.\n\n\u2728 **Unique Value**: The only service providing this level of administrative boundary lookup precision for India.\n\n## Advanced Features\n\n### Webhook Management\n\n```python\n# Register webhook\nwebhook = client.register_webhook(\n    url=\"https://your-app.com/webhook\",\n    events=[\"bulk_processing.completed\", \"geocoding.completed\"]\n)\n\n# List webhooks\nwebhooks = client.list_webhooks()\n\n# Delete webhook\nclient.delete_webhook(webhook['id'])\n```\n\n### Batch Processing with Progress Callback\n\n```python\ndef progress_callback(processed, total, success, errors):\n    print(f\"Progress: {processed}/{total} - Success: {success}, Errors: {errors}\")\n\nprocessor = CSVProcessor(api_key=\"your-key\")\nresult = processor.process_geocoding_csv(\n    input_file=\"large_dataset.csv\",\n    output_file=\"results.csv\",\n    progress_callback=progress_callback\n)\n```\n\n### Offline Grid Operations\n\n```python\nprocessor = OfflineProcessor()\n\n# Get grid information\ngrid_info = processor.get_grid_info(\"39J-438-TJC7\")\nprint(f\"Grid center: {grid_info['center']}\")\nprint(f\"Grid bounds: {grid_info['bounds']}\")\n\n# Find nearby grids\nnearby = processor.find_nearby_grids(28.6139, 77.2090, radius_meters=100)\nfor grid in nearby:\n    print(f\"DigiPin: {grid['digipin']}, Distance: {grid['distance_meters']}m\")\n\n# Calculate distance between coordinates\ndistance = processor.calculate_distance(28.6139, 77.2090, 28.6150, 77.2100)\nprint(f\"Distance: {distance:.2f} km\")\n```\n\n## Configuration\n\n### Environment Variables\n\nSet your API key as an environment variable:\n\n```bash\nexport QUANTAROUTE_API_KEY=\"your-api-key\"\n```\n\n### API Configuration\n\n```python\nclient = QuantaRouteClient(\n    api_key=\"your-key\",\n    base_url=\"https://api.quantaroute.com\",  # Custom base URL\n    timeout=30,  # Request timeout in seconds\n    max_retries=3  # Maximum retry attempts\n)\n```\n\n### CSV Processor Configuration\n\n```python\nprocessor = CSVProcessor(\n    api_key=\"your-key\",\n    use_offline=False,  # Use offline processing when possible\n    batch_size=50,  # Records per API batch\n    delay_between_batches=1.0  # Delay in seconds between batches\n)\n```\n\n## Error Handling\n\n```python\nfrom quantaroute_geocoding import (\n    QuantaRouteError,\n    APIError,\n    RateLimitError,\n    AuthenticationError,\n    ValidationError\n)\n\ntry:\n    result = client.geocode(\"Invalid address\")\nexcept RateLimitError as e:\n    print(f\"Rate limit exceeded. Retry after {e.retry_after} seconds\")\nexcept AuthenticationError:\n    print(\"Invalid API key\")\nexcept ValidationError as e:\n    print(f\"Validation error: {e}\")\nexcept APIError as e:\n    print(f\"API error: {e} (Status: {e.status_code})\")\n```\n\n## Performance Tips\n\n1. **Use Batch Processing**: Process multiple addresses in batches for better performance\n2. **Offline Mode**: Use offline processing for coordinate \u2194 DigiPin conversions\n3. **Caching**: The API includes intelligent caching - repeated requests are faster\n4. **Rate Limits**: The SDK handles rate limits automatically with retry logic\n5. **CSV Processing**: Use the CSV processor for large datasets instead of individual API calls\n\n## API Limits\n\n### Traditional Geocoding API\n\n| Tier | Requests/Minute | Monthly Limit | Batch Size |\n|------|----------------|---------------|------------|\n| Free | 10 | 1,000 | 50 |\n| Paid | 100 | 10,000 | 100 |\n| Enterprise | 1,000 | Unlimited | 100 |\n\n### \ud83d\ude80 Revolutionary Location Lookup API\n\n| Tier | Requests/Minute | Monthly Limit | Batch Size | Boundaries |\n|------|----------------|---------------|------------|------------|\n| Free | 20 | 2,000 | 50 | 36,000+ |\n| Paid | 200 | 20,000 | 100 | 36,000+ |\n| Enterprise | 2,000 | Unlimited | 100 | 36,000+ |\n\n**Performance Guarantees:**\n- \u26a1 Cached responses: <100ms\n- \ud83d\udd0d Database queries: <500ms\n- \ud83d\udcca Batch processing: <50ms per location\n- \ud83c\udfaf 99.9% uptime SLA (Enterprise)\n\n## Support\n\n- \ud83d\udce7 Email: support@quantaroute.com\n- \ud83c\udf10 Website: https://quantaroute.com\n- \ud83d\udcd6 Traditional API Docs: https://api.quantaroute.com/v1/digipin/docs\n- \ud83d\ude80 **NEW: Location Lookup API**: https://api.quantaroute.com/v1/location\n- \ud83d\udcca **Live Statistics**: https://api.quantaroute.com/v1/location/stats\n\n### \ud83d\ude80 What Makes This Revolutionary?\n\n**QuantaRoute's Location Lookup API is the first and only service to provide:**\n\n\u2728 **Government-Level Precision**: Administrative boundary data that even government APIs don't provide at this level of detail and accessibility.\n\n\ud83d\udccd **Complete Coverage**: 36,000+ postal boundaries across India with sub-district precision.\n\n\u26a1 **Blazing Performance**: Sub-100ms cached responses, guaranteed <500ms database queries.\n\n\ud83c\udfaf **Unique Value Proposition**: The only service providing this level of administrative boundary lookup precision for India.\n\n\ud83d\udd04 **Developer-Friendly**: Simple APIs, comprehensive SDKs, and excellent documentation.\n\n**Ready to revolutionize your location intelligence applications?**\n\n## License\n\nMIT License - see LICENSE file for details.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Revolutionary Python SDK for QuantaRoute Geocoding API with Location Lookup and offline DigiPin processing",
    "version": "1.0.5",
    "project_urls": {
        "Bug Tracker": "https://github.com/quantaroute/quantaroute-geocoding-python/issues",
        "Documentation": "https://api.quantaroute.com/v1/digipin/docs",
        "Homepage": "https://quantaroute.com",
        "Repository": "https://github.com/quantaroute/quantaroute-geocoding-python"
    },
    "split_keywords": [
        "geocoding",
        " digipin",
        " gis",
        " location",
        " india",
        " address",
        " coordinates",
        " administrative-boundaries",
        " pincode",
        " postal-lookup",
        " location-intelligence"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f4676c7c7c501063b4bfaadba45c374a66c8950ce2a033dcc5a2464de97b05ed",
                "md5": "9fdb4c7df6401ae175bdee5f42afb185",
                "sha256": "d863473330cbca43d87ee5a7b98bde1e116d47acfcd27266e2f116f86a276ab8"
            },
            "downloads": -1,
            "filename": "quantaroute_geocoding-1.0.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9fdb4c7df6401ae175bdee5f42afb185",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 23297,
            "upload_time": "2025-10-30T20:28:11",
            "upload_time_iso_8601": "2025-10-30T20:28:11.226226Z",
            "url": "https://files.pythonhosted.org/packages/f4/67/6c7c7c501063b4bfaadba45c374a66c8950ce2a033dcc5a2464de97b05ed/quantaroute_geocoding-1.0.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9a4a7480b23fb5716a4b7a181b4e6d10adf575c915afd4758ad36e5778baf332",
                "md5": "b6ba2b7b301f2dd2154f7bcfd1b9f5c9",
                "sha256": "4c6d9dead88a4dd2e0b7de8b668aad754ddb9211398141023de489dffc13a279"
            },
            "downloads": -1,
            "filename": "quantaroute_geocoding-1.0.5.tar.gz",
            "has_sig": false,
            "md5_digest": "b6ba2b7b301f2dd2154f7bcfd1b9f5c9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 29136,
            "upload_time": "2025-10-30T20:28:12",
            "upload_time_iso_8601": "2025-10-30T20:28:12.712946Z",
            "url": "https://files.pythonhosted.org/packages/9a/4a/7480b23fb5716a4b7a181b4e6d10adf575c915afd4758ad36e5778baf332/quantaroute_geocoding-1.0.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-30 20:28:12",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "quantaroute",
    "github_project": "quantaroute-geocoding-python",
    "github_not_found": true,
    "lcname": "quantaroute-geocoding"
}
        
Elapsed time: 2.18259s