Yêu cầu và phản hồi mã hóa địa lý

Yêu cầu

Yêu cầu API mã hoá địa lý có dạng như sau:

https://maps.googleapis.com/maps/api/geocode/outputFormat?parameters

trong đó outputFormat có thể là một trong các giá trị sau:

  • json (nên dùng) cho biết kết quả ở dạng Ký hiệu đối tượng JavaScript (JSON); hoặc
  • xml cho biết kết quả đầu ra ở định dạng XML

HTTPS là bắt buộc đối với các yêu cầu sử dụng khoá API.

Một số thông số là bắt buộc, còn một số khác là không bắt buộc. Như tiêu chuẩn trong URL, các tham số được phân tách bằng ký tự ký hiệu và (&).

Phần còn lại của trang này mô tả riêng biệt mã hóa địa lý và mã hóa địa lý ngược, vì có các tham số khác nhau cho từng loại yêu cầu.

Thông số mã hóa địa lý (tra cứu vĩ độ/kinh độ)

Tham số bắt buộc trong yêu cầu mã hóa địa lý:

  • address – Địa chỉ đường phố hoặc mã cộng mà bạn muốn mã hoá địa lý. Chỉ định các địa chỉ theo định dạng mà dịch vụ bưu chính quốc gia của quốc gia có liên quan sử dụng. Bạn nên tránh các thành phần địa chỉ bổ sung như tên doanh nghiệp và số phòng, số phòng hoặc số tầng. Các phần tử địa chỉ đường phố phải được phân tách bằng dấu cách (hiển thị ở đây dưới dạng url chuyển sang %20):
    address=24%20Sussex%20Drive%20Ottawa%20ON
    Định dạng mã cộng như minh họa ở đây (dấu cộng là url được thoát ra %2B và dấu cách là url được thoát đến %20):
    • mã chung là mã vùng gồm 4 ký tự và mã địa phương dài 6 ký tự trở lên (849VCWC8+R9 là 849VCWC8%2BR9).
    • mã phức hợp là một mã địa phương gồm 6 ký tự trở lên có vị trí rõ ràng (CWC8+R9 Mountain View, CA, Hoa Kỳ là CWC8%2BR9%20Mountain%20View%20CA%20USA).

    --HOẶC--
    components — Bộ lọc thành phần có các phần tử được phân tách bằng dấu gạch đứng (|). Bộ lọc thành phần cũng được chấp nhận làm tham số không bắt buộc nếu bạn cung cấp address. Mỗi phần tử trong bộ lọc thành phần bao gồm một cặp component:value và hạn chế hoàn toàn kết quả từ bộ mã hoá địa lý. Hãy xem thêm thông tin về tính năng lọc thành phần ở bên dưới.
  • key – Khoá API của ứng dụng. Khoá này giúp xác định ứng dụng của bạn để quản lý hạn mức. Hãy tìm hiểu cách lấy khoá.

Vui lòng tham khảo phần Câu hỏi thường gặp để được hướng dẫn thêm.

Thông số không bắt buộc trong yêu cầu Mã hoá địa lý:

  • bounds – Hộp giới hạn của khung nhìn, trong đó phân biệt mã địa lý sẽ cho kết quả nổi bật hơn. Tham số này sẽ chỉ ảnh hưởng (nhưng không hạn chế hoàn toàn) kết quả của bộ mã hoá địa lý. (Để biết thêm thông tin, hãy xem phần Xu hướng chế độ xem bên dưới.)
  • language – Ngôn ngữ trả về kết quả.
    • Xem danh sách ngôn ngữ được hỗ trợ. Google thường cập nhật các ngôn ngữ được hỗ trợ, vì vậy, danh sách này có thể chưa đầy đủ.
    • Nếu language không được cung cấp, bộ mã hoá địa lý sẽ cố gắng sử dụng ngôn ngữ ưu tiên như được chỉ định trong tiêu đề Accept-Language hoặc ngôn ngữ bản địa của miền mà yêu cầu được gửi đi.
    • Bộ mã hoá địa lý sẽ cố gắng hết sức để cung cấp địa chỉ đường phố mà cả người dùng và người dân địa phương có thể đọc được. Để đạt được mục tiêu đó, hệ thống sẽ trả về địa chỉ đường phố bằng ngôn ngữ địa phương, được chuyển tự thành một tập lệnh mà người dùng có thể đọc được nếu cần, quan sát ngôn ngữ ưu tiên. Tất cả các địa chỉ khác được trả về bằng ngôn ngữ ưu tiên. Tất cả các thành phần địa chỉ đều được trả về bằng cùng một ngôn ngữ, ngôn ngữ được chọn trong thành phần đầu tiên.
    • Nếu không có tên bằng ngôn ngữ ưu tiên, thì bộ mã hoá địa lý sẽ sử dụng kết quả khớp gần nhất.
    • Ngôn ngữ ưu tiên có ảnh hưởng nhỏ đến tập hợp kết quả mà API chọn để trả về, cũng như thứ tự trả về các kết quả đó. Bộ mã hoá địa lý diễn giải các chữ viết tắt khác nhau tuỳ thuộc vào ngôn ngữ, chẳng hạn như cách viết tắt cho loại đường phố hoặc từ đồng nghĩa có thể hợp lệ ở một ngôn ngữ nhưng không hợp lệ ở ngôn ngữ khác. Ví dụ: utcatér lần lượt là từ đồng nghĩa cho đường phố và hình vuông trong tiếng Hungary.
  • region – Mã vùng, được chỉ định dưới dạng giá trị gồm hai ký tự của ccTLD (miền cấp cao nhất). Tham số này sẽ chỉ ảnh hưởng (không hạn chế hoàn toàn) kết quả của bộ mã hoá địa lý. (Để biết thêm thông tin, hãy xem phần Xu hướng theo khu vực bên dưới.) Tham số này cũng có thể ảnh hưởng đến kết quả dựa trên luật hiện hành.
  • components – Một bộ lọc thành phần có các phần tử được phân tách bằng dấu gạch đứng (|). Bạn bắt buộc phải bộ lọc thành phần nếu yêu cầu không bao gồm address. Mỗi phần tử trong bộ lọc thành phần bao gồm một cặp component:value và hạn chế hoàn toàn kết quả từ bộ mã hoá địa lý. Hãy xem thêm thông tin về tính năng lọc thành phần ở bên dưới.

Phản hồi

Phản hồi mã hóa địa lý được trả về ở định dạng được chỉ định bởi cờ output trong yêu cầu URL hoặc ở định dạng JSON theo mặc định.

Trong ví dụ này, API mã hoá địa lý yêu cầu một phản hồi json cho một truy vấn về mã địa điểm "ChIJeRpOeF67j4AR9ydy_PIzPuM". Mã địa điểm này là của toà nhà tại 1600 Amphitheatre Parkway, Mountain View, CA.

Yêu cầu này minh hoạ việc sử dụng cờ output JSON:

https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJeRpOeF67j4AR9ydy_PIzPuM&key=YOUR_API_KEY

Yêu cầu này minh hoạ việc sử dụng cờ output XML:

https://maps.googleapis.com/maps/api/geocode/xml?place_id=ChIJeRpOeF67j4AR9ydy_PIzPuM&key=YOUR_API_KEY

Chọn các thẻ bên dưới để xem phản hồi JSON và XML mẫu.

JSON

{
    "results": [
        {
            "address_components": [
                {
                    "long_name": "1600",
                    "short_name": "1600",
                    "types": [
                        "street_number"
                    ]
                },
                {
                    "long_name": "Amphitheatre Parkway",
                    "short_name": "Amphitheatre Pkwy",
                    "types": [
                        "route"
                    ]
                },
                {
                    "long_name": "Mountain View",
                    "short_name": "Mountain View",
                    "types": [
                        "locality",
                        "political"
                    ]
                },
                {
                    "long_name": "Santa Clara County",
                    "short_name": "Santa Clara County",
                    "types": [
                        "administrative_area_level_2",
                        "political"
                    ]
                },
                {
                    "long_name": "California",
                    "short_name": "CA",
                    "types": [
                        "administrative_area_level_1",
                        "political"
                    ]
                },
                {
                    "long_name": "United States",
                    "short_name": "US",
                    "types": [
                        "country",
                        "political"
                    ]
                },
                {
                    "long_name": "94043",
                    "short_name": "94043",
                    "types": [
                        "postal_code"
                    ]
                }
            ],
            "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
            "geometry": {
                "location": {
                    "lat": 37.4224428,
                    "lng": -122.0842467
                },
                "location_type": "ROOFTOP",
                "viewport": {
                    "northeast": {
                        "lat": 37.4239627802915,
                        "lng": -122.0829089197085
                    },
                    "southwest": {
                        "lat": 37.4212648197085,
                        "lng": -122.0856068802915
                    }
                }
            },
            "place_id": "ChIJeRpOeF67j4AR9ydy_PIzPuM",
            "plus_code": {
                "compound_code": "CWC8+X8 Mountain View, CA",
                "global_code": "849VCWC8+X8"
            },
            "types": [
                "street_address"
            ]
        }
    ],
    "status": "OK"
}

Lưu ý rằng phản hồi JSON chứa hai phần tử gốc:

  • "status" chứa siêu dữ liệu theo yêu cầu. Xem Mã trạng thái dưới đây.
  • "results" chứa một mảng thông tin địa chỉ và thông tin hình học được mã hoá địa lý.

Nhìn chung, chỉ một mục trong mảng "results" được trả về để tra cứu địa chỉ,mặc dù bộ mã hoá địa lý có thể trả về một số kết quả khi các truy vấn địa chỉ không rõ ràng.

XML

<GeocodeResponse>
    <status>OK</status>
    <result>
        <type>street_address</type>
        <formatted_address>1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA</formatted_address>
        <address_component>
            <long_name>1600</long_name>
            <short_name>1600</short_name>
            <type>street_number</type>
        </address_component>
        <address_component>
            <long_name>Amphitheatre Parkway</long_name>
            <short_name>Amphitheatre Pkwy</short_name>
            <type>route</type>
        </address_component>
        <address_component>
            <long_name>Mountain View</long_name>
            <short_name>Mountain View</short_name>
            <type>locality</type>
            <type>political</type>
        </address_component>
        <address_component>
            <long_name>Santa Clara County</long_name>
            <short_name>Santa Clara County</short_name>
            <type>administrative_area_level_2</type>
            <type>political</type>
        </address_component>
        <address_component>
            <long_name>California</long_name>
            <short_name>CA</short_name>
            <type>administrative_area_level_1</type>
            <type>political</type>
        </address_component>
        <address_component>
            <long_name>United States</long_name>
            <short_name>US</short_name>
            <type>country</type>
            <type>political</type>
        </address_component>
        <address_component>
            <long_name>94043</long_name>
            <short_name>94043</short_name>
            <type>postal_code</type>
        </address_component>
        <geometry>
            <location>
                <lat>37.4224428</lat>
                <lng>-122.0842467</lng>
            </location>
            <location_type>ROOFTOP</location_type>
            <viewport>
                <southwest>
                    <lat>37.4212648</lat>
                    <lng>-122.0856069</lng>
                </southwest>
                <northeast>
                    <lat>37.4239628</lat>
                    <lng>-122.0829089</lng>
                </northeast>
            </viewport>
        </geometry>
        <place_id>ChIJeRpOeF67j4AR9ydy_PIzPuM</place_id>
        <plus_code>
            <global_code>849VCWC8+X8</global_code>
            <compound_code>CWC8+X8 Mountain View, CA</compound_code>
        </plus_code>
    </result>
</GeocodeResponse>

Hãy lưu ý rằng phản hồi XML bao gồm một <GeocodeResponse> duy nhất và hai phần tử cấp cao nhất:

  • <status> chứa siêu dữ liệu theo yêu cầu. Xem Mã trạng thái bên dưới.
  • Không có hoặc nhiều phần tử <result>, mỗi phần tử chứa một bộ thông tin địa chỉ và thông tin hình học được mã hoá địa lý.

Phản hồi XML dài hơn đáng kể so với phản hồi JSON. Vì lý do đó, bạn nên sử dụng json làm cờ đầu ra ưu tiên, trừ phi dịch vụ của bạn yêu cầu xml vì một lý do nào đó. Ngoài ra, việc xử lý cây XML cần được chú ý để có thể tham chiếu các nút và phần tử thích hợp. Xem phần Phân tích cú pháp XML bằng XPath để biết một số mẫu thiết kế đề xuất để xử lý đầu ra.

  • Kết quả XML được gói trong một phần tử <GeocodeResponse> gốc.
  • JSON biểu thị các mục nhập có nhiều phần tử bằng các mảng số nhiều (types), trong khi XML biểu thị các mục nhập này bằng cách sử dụng nhiều phần tử số ít (<type>).
  • Các phần tử trống được biểu thị thông qua các mảng trống trong JSON, nhưng do không có phần tử nào như vậy trong XML. Ví dụ: phản hồi không tạo ra kết quả nào sẽ trả về một mảng results trống trong JSON, nhưng không có phần tử <result> nào trong XML.

Mã trạng thái

Trường "status" trong đối tượng phản hồi Mã hoá địa lý có chứa trạng thái của yêu cầu và có thể chứa thông tin gỡ lỗi để giúp bạn theo dõi lý do mã hoá địa lý không hoạt động. Trường "status" có thể chứa các giá trị sau:

  • "OK" cho biết không có lỗi nào xảy ra; địa chỉ đã được phân tích cú pháp thành công và ít nhất một mã địa lý được trả về.
  • "ZERO_RESULTS" cho biết mã hoá địa lý đã thành công nhưng không trả về kết quả nào. Điều này có thể xảy ra nếu bộ mã hoá địa lý được chuyển qua address không tồn tại.
  • OVER_DAILY_LIMIT cho biết bất kỳ trường hợp nào sau đây:
    • Khoá API bị thiếu hoặc không hợp lệ.
    • Tính năng thanh toán chưa được bật trên tài khoản của bạn.
    • Đã vượt quá giới hạn sử dụng tự chỉ định.
    • Phương thức thanh toán được cung cấp không còn hợp lệ (ví dụ: thẻ tín dụng đã hết hạn).

    Xem phần Câu hỏi thường gặp về Maps để tìm hiểu cách khắc phục vấn đề này.

  • "OVER_QUERY_LIMIT" cho biết bạn đã vượt quá hạn mức.
  • "REQUEST_DENIED" cho biết yêu cầu của bạn đã bị từ chối.
  • "INVALID_REQUEST" thường cho biết rằng truy vấn (address, components hoặc latlng) bị thiếu.
  • "UNKNOWN_ERROR" cho biết rằng không thể xử lý yêu cầu do lỗi máy chủ. Yêu cầu có thể thành công nếu bạn thử lại.

Thông báo lỗi

Khi bộ mã hoá địa lý trả về một mã trạng thái khác với OK, có thể có thêm một trường error_message trong đối tượng phản hồi Mã hoá địa lý. Trường này chứa thông tin chi tiết hơn về lý do đằng sau mã trạng thái đã cho.

Kết quả

Khi bộ mã hoá địa lý trả về kết quả, nó sẽ đặt các kết quả đó trong một mảng results (JSON). Ngay cả khi không trả về kết quả nào (chẳng hạn như khi địa chỉ không tồn tại), bộ mã hoá địa lý vẫn trả về một mảng results trống. (Phản hồi XML không chứa hoặc có nhiều phần tử <result>.)

Một kết quả thông thường chứa các trường sau:

  • Mảng types[] cho biết loại của kết quả được trả về. Mảng này chứa một tập hợp từ 0 đến nhiều thẻ xác định loại tính năng được trả về trong kết quả. Ví dụ: một mã địa lý " nào" sẽ trả về "Thành phố" (locale) cho biết "Thành phố Chicago" là một thành phố và trả về "chính trị" cho biết đó là một pháp nhân chính trị. Các thành phần có thể có một mảng loại trống khi chưa có loại nào được xác định cho thành phần địa chỉ đó. API có thể thêm các giá trị loại mới nếu cần. Để biết thêm thông tin, hãy xem bài viết Loại địa chỉ và thành phần địa chỉ.
  • formatted_address là một chuỗi chứa địa chỉ mà con người có thể đọc được của vị trí này.

    Thông thường, địa chỉ này tương đương với địa chỉ bưu điện. Xin lưu ý rằng một số quốc gia (chẳng hạn như Vương quốc Anh) không cho phép phân phối địa chỉ bưu chính thực do các quy định hạn chế về việc cấp phép.

    Địa chỉ được định dạng bao gồm một hoặc nhiều thành phần địa chỉ theo logic. Ví dụ: địa chỉ "111 8th Avenue, New York, NY" bao gồm các thành phần sau: "111" (số nhà), "8th Avenue" (tuyến đường), "New York" (thành phố) và "NY" (tiểu bang của Hoa Kỳ).

    Không được phân tích cú pháp địa chỉ được định dạng theo lập trình. Thay vào đó, bạn nên sử dụng các thành phần địa chỉ riêng lẻ mà phản hồi của API sẽ đưa vào cùng với trường địa chỉ được định dạng.

  • address_components[] là một mảng chứa các thành phần riêng áp dụng cho địa chỉ này.

    Mỗi thành phần của địa chỉ thường chứa các trường sau:

    • types[] là một mảng cho biết loại của thành phần địa chỉ. Hãy xem danh sách các loại được hỗ trợ.
    • long_name là nội dung mô tả văn bản đầy đủ hoặc tên của thành phần địa chỉ do Bộ mã hoá địa lý trả về.
    • short_name là tên văn bản viết tắt cho thành phần địa chỉ (nếu có). Ví dụ: thành phần địa chỉ của tiểu bang Alaska có thể có long_name là "Alaska" và short_name là "AK" sử dụng từ viết tắt của bưu điện gồm 2 chữ cái.

    Hãy lưu ý các thông tin sau về mảng address_components[]:

    • Mảng thành phần địa chỉ có thể chứa nhiều thành phần hơn formatted_address.
    • Mảng này không nhất thiết bao gồm tất cả các pháp nhân chính trị có chứa địa chỉ, ngoại trừ những pháp nhân có trong formatted_address. Để truy xuất tất cả các pháp nhân chính trị có chứa một địa chỉ cụ thể, bạn nên sử dụng tính năng mã hoá địa lý ngược, chuyển vĩ độ/kinh độ của địa chỉ vào yêu cầu.
    • Định dạng của phản hồi không được đảm bảo sẽ giống nhau giữa các yêu cầu. Cụ thể, số lượng address_components sẽ thay đổi tuỳ theo địa chỉ được yêu cầu và có thể thay đổi theo thời gian đối với cùng một địa chỉ. Một thành phần có thể thay đổi vị trí trong mảng. Loại thành phần có thể thay đổi. Một thành phần cụ thể có thể bị thiếu trong phản hồi sau đó.

    Để xử lý mảng thành phần, bạn nên phân tích cú pháp phản hồi và chọn các giá trị thích hợp thông qua biểu thức. Xem hướng dẫn phân tích cú pháp một phản hồi.

  • postcode_localities[] là một mảng cho biết tất cả các khu vực có trong mã bưu chính. Thông tin này chỉ xuất hiện khi kết quả là một mã bưu chính có chứa nhiều khu vực.
  • geometry chứa các thông tin sau:
    • location chứa giá trị kinh độ, vĩ độ được mã hoá địa lý. Đối với các hoạt động tra cứu địa chỉ thông thường, trường này thường là trường quan trọng nhất.
    • location_type lưu trữ dữ liệu bổ sung về vị trí đã chỉ định. Các giá trị sau đây hiện được hỗ trợ:

      • "ROOFTOP" cho biết rằng kết quả được trả về là một mã địa lý chính xác mà chúng tôi có thông tin vị trí chính xác đến từng địa chỉ đường phố.
      • "RANGE_INTERPOLATED" cho biết kết quả được trả về phản ánh giá trị gần đúng (thường là trên một con đường) được nội suy giữa hai điểm chính xác (chẳng hạn như giao lộ). Kết quả nội suy thường được trả về khi không có mã địa lý tầng thượng cho địa chỉ đường phố.
      • "GEOMETRIC_CENTER" cho biết kết quả được trả về là tâm hình học của một kết quả, chẳng hạn như một hình nhiều đường (ví dụ: một đường phố) hoặc đa giác (khu vực).
      • "APPROXIMATE" cho biết rằng kết quả được trả về chỉ là kết quả gần đúng.
    • viewport chứa khung nhìn đề xuất để hiển thị kết quả được trả về, được xác định dưới dạng hai giá trị vĩ độ,kinh độ xác định góc southwestnortheast của hộp giới hạn khung nhìn. Nhìn chung, khung nhìn được dùng để tạo khung cho một kết quả khi hiển thị kết quả đó cho người dùng.
    • bounds (không bắt buộc được trả về) lưu trữ hộp giới hạn có thể chứa đầy đủ kết quả được trả về. Xin lưu ý rằng những giới hạn này có thể không khớp với khung nhìn đề xuất. (Ví dụ: San Francisco bao gồm các hòn đảoFarallon, về mặt kỹ thuật là một phần của thành phố, nhưng có lẽ không nên được trả về trong khung nhìn.)
  • plus_code (xem Mã vị trí mởmã cộng) là một tham chiếu vị trí được mã hoá, lấy từ toạ độ vĩ độ và kinh độ đại diện cho một khu vực: 1/8000 độ x 1/8000 độ (khoảng 14m x 14m tại đường xích đạo) hoặc nhỏ hơn. Bạn có thể dùng mã cộng để thay thế địa chỉ đường phố ở những nơi không có địa chỉ (nơi toà nhà không được đánh số hoặc đường phố không được đặt tên). API không phải lúc nào cũng trả về mã cộng.

    Khi dịch vụ trả về một mã cộng, mã này sẽ được định dạng dưới dạng mã toàn cục và mã phức hợp:

    • global_code là mã vùng gồm 4 ký tự và mã cục bộ dài 6 ký tự trở lên (849VCWC8+R9).
    • compound_code là mã địa phương gồm 6 ký tự trở lên có vị trí rõ ràng (CWC8+R9, Mountain View, CA, USA). Không được phân tích cú pháp nội dung này theo lập trình.
    Nếu có, API sẽ trả về cả mã chung và mã phức hợp. Tuy nhiên, nếu kết quả ở một địa điểm xa xôi (ví dụ: đại dương hoặc sa mạc), thì hệ thống chỉ có thể trả về mã chung.
  • partial_match cho biết bộ mã hoá địa lý không trả về kết quả khớp chính xác cho yêu cầu ban đầu, mặc dù có thể khớp với một phần địa chỉ được yêu cầu. Bạn nên kiểm tra lỗi chính tả trong yêu cầu ban đầu và/hoặc địa chỉ không đầy đủ.

    Kết quả khớp một phần thường xảy ra cho các địa chỉ đường phố không tồn tại trong vị trí mà bạn chuyển đến trong yêu cầu. Kết quả trùng khớp một phần cũng có thể được trả về khi một yêu cầu khớp với hai hoặc nhiều vị trí ở cùng một địa phương. Ví dụ: "Hillpar St, Bristol, UK" sẽ trả về kết quả khớp một phần cho cả Phố Henry và Phố Henrietta. Xin lưu ý rằng nếu một yêu cầu bao gồm thành phần địa chỉ bị sai chính tả, thì dịch vụ mã hoá địa lý có thể đề xuất một địa chỉ thay thế. Các đề xuất được kích hoạt theo cách này cũng sẽ được đánh dấu là khớp một phần.

  • place_id là giá trị nhận dạng duy nhất có thể dùng với các API khác của Google. Ví dụ: bạn có thể sử dụng place_id trong yêu cầu API Địa điểm để nhận thông tin chi tiết về một doanh nghiệp địa phương, chẳng hạn như số điện thoại, giờ mở cửa, bài đánh giá của người dùng và nhiều thông tin khác. Xem tổng quan về mã địa điểm.

Các loại địa chỉ và các loại thành phần địa chỉ

Mảng types[] trong kết quả cho biết loại địa chỉ. Ví dụ về các loại địa chỉ bao gồm địa chỉ đường phố, quốc gia hoặc pháp nhân chính trị. Ngoài ra, còn có một mảng types[] trong address_components[], cho biết loại của mỗi phần trong địa chỉ. Ví dụ: số đường phố hoặc quốc gia. (Dưới đây là danh sách đầy đủ các loại.) Địa chỉ có thể có nhiều loại. Các loại này có thể được coi là 'thẻ'. Ví dụ: nhiều thành phố được gắn thẻ bằng loại politicallocality.

Bộ mã hoá địa lý hỗ trợ và trả về các loại sau đây trong cả mảng loại địa chỉ và mảng loại thành phần địa chỉ:

  • street_address cho biết một địa chỉ đường phố chính xác.
  • route cho biết một tuyến đường có tên (chẳng hạn như "US 101").
  • intersection cho biết giao lộ chính, thường là hai con đường chính.
  • political cho biết một pháp nhân chính trị. Thông thường, loại này biểu thị một đa giác của một số cơ quan hành chính dân sự.
  • country chỉ ra pháp nhân chính trị quốc gia và thường là loại đơn đặt hàng cao nhất được Bộ mã hoá địa lý trả về.
  • administrative_area_level_1 cho biết một pháp nhân dân sự cấp 1 ở cấp thấp hơn cấp quốc gia. Tại Hoa Kỳ, các cấp hành chính này là các tiểu bang. Không phải quốc gia nào cũng có những cấp độ hành chính này. Trong hầu hết các trường hợp, tên ngắn Administrator_area_level_1 sẽ gần giống với các phân mục ISO 3166-2 và các danh sách được lưu hành rộng rãi khác. Tuy nhiên, điều này không được đảm bảo vì kết quả mã hóa địa lý của chúng tôi dựa trên nhiều loại tín hiệu và dữ liệu vị trí.
  • administrative_area_level_2 cho biết một pháp nhân dân sự bậc hai ở cấp thấp hơn cấp quốc gia. Tại Hoa Kỳ, các cấp hành chính này là hạt. Không phải quốc gia nào cũng có những cấp độ hành chính này.
  • administrative_area_level_3 cho biết một pháp nhân dân sự cấp ba ở cấp độ quốc gia. Loại này chỉ phân chia dân sự nhỏ. Không phải tất cả các quốc gia đều có các cấp độ hành chính này.
  • administrative_area_level_4 cho biết một pháp nhân dân sự cấp 4 thấp hơn cấp quốc gia. Loại này chỉ phân chia dân sự nhỏ. Không phải tất cả các quốc gia đều có các cấp độ hành chính này.
  • administrative_area_level_5 cho biết một pháp nhân dân sự cấp 5 ở cấp thấp hơn cấp quốc gia. Loại này chỉ phân chia dân sự nhỏ. Không phải tất cả các quốc gia đều có các cấp độ hành chính này.
  • administrative_area_level_6 cho biết một pháp nhân dân sự bậc 6 ở cấp thấp hơn cấp quốc gia. Loại này chỉ phân chia dân sự nhỏ. Không phải tất cả các quốc gia đều có các cấp độ hành chính này.
  • administrative_area_level_7 cho biết một pháp nhân dân sự bậc 7 ở cấp thấp hơn cấp quốc gia. Loại này chỉ phân chia dân sự nhỏ. Không phải tất cả các quốc gia đều có các cấp độ hành chính này.
  • colloquial_area cho biết tên thay thế thường dùng cho thực thể.
  • locality cho biết một pháp nhân chính trị thành phố hoặc thị trấn được thành lập.
  • sublocality cho biết một pháp nhân dân sự cấp thứ nhất ở dưới một địa phương. Đối với một số vị trí, bạn có thể nhận được một trong các loại bổ sung: sublocality_level_1 đến sublocality_level_5. Mỗi cấp quận/huyện là một pháp nhân dân sự. Số lớn hơn cho biết khu vực địa lý nhỏ hơn.
  • neighborhood chỉ ra vùng lân cận được đặt tên
  • premise cho biết một vị trí được đặt tên, thường là một toà nhà hoặc tập hợp các toà nhà có tên phổ biến
  • subpremise chỉ ra một thực thể bậc nhất bên dưới một vị trí được đặt tên, thường là một toà nhà số ít trong một tập hợp các toà nhà có tên phổ biến
  • plus_code cho biết tham chiếu vị trí được mã hoá, bắt nguồn từ vĩ độ và kinh độ. Mã cộng có thể được dùng để thay thế cho địa chỉ đường phố ở những nơi chúng không tồn tại (nơi các toà nhà không được đánh số hoặc đường phố không được đặt tên). Hãy xem https://plus.codes để biết thông tin chi tiết.
  • postal_code cho biết mã bưu chính dùng để gửi thư trong quốc gia.
  • natural_feature cho thấy một đối tượng tự nhiên nổi bật.
  • airport cho biết một sân bay.
  • park biểu thị một công viên được đặt tên.
  • point_of_interest cho biết địa điểm yêu thích đã đặt tên. Thông thường, những "POI" này là những thực thể nổi bật ở địa phương và khó đưa vào danh mục khác, chẳng hạn như "Empire State Building" hoặc "Eiffel Tower".

Danh sách các loại trống cho biết không có loại nào được xác định cho thành phần địa chỉ cụ thể, ví dụ: Lieu-dit ở Pháp.

Ngoài các loại ở trên, thành phần địa chỉ có thể bao gồm các loại được liệt kê ở đây. Danh sách này chưa đầy đủ và có thể thay đổi.

  • floor cho biết tầng của một địa chỉ toà nhà.
  • establishment thường cho biết một địa điểm chưa được phân loại.
  • landmark cho biết một địa điểm lân cận được dùng làm tệp tham chiếu để hỗ trợ việc di chuyển.
  • point_of_interest cho biết địa điểm yêu thích đã đặt tên.
  • parking cho biết bãi đỗ xe hoặc bãi đỗ xe.
  • post_box cho biết một hộp bưu điện cụ thể.
  • postal_town cho biết một nhóm các khu vực địa lý, chẳng hạn như localitysublocality, được dùng làm địa chỉ gửi thư ở một số quốc gia.
  • room cho biết phòng trong địa chỉ tòa nhà.
  • street_number cho biết số đường chính xác.
  • bus_station, train_stationtransit_station cho biết vị trí của xe buýt, tàu hoả hoặc trạm dừng phương tiện công cộng.

Xu hướng khung nhìn

Trong yêu cầu Mã hoá địa lý, bạn có thể hướng dẫn dịch vụ Mã hoá địa lý ưu tiên các kết quả trong một khung nhìn nhất định (được biểu thị dưới dạng hộp giới hạn). Bạn có thể thực hiện việc này trong URL yêu cầu bằng cách thiết lập tham số bounds.

Tham số bounds xác định toạ độ vĩ độ/kinh độ của các góc Tây Nam và Đông Bắc của hộp giới hạn này bằng cách sử dụng ký tự đường ống (|) để phân tách các toạ độ.

Ví dụ: một mã địa lý cho " Washington" thường trả về tiểu bang Washington của Hoa Kỳ:

Yêu cầu:

https://maps.googleapis.com/maps/api/geocode/json?address=Washington&key=YOUR_API_KEY

Phản hồi:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Washington",
               "short_name" : "WA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Washington, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 49.0024442,
                  "lng" : -116.91558
               },
               "southwest" : {
                  "lat" : 45.543541,
                  "lng" : -124.8489739
               }
            },
            "location" : {
               "lat" : 47.7510741,
               "lng" : -120.7401385
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 49.0024442,
                  "lng" : -116.91558
               },
               "southwest" : {
                  "lat" : 45.543541,
                  "lng" : -124.8489739
               }
            }
         },
         "place_id" : "ChIJ-bDD5__lhVQRuvNfbGh4QpQ",
         "types" : [ "administrative_area_level_1", "political" ]
      }
   ],
   "status" : "OK"
}

Tuy nhiên, việc thêm đối số bounds xác định hộp giới hạn xung quanh phần đông bắc của Hoa Kỳ sẽ dẫn đến việc mã địa lý trả về thành phố Washington, D.C. này:

Yêu cầu:

https://maps.googleapis.com/maps/api/geocode/json?address=Washington&bounds=36.47,-84.72%7C43.39,-65.90&key=YOUR_API_KEY

Phản hồi:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Washington",
               "short_name" : "Washington",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "District of Columbia",
               "short_name" : "District of Columbia",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "District of Columbia",
               "short_name" : "DC",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Washington, DC, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 38.9958641,
                  "lng" : -76.90939299999999
               },
               "southwest" : {
                  "lat" : 38.7916449,
                  "lng" : -77.119759
               }
            },
            "location" : {
               "lat" : 38.9071923,
               "lng" : -77.03687069999999
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 38.9958641,
                  "lng" : -76.90939299999999
               },
               "southwest" : {
                  "lat" : 38.7916449,
                  "lng" : -77.119759
               }
            }
         },
         "place_id" : "ChIJW-T2Wt7Gt4kRKl2I1CJFUsI",
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
}

Xu hướng vùng

Trong yêu cầu Mã hoá địa lý, bạn có thể hướng dẫn dịch vụ Mã hoá địa lý trả về kết quả sai lệch cho một khu vực cụ thể bằng cách sử dụng tham số region. Tham số này sẽ lấy một đối số ccTLD (miền cấp cao nhất theo mã quốc gia) để chỉ định độ lệch khu vực. Hầu hết các mã ccTLD (miền cấp cao nhất theo mã quốc gia) đều giống với các mã ISO 3166-1, trừ một số trường hợp ngoại lệ đáng chú ý. Ví dụ: ccTLD của Vương quốc Anh là "uk" (.co.uk), trong khi mã ISO 3166-1 của Vương quốc Anh là "gb" (về mặt kỹ thuật là dành cho pháp nhân của "Vương quốc Anh và Bắc Ireland").

Kết quả mã hoá địa lý có thể sai lệch đối với mọi miền mà ứng dụng Google Maps chính được khởi chạy chính thức. Xin lưu ý rằng xu hướng chỉ ưu tiên kết quả cho một miền cụ thể. Nếu có các kết quả có liên quan hơn bên ngoài miền này, kết quả đó có thể được bao gồm.

Ví dụ: một mã địa lý cho "Toledo" sẽ trả về kết quả này vì miền mặc định cho API mã hóa địa lý được đặt thành Hoa Kỳ. Yêu cầu:

https://maps.googleapis.com/maps/api/geocode/json?address=Toledo&key=YOUR_API_KEY

Phản hồi:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Toledo",
               "short_name" : "Toledo",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Lucas County",
               "short_name" : "Lucas County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Ohio",
               "short_name" : "OH",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Toledo, OH, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 41.732844,
                  "lng" : -83.454229
               },
               "southwest" : {
                  "lat" : 41.580266,
                  "lng" : -83.69423700000002
               }
            },
            "location" : {
               "lat" : 41.6639383,
               "lng" : -83.55521200000001
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 41.732844,
                  "lng" : -83.454229
               },
               "southwest" : {
                  "lat" : 41.580266,
                  "lng" : -83.69423700000002
               }
            }
         },
         "place_id" : "ChIJeU4e_C2HO4gRRcM6RZ_IPHw",
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
}

Yêu cầu mã hoá địa lý cho "Toledo" bằng region=es (Tây Ban Nha) sẽ trả về thành phố của Tây Ban Nha.

Yêu cầu:

https://maps.googleapis.com/maps/api/geocode/json?address=Toledo&region=es&key=YOUR_API_KEY

Phản hồi:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Toledo",
               "short_name" : "Toledo",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Toledo",
               "short_name" : "TO",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Castile-La Mancha",
               "short_name" : "CM",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Spain",
               "short_name" : "ES",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Toledo, Spain",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 39.88605099999999,
                  "lng" : -3.9192423
               },
               "southwest" : {
                  "lat" : 39.8383676,
                  "lng" : -4.0796176
               }
            },
            "location" : {
               "lat" : 39.8628316,
               "lng" : -4.027323099999999
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 39.88605099999999,
                  "lng" : -3.9192423
               },
               "southwest" : {
                  "lat" : 39.8383676,
                  "lng" : -4.0796176
               }
            }
         },
         "place_id" : "ChIJ8f21C60Lag0R_q11auhbf8Y",
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
}

Lọc thành phần

Trong phản hồi Mã hoá địa lý, API Mã hoá địa lý có thể trả về các kết quả địa chỉ bị giới hạn ở một khu vực cụ thể. Bạn có thể chỉ định quy định hạn chế bằng cách sử dụng bộ lọc components. Bộ lọc bao gồm danh sách các cặp component:value được phân tách bằng dấu gạch đứng (|). Các giá trị bộ lọc hỗ trợ các phương thức sửa lỗi chính tả và so khớp một phần giống như các yêu cầu Mã hoá địa lý khác. Nếu bộ mã hoá địa lý tìm thấy kết quả phù hợp một phần với bộ lọc thành phần, thì phản hồi sẽ chứa trường partial_match.

components có thể được lọc bao gồm:

  • postal_code khớp với postal_codepostal_code_prefix.
  • country khớp với tên quốc gia hoặc mã quốc gia gồm 2 chữ cái theo tiêu chuẩn ISO 3166-1. API tuân theo tiêu chuẩn ISO để xác định quốc gia và bộ lọc hoạt động hiệu quả nhất khi sử dụng mã ISO tương ứng của quốc gia đó.

components sau đây có thể được dùng để tác động đến kết quả, nhưng sẽ không được thực thi:

  • route khớp với tên dài hoặc tên ngắn của một tuyến đường.
  • locality khớp với loại localitysublocality.
  • administrative_area khớp với tất cả các cấp độ administrative_area.

Lưu ý về tính năng lọc thành phần:

  • Đừng lặp lại các bộ lọc thành phần này trong yêu cầu, nếu không API sẽ trả về Invalid_request: country, postal_code, route
  • Nếu yêu cầu chứa các bộ lọc thành phần lặp lại, thì API sẽ đánh giá các bộ lọc đó dưới dạng AND, chứ không phải OR.
  • Kết quả nhất quán với Google Maps và đôi khi mang lại phản hồi ZERO_RESULTS ngoài dự kiến. Việc sử dụng tính năng Tự động hoàn thành địa điểm có thể mang lại kết quả tốt hơn trong một số trường hợp sử dụng. Để tìm hiểu thêm, hãy xem nội dung Câu hỏi thường gặp này.
  • Đối với mỗi thành phần địa chỉ, hãy chỉ định thành phần đó trong tham số address hoặc trong bộ lọc components, chứ đừng chỉ định cả hai. Việc chỉ định cùng một giá trị cho cả hai có thể dẫn đến ZERO_RESULTS.

Một mã địa lý cho "High St, Hastings" với components=country:GB sẽ trả về kết quả tại Hastings, Anh chứ không phải ở Hastings-On-details, Hoa Kỳ.

Yêu cầu:

https://maps.googleapis.com/maps/api/geocode/json?address=high+st+hasting&components=country:GB&key=YOUR_API_KEY

Phản hồi:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "High Street",
               "short_name" : "High St",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Hastings",
               "short_name" : "Hastings",
               "types" : [ "postal_town" ]
            },
            {
               "long_name" : "East Sussex",
               "short_name" : "East Sussex",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "England",
               "short_name" : "England",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United Kingdom",
               "short_name" : "GB",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "TN34 3EY",
               "short_name" : "TN34 3EY",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "High St, Hastings TN34 3EY, UK",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 50.8601041,
                  "lng" : 0.5957329
               },
               "southwest" : {
                  "lat" : 50.8559061,
                  "lng" : 0.5906163
               }
            },
            "location" : {
               "lat" : 50.85830319999999,
               "lng" : 0.5924594
            },
            "location_type" : "GEOMETRIC_CENTER",
            "viewport" : {
               "northeast" : {
                  "lat" : 50.8601041,
                  "lng" : 0.5957329
               },
               "southwest" : {
                  "lat" : 50.8559061,
                  "lng" : 0.5906163
               }
            }
         },
         "partial_match" : true,
         "place_id" : "ChIJ-Ws929sa30cRKgsMNVkPyws",
         "types" : [ "route" ]
      }
   ],
   "status" : "OK"
}

Một yêu cầu mã hoá địa lý cho vị trí " Santa Cruz" với components=country:ES trả về Santa Cruz de Tenerife ở Quần đảo Canary, Tây Ban Nha.

Yêu cầu:

https://maps.googleapis.com/maps/api/geocode/json?components=locality:santa+cruz|country:ES&key=YOUR_API_KEY

Phản hồi:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Santa Cruz de Tenerife",
               "short_name" : "Santa Cruz de Tenerife",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Cruz de Tenerife",
               "short_name" : "TF",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Canary Islands",
               "short_name" : "CN",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Spain",
               "short_name" : "ES",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Santa Cruz de Tenerife, Spain",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 28.487616,
                  "lng" : -16.2356646
               },
               "southwest" : {
                  "lat" : 28.4280248,
                  "lng" : -16.3370045
               }
            },
            "location" : {
               "lat" : 28.4636296,
               "lng" : -16.2518467
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 28.487616,
                  "lng" : -16.2356646
               },
               "southwest" : {
                  "lat" : 28.4280248,
                  "lng" : -16.3370045
               }
            }
         },
         "place_id" : "ChIJcUElzOzMQQwRLuV30nMUEUM",
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
}

Tính năng lọc thành phần chỉ trả về phản hồi ZERO_RESULTS nếu bạn cung cấp các bộ lọc loại trừ nhau.

Yêu cầu:

https://maps.googleapis.com/maps/api/geocode/json?components=administrative_area:TX|country:FR&key=YOUR_API_KEY

Phản hồi:

{
   "results" : [],
   "status" : "ZERO_RESULTS"
}

Bạn có thể tạo các truy vấn hợp lệ mà không cần tham số địa chỉ bằng cách sử dụng bộ lọc components. (Khi mã hoá địa lý một địa chỉ đầy đủ, bạn bắt buộc phải sử dụng tham số address nếu yêu cầu chứa tên và số toà nhà.)

Yêu cầu:

https://maps.googleapis.com/maps/api/geocode/json?components=route:Annankatu|administrative_area:Helsinki|country:Finland&key=YOUR_API_KEY

Phản hồi:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Annankatu",
               "short_name" : "Annankatu",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Helsinki",
               "short_name" : "HKI",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Finland",
               "short_name" : "FI",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "00101",
               "short_name" : "00101",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "Annankatu, 00101 Helsinki, Finland",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 60.168997,
                  "lng" : 24.9433353
               },
               "southwest" : {
                  "lat" : 60.16226160000001,
                  "lng" : 24.9332897
               }
            },
            "location" : {
               "lat" : 60.1657808,
               "lng" : 24.938451
            },
            "location_type" : "GEOMETRIC_CENTER",
            "viewport" : {
               "northeast" : {
                  "lat" : 60.168997,
                  "lng" : 24.9433353
               },
               "southwest" : {
                  "lat" : 60.16226160000001,
                  "lng" : 24.9332897
               }
            }
         },
         "place_id" : "ChIJARW7C8sLkkYRgl4je4-RPUM",
         "types" : [ "route" ]
      }
   ],
   "status" : "OK"
}