Skip to main content

amap-python-sdk

Test Coverage PyPI version Python versions

English | 简体中文

Overview

amap is a Python client for the Amap (Gaode) Web Service APIs. It provides a synchronous client for everyday use and a matching asynchronous client for applications built around asyncio.

The SDK currently wraps Place Search, Weather, District, Geocoding, Directions, Distance, Coordinate Conversion, Input Tips, IP Location, and Traffic Status APIs. Check the linked Amap documentation for service availability, required permissions, and current API limits.

Installation

pip install amap-python-sdk

The PyPI distribution is named amap-python-sdk; the Python import package remains amap. The package supports Python 3.10 and later, and installs its HTTP dependencies (requests and aiohttp) automatically.

API key

Create a Web Service API key in the Amap developer console. Keep it out of source control. For example, set an environment variable before running your application:

export AMAP_API_KEY="your-api-key"

Synchronous usage

The synchronous client is the recommended starting point. Methods return the parsed Amap JSON response as a dictionary.

import os

from amap import Amap

amap = Amap(os.environ["AMAP_API_KEY"])
try:
    # POI keyword search
    pois = amap.place.text(
        "coffee",
        region="上海",
        city_limit=True,
        page_size=10,
        page_num=1,
    )

    # Nearby search; coordinates are (longitude, latitude)
    nearby = amap.place.around(
        "coffee",
        location=("121.4737", "31.2304"),
        radius=1500,
    )

    # Search within a closed polygon (first and last points match)
    in_area = amap.place.polygon(
        ("116.4074", "39.9042"),
        ("116.4200", "39.9042"),
        ("116.4200", "39.9150"),
        ("116.4074", "39.9042"),
        keywords="museum",
    )

    # Retrieve a POI by its Amap ID
    poi = amap.place.detail("YOUR_POI_ID")

    # Other services
    weather = amap.weather.info("110000")
    districts = amap.district.list("北京市")
    geocode = amap.georegeo.geo("北京市朝阳区阜通东大街6号")
    reverse_geocode = amap.georegeo.regeo(("116.481488", "39.990464"))
    route = amap.direction.driving(
        ("116.481028", "39.989643"),
        ("116.434446", "39.90816"),
    )
finally:
    amap.close()

Coordinates are provided as (longitude, latitude). The methods accept endpoint-specific keyword arguments; refer to their docstrings and the corresponding Amap API documentation for the full parameter list.

Asynchronous usage

amap.aio.Amap provides the corresponding asyncio client, implemented with aiohttp. Its service methods mirror the synchronous client.

import asyncio
import os

from amap.aio import Amap


async def main():
    async with Amap(os.environ["AMAP_API_KEY"]) as amap:
        result = await amap.place.text("coffee", region="上海")
        print(result)


asyncio.run(main())

Errors

If Amap returns a JSON response with "status": "0", the client raises amap.exceptions.AmapAPIError. The exception exposes the original response, info, and infocode:

from amap.exceptions import AmapAPIError

try:
    result = amap.place.text("coffee")
except AmapAPIError as exc:
    print(exc.infocode, exc.info)
    print(exc.response)

The SDK preserves Amap's infocode instead of guessing its meaning from a numeric prefix. Check the official Amap error-code reference and the documentation for the specific API. When the underlying HTTP library reports a request timeout, the client raises amap.exceptions.AmpTimeoutError; other network and HTTP transport errors are raised by requests or aiohttp.

Logging

amap uses Python's standard logging module and does not configure handlers or log levels for your application. Successful requests are logged at DEBUG; API, HTTP, and timeout failures are logged at WARNING. Log messages include the endpoint and diagnostic status, but omit API keys, request parameters, and response bodies.

Configure logging in your application when needed:

import logging

logging.basicConfig(level=logging.DEBUG)

Requirements

  • Python >=3.10,<4.0
  • requests for the synchronous client
  • aiohttp for the asynchronous client

Exact dependency constraints are maintained in pyproject.toml.

Contributing

Contributions are welcome:

  1. Fork the repository and create a branch for your change.
  2. Install the project and development groups with uv sync --all-groups.
  3. Run the relevant tests with uv run pytest.
  4. Open a pull request with a concise description of the change.

Please add or update tests for behavior changes and follow the existing formatting and typing conventions.

Releases

Publishing a GitHub Release builds and tests the package, then publishes it to PyPI using Trusted Publishing. Configure a PyPI Trusted Publisher for project amap-python-sdk, repository owner sunkunxi, repository amap-python-sdk, workflow filename publish.yml, and GitHub environment pypi.

License

MIT

Metadata

Release files for amap-python-sdk 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for amap-python-sdk 0.1.3
File Size Uploaded Provenance
amap_python_sdk-0.1.3.tar.gz 183.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for amap-python-sdk 0.1.3
File Interpreter ABI Platform
amap_python_sdk-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 205.9 kB

Release files / amap_python_sdk-0.1.3.tar.gz

Download URL amap_python_sdk-0.1.3.tar.gz
Size 183.0 kB
Tags Source
SHA-256 checksum
How to use checksums
63c04dccb140d325764a3c0f6f4097f13c6456f61ed188d6bc1c4cf08ab0432f
BLAKE2b-256 checksum
How to use checksums
cd5f8cab07a2d6f536c6d7c9d391ec34016301e538e7eb616b2a1a4a3ea449e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / amap_python_sdk-0.1.3-py3-none-any.whl

Download URL amap_python_sdk-0.1.3-py3-none-any.whl
Size 22.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ebf8bf2e6ce02f5c73f7b09a04f10ada01f99f1ad89eb9a8780128b7ddaa6c94
BLAKE2b-256 checksum
How to use checksums
31b757d27feb8321bd7f5fe1a3b8b2d74a50255df2f86a7e7148b3341d6b88fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for amap-python-sdk 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page