Skip to main content

Turn addresses into coordinates and find nearby amenities using Google Maps API

Project description

Mapradar

Crates.io PyPI License: MIT

Turn addresses into coordinates and find nearby banks, hospitals, and other amenities.


What It Does

Mapradar is a location intelligence library. Give it an address like "Shibuya, Tokyo" and it returns:

  1. Coordinates - Latitude and longitude
  2. Nearby Services - Banks, hospitals, schools, fuel stations within a radius
  3. Distance - How far each service is from your location

Built in Rust. Works in both Python and Rust.


Installation

Python
uv add mapradar
Rust
[dependencies]
mapradar = { version = "0.1", default-features = false }
tokio = { version = "1", features = ["full"] }

Note: Use default-features = false for pure Rust (no Python bindings).

From Source

Python:

git clone https://github.com/iamprecieee/mapradar
cd mapradar
uv add maturin
maturin develop

Rust:

[dependencies]
mapradar = { git = "https://github.com/iamprecieee/mapradar" }

Usage

Python

import asyncio
from mapradar import MapradarClient, SearchQuery, ServiceType

async def main():
    client = MapradarClient("YOUR_GOOGLE_MAPS_API_KEY")
    
    # Find banks and hospitals near an address
    query = SearchQuery.from_address("Shibuya, Tokyo")
    intel = await client.fetch_intelligence(
        query,
        service_types=[ServiceType.Bank, ServiceType.Hospital],
        radius_km=3.0
    )
    
    print(f"Location: {intel.location.address}")
    print(f"Country: {intel.location.country}")
    for service in intel.nearby_services:
        print(f"  {service.name} - {service.distance_km:.2f} km")

asyncio.run(main())
More Examples

Geocoding only:

location = await client.geocode("1 Marina, Lagos")
print(location.latitude, location.longitude, location.country)

Reverse geocoding:

location = await client.reverse_geocode(6.4541, 3.3947)
print(location.address, location.country)

JSON-RPC format (for microservices):

response = await client.geocode_rpc("Lekki, Lagos", id="req-123")
print(response.to_json())

Rust

use mapradar::client::MapradarClient;
use mapradar::models::{SearchQuery, ServiceType};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = MapradarClient::new("YOUR_API_KEY".to_string());
    
    let location = client.geocode_async("Times Square, NYC").await?;
    println!("{}, {} ({})", location.latitude, location.longitude, location.country);
    
    Ok(())
}

Features

Feature Description
Geocoding Convert addresses to coordinates
Reverse Geocoding Convert coordinates to addresses
Nearby Search Find banks, hospitals, schools, etc.
Parallel Fetching Search multiple service types at once
Caching Automatic in-memory cache reduces API calls
JSON-RPC 2.0 Built-in format for microservice APIs

Service Types

Type Google Maps Category
Bank bank
Hospital hospital
School school
Market supermarket
Mall shopping_mall
Restaurant restaurant
FuelStation gas_station
BusStop bus_station
TrainStation train_station
TaxiStand taxi_stand
Landmark tourist_attraction

API Reference

MapradarClient

Python
client = MapradarClient("YOUR_API_KEY")

Core Methods

Method Parameters Returns
geocode(address) address: str GeoLocation
reverse_geocode(lat, lng) latitude: float, longitude: float GeoLocation
search_nearby(...) lat, lng, service_type, radius_meters, max_results list[NearbyService]
fetch_intelligence(...) query, service_types, radius_km=5.0, max_results_per_type=5 LocationIntelligence

JSON-RPC Methods

Method Extra Parameter
geocode_rpc(address, id?) id: str = "1"
reverse_geocode_rpc(lat, lng, id?) id: str = "1"
search_nearby_rpc(..., id?) id: str = "1"
fetch_intelligence_rpc(..., id?) id: str = "1"
Rust
let client = MapradarClient::new("YOUR_API_KEY".to_string());

Core Methods (async)

Method Parameters Returns
geocode_async(address) address: &str Result<GeoLocation, GeoError>
reverse_geocode_async(lat, lng) lat: f64, lng: f64 Result<GeoLocation, GeoError>
search_nearby_async(...) lat, lng, service_type, radius_meters, max_results Result<Vec<NearbyService>, GeoError>
fetch_intelligence_async(...) query, service_types, radius_km, max_results_per_type Result<LocationIntelligence, GeoError>

RPC Helper

Method Returns
rpc_response(id, result) JsonRpcResponse

SearchQuery

Python
Constructor Description
SearchQuery.from_address(address) Create query from address string
SearchQuery.from_coordinates(lat, lng) Create query from coordinates
Rust
Constructor Description
SearchQuery::from_address(address: String) Create query from address string
SearchQuery::from_coordinates(lat: f64, lng: f64) Create query from coordinates

Response Types

Python

GeoLocation

Field Type
address str
latitude float
longitude float
city str | None
state str | None
country str

NearbyService

Field Type
name str
service_type ServiceType
latitude float
longitude float
distance_km float
address str | None
rating float | None
place_id str | None

LocationIntelligence

Field Type
location GeoLocation
nearby_services list[NearbyService]
total_services_found int

JsonRpcResponse

Field Type
jsonrpc str
result str | None
error JsonRpcError | None
id str
Rust

GeoLocation

Field Type
address String
latitude f64
longitude f64
city Option<String>
state Option<String>
country String

NearbyService

Field Type
name String
service_type ServiceType
latitude f64
longitude f64
distance_km f64
address Option<String>
rating Option<f32>
place_id Option<String>

LocationIntelligence

Field Type
location GeoLocation
nearby_services Vec<NearbyService>
total_services_found usize

JsonRpcResponse

Field Type
jsonrpc String
result Option<String>
error Option<JsonRpcError>
id String

Configuration

Variable Description
GOOGLE_MAPS_API_KEY Your Google Maps API key. Enable Geocoding API and Places API.

FAQ

What APIs do I need enabled?

Enable these in Google Cloud Console:

  • Geocoding API
  • Places API (New)
Is there rate limiting?

Mapradar does not rate limit. Your Google Maps API quota applies. Use the built-in cache to reduce calls.

Does caching persist across restarts?

No. Cache is in-memory only. It persists for the lifetime of your MapradarClient instance.


License

MIT


Contributing | Security

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mapradar-0.1.2.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mapradar-0.1.2-cp312-cp312-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

Details for the file mapradar-0.1.2.tar.gz.

File metadata

  • Download URL: mapradar-0.1.2.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.11.5

File hashes

Hashes for mapradar-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a88e0e3923ef1f1d1533969e877275d0bc3d0f5fe00b7f04c7be028abc591628
MD5 9656d88439bb3bd0ee09e98f339273e3
BLAKE2b-256 703820b7eead04405510746c3cb2424dfbf64a6b57ef2a574e1f69b7411d8b39

See more details on using hashes here.

File details

Details for the file mapradar-0.1.2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mapradar-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f927f0cd60f29aec24f9f0f445a960467cdc352ec19eaf99ed34a8683b81a341
MD5 e4c9500f0bcc835609c589d4a15681d4
BLAKE2b-256 f5bb809807d2883720236c0c20035e2386360a54e37fde67a87c2abb7da62d4c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page