science Sản phẩm hoặc tính năng này đang trong giai đoạn Thử nghiệm (trước khi phát hành công khai). Các sản phẩm và tính năng chưa phát hành công khai có thể được hỗ trợ hạn chế và các thay đổi đối với các sản phẩm và tính năng chưa phát hành công khai có thể không tương thích với các phiên bản chưa phát hành công khai khác. Sản phẩm/dịch vụ ở giai đoạn trước khi phát hành rộng rãi tuân theo Điều khoản dành riêng cho dịch vụ của Nền tảng Google Maps. Để biết thêm thông tin, hãy xem nội dung mô tả về giai đoạn ra mắt. Đăng ký để thử nghiệm Thông tin chi tiết về địa điểm!
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Hàm PLACES_COUNT trả về một giá trị duy nhất về số lượng địa điểm dựa trên khu vực tìm kiếm và bộ lọc tìm kiếm được chỉ định. Bạn phải chỉ định khu vực tìm kiếm cho hàm PLACES_COUNT và có thể tuỳ ý chỉ định các tham số bộ lọc bổ sung, chẳng hạn như loại địa điểm, trạng thái hoạt động, mức giá, v.v.
Vì hàm PLACES_COUNT trả về một giá trị duy nhất, hãy gọi hàm này bằng cách sử dụng mệnh đề SELECT.
Tham số đầu vào:
Bắt buộc: Tham số bộ lọcgeography chỉ định khu vực tìm kiếm. Tham số geography nhận một giá trị do kiểu dữ liệu BigQuery GEOGRAPHY xác định, hỗ trợ các điểm, chuỗi đường và đa giác.
Không bắt buộc: Các thông số bộ lọc bổ sung để tinh chỉnh nội dung tìm kiếm.
Trả về:
Một giá trị count duy nhất dưới dạng INT64.
Ví dụ: Tính số lượng địa điểm trong bán kính tìm kiếm
Lệnh gọi hàm PLACES_COUNT đơn giản nhất sẽ trả về một số lượng duy nhất của tất cả các địa điểm trong một khu vực địa lý. Trong ví dụ này, bạn trả về số lượng tất cả các địa điểm đang hoạt động trong vòng 1.000 mét tính từ toà nhà Empire State.
Ví dụ này sử dụng hàm BigQuery ST_GEOGPOINT để trả về giá trị GEOGRAPHY từ một điểm.
SELECT`places_insights___us___sample.PLACES_COUNT`(JSON_OBJECT('geography',ST_GEOGPOINT(-73.9857,40.7484),-- Empire State Building'geography_radius',1000-- Radius in meters))ascount;
Phản hồi chứa một số lượng duy nhất:
Một lệnh gọi điển hình hơn sẽ áp dụng các bộ lọc cho khu vực tìm kiếm. Ví dụ tiếp theo sử dụng các bộ lọc để giới hạn phạm vi tìm kiếm chỉ trả về số lượng:
Địa điểm thuộc loại restaurant có điểm xếp hạng tối thiểu là 3
Có cấp độ hội viên với giá thấp hoặc trung bình
Hiện đang hoạt động
Cho phép mang theo chó
SELECT`places_insights___us___sample.PLACES_COUNT`(JSON_OBJECT('geography',ST_GEOGPOINT(-73.9857,40.7484),-- Empire State Building'geography_radius',1000,-- Radius in meters'types',["restaurant"],'min_rating',3,'price_level',['PRICE_LEVEL_INEXPENSIVE','PRICE_LEVEL_MODERATE'],'business_status',['OPERATIONAL'],'allows_dogs',TRUE))ascount;
Phản hồi đã lọc:
Xin lưu ý rằng các truy vấn tập dữ liệu địa điểm áp dụng ngưỡng số lượng tối thiểu là 5. Một trong những lợi thế của các hàm đếm địa điểm là chúng có thể trả về mọi số lượt đếm, kể cả 0. Ví dụ: lệnh gọi sau đây sẽ trả về số lượng là 1:
SELECT`places_insights___us___sample.PLACES_COUNT`(JSON_OBJECT('geography',ST_GEOGPOINT(-73.9857,40.7484),-- Empire State Building'geography_radius',500,-- Radius in meters'types',["restaurant"],'min_rating',4.0,'free_parking_lot',TRUE,'good_for_watching_sports',TRUE))ascount;
Ví dụ: Tính số lượng nhà hàng bằng đa giác
Bạn có thể dùng một đa giác để chỉ định khu vực tìm kiếm. Khi sử dụng đa giác, các điểm của đa giác phải xác định một vòng khép kín, trong đó điểm đầu tiên trong đa giác giống với điểm cuối cùng.
Ví dụ này sử dụng hàm ST_GEOGFROMTEXT của BigQuery để trả về giá trị GEOGRAPHY từ một đa giác.
Ví dụ: Tính số lượng nhà hàng bằng một đường thẳng
Trong ví dụ tiếp theo, bạn sẽ xác định khu vực tìm kiếm bằng một đường thẳng gồm các điểm được kết nối với bán kính tìm kiếm là 100 mét xung quanh đường thẳng đó.
Đường này tương tự như tuyến đường được tính bằng Routes API. Tuyến đường có thể dành cho xe, xe đạp hoặc người đi bộ:
DECLAREgeoGEOGRAPHY;SETgeo=ST_GEOGFROMTEXT('LINESTRING(-73.98903537033028 40.73655649223003,-73.93580216278471 40.80955538843361)');-- NYC lineSELECT`places_insights___us___sample.PLACES_COUNT`(JSON_OBJECT('geography',geo,-- line'geography_radius',100,-- Radius around line'types',["restaurant"],'min_rating',1.0,'max_rating',4.5,'min_user_rating_count',1,'max_user_rating_count',10000,'price_level',['PRICE_LEVEL_INEXPENSIVE','PRICE_LEVEL_MODERATE'],'business_status',['OPERATIONAL'],'allows_dogs',TRUE))ascount;
Câu trả lời cho dòng này:
Ví dụ: Kết hợp kết quả của nhiều lệnh gọi
Bạn có thể kết hợp kết quả của nhiều lệnh gọi đến hàm PLACES_COUNT.
Ví dụ: bạn muốn một kết quả duy nhất cho biết số lượng nhà hàng có mức giá sau đây trong một khu vực cụ thể:
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE"
Trong ví dụ này, bạn sẽ tạo một vòng lặp để gọi hàm PLACES_COUNT cho từng mức giá và chèn kết quả của mỗi lệnh gọi vào một bảng tạm thời. Sau đó, bạn truy vấn bảng tạm thời để hiển thị kết quả:
-- Create a temp table to hold the results.CREATETEMPTABLEresults(typeSTRING,countINT64);-- Create a loop that calls PLACES_COUNT for each price level.FORtypesIN(SELECTtypeFROMUNNEST(["PRICE_LEVEL_INEXPENSIVE","PRICE_LEVEL_MODERATE","PRICE_LEVEL_EXPENSIVE","PRICE_LEVEL_VERY_EXPENSIVE"])astype)DOINSERTINTOresultsVALUES(types.type,`places_insights___us___sample.PLACES_COUNT`(JSON_OBJECT('types',["restaurant"],'geography',ST_GEOGPOINT(-73.9857,40.7484),-- Empire State Building'geography_radius',1000,-- Radius in meters'business_status',['OPERATIONAL'],'price_level',[types.type])));ENDFOR;-- Query the table of results.SELECT*FROMresults;
Câu trả lời kết hợp:
Một lựa chọn khác là sử dụng lệnh UNION ALL để kết hợp kết quả của nhiều câu lệnh SELECT. Ví dụ sau đây cho thấy kết quả tương tự như ví dụ trước:
SELECT"PRICE_LEVEL_INEXPENSIVE"asprice_level,`places_insights___us___sample.PLACES_COUNT`(JSON_OBJECT('types',["restaurant"],'geography',ST_GEOGPOINT(-73.9857,40.7484),-- Empire State Building'geography_radius',1000,-- Radius in meters'business_status',['OPERATIONAL'],'price_level',['PRICE_LEVEL_INEXPENSIVE']))ascountUNIONALLSELECT"PRICE_LEVEL_MODERATE"asprice_level,`places_insights___us___sample.PLACES_COUNT`(JSON_OBJECT('types',["restaurant"],'geography',ST_GEOGPOINT(-73.9857,40.7484),-- Empire State Building'geography_radius',1000,-- Radius in meters'business_status',['OPERATIONAL'],'price_level',['PRICE_LEVEL_MODERATE']))ascountUNIONALLSELECT"PRICE_LEVEL_EXPENSIVE"asprice_level,`places_insights___us___sample.PLACES_COUNT`(JSON_OBJECT('types',["restaurant"],'geography',ST_GEOGPOINT(-73.9857,40.7484),-- Empire State Building'geography_radius',1000,-- Radius in meters'business_status',['OPERATIONAL'],'price_level',['PRICE_LEVEL_EXPENSIVE']))ascountUNIONALLSELECT"PRICE_LEVEL_VERY_EXPENSIVE"asprice_level,`places_insights___us___sample.PLACES_COUNT`(JSON_OBJECT('types',["restaurant"],'geography',ST_GEOGPOINT(-73.9857,40.7484),-- Empire State Building'geography_radius',1000,-- Radius in meters'business_status',['OPERATIONAL'],'price_level',['PRICE_LEVEL_VERY_EXPENSIVE']))ascount
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-09-06 UTC."],[],[],null,["The `PLACES_COUNT` function returns a single count value of places based on the\nspecified search area and search filters. You must specify the search area to\nthe `PLACES_COUNT` function and can optionally specify additional filter\nparameters, such as place type, operating status, price level, and more.\n\nBecause the `PLACES_COUNT` function returns a single value, call it using\na `SELECT` clause.\n\n- Input parameters:\n\n - **Required** : The `geography` [filter parameter](/maps/documentation/placesinsights/experimental/filter-params) that\n specifies the search area. The `geography` parameter takes a value defined\n by the BigQuery\n [`GEOGRAPHY`](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#geography_type)\n data type, which supports points, linestrings, and polygons.\n\n - **Optional** : Additional [filter](/maps/documentation/placesinsights/experimental/filter-params) parameters to refine your\n search.\n\n- Returns:\n\n - A single `count` value as an `INT64`.\n\nExample: Calculate the number of places in a search radius\n\nThe simplest `PLACES_COUNT` function call returns a single count of all places\nin a geographical area. In this example, you return the count of all operational\nplaces within 1000 meters of the Empire State building.\n\nThis example uses the BigQuery\n[`ST_GEOGPOINT`](https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions#st_geogpoint)\nfunction to return a `GEOGRAPHY` value from a point. \n\n```googlesql\nSELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building\n 'geography_radius', 1000 -- Radius in meters\n )\n) as count;\n```\n\nThe response contains a single count:\n\nA more typical call applies filters to the search area. The next example uses\nfilters to limit the search to only return a count of:\n\n- Places of type `restaurant` with the minimum rating of 3\n- A price level of inexpensive or medium\n- Currently operational\n- Allows dogs\n\n```googlesql\nSELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building\n 'geography_radius', 1000, -- Radius in meters\n 'types', [\"restaurant\"],\n 'min_rating', 3,\n 'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'],\n 'business_status', ['OPERATIONAL'],\n 'allows_dogs', TRUE\n )\n) as count;\n```\n\nThe filtered response:\n\nRemember that place dataset queries enforce a minimum count threshold of\n5. One of the advantages of the place count functions is\nthat they can return any counts, including 0. For example, the following call\nreturns a count of 1: \n\n```googlesql\nSELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building\n 'geography_radius', 500, -- Radius in meters\n 'types', [\"restaurant\"],\n 'min_rating', 4.0,\n 'free_parking_lot', TRUE,\n 'good_for_watching_sports', TRUE\n )\n) as count;\n```\n\nExample: Calculate the number of restaurants using a polygon\n\nYou can use a polygon to specify the search area. When using a polygon,\nthe points of the polygon must define a closed loop where the first point in the\npolygon is the same as the last point.\n\nThis example uses the BigQuery\n[`ST_GEOGFROMTEXT`](https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions#st_geogfromtext)\nfunction to return a `GEOGRAPHY` value from a polygon. \n\n```googlesql\nDECLARE geo GEOGRAPHY;\nSET geo = ST_GEOGFROMTEXT('''POLYGON((-73.985708 40.75773,-73.993324 40.750298,\n -73.9857 40.7484,-73.9785 40.7575,\n -73.985708 40.75773))'''); -- NYC viewport\n\nSELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'geography',geo, -- viewport \n 'types', [\"restaurant\"],\n 'min_rating', 1.0,\n 'max_rating', 4.5,\n 'min_user_rating_count', 1,\n 'max_user_rating_count', 10000,\n 'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'],\n 'business_status', ['OPERATIONAL'],\n 'allows_dogs', TRUE\n )\n) as count;\n```\n\nThe response for the viewport:\n\nExample: Calculate the number of restaurants using a line\n\nIn the next example, you define the search area using a line of connected\npoints with a search radius of 100 meters around the line.\nThe line is similar to a travel route calculated by the [Routes\nAPI](/maps/documentation/routes). The route might be for a vehicle, a bicycle,\nor for a pedestrian: \n\n```googlesql\nDECLARE geo GEOGRAPHY;\nSET geo = ST_GEOGFROMTEXT('LINESTRING(-73.98903537033028 40.73655649223003,-73.93580216278471 40.80955538843361)'); -- NYC line\n\nSELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'geography',geo, -- line\n 'geography_radius', 100, -- Radius around line\n 'types', [\"restaurant\"],\n 'min_rating', 1.0,\n 'max_rating', 4.5,\n 'min_user_rating_count', 1,\n 'max_user_rating_count', 10000,\n 'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'],\n 'business_status', ['OPERATIONAL'],\n 'allows_dogs', TRUE\n )\n) as count;\n```\n\nThe response for the line:\n\nExample: Combine the results of multiple calls\n\nYou can combine the results of multiple calls to the `PLACES_COUNT` function.\nFor example, you want a single result showing the number of restaurants for\nthe following price levels within a specific area:\n\n- `PRICE_LEVEL_INEXPENSIVE`\n- `PRICE_LEVEL_MODERATE`\n- `PRICE_LEVEL_EXPENSIVE`\n- `PRICE_LEVEL_VERY_EXPENSIVE\"`\n\nIn this example, you create a loop to call the `PLACES_COUNT` function for each\nprice level, and insert the results of each call to a temporary table. You then\nquery the temporary table to display the results: \n\n```googlesql\n-- Create a temp table to hold the results.\nCREATE TEMP TABLE results (type STRING, count INT64);\n\n-- Create a loop that calls PLACES_COUNT for each price level.\nFOR types IN (SELECT type FROM UNNEST([\"PRICE_LEVEL_INEXPENSIVE\", \"PRICE_LEVEL_MODERATE\", \"PRICE_LEVEL_EXPENSIVE\", \"PRICE_LEVEL_VERY_EXPENSIVE\"]) as type)\nDO\n INSERT INTO results VALUES (types.type, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'types', [\"restaurant\"],\n 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building\n 'geography_radius', 1000, -- Radius in meters\n 'business_status', ['OPERATIONAL'],\n 'price_level', [types.type]\n )));\nEND FOR;\n\n-- Query the table of results.\nSELECT * FROM results;\n```\n\nThe combined response:\n\nAnother option is to use the `UNION ALL` command to combine the results of\nmultiple `SELECT` statements. The following example shows the same results as\nfrom the previous example: \n\n```googlesql\nSELECT \"PRICE_LEVEL_INEXPENSIVE\" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'types', [\"restaurant\"],\n 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building\n 'geography_radius', 1000, -- Radius in meters\n 'business_status', ['OPERATIONAL'],\n 'price_level', ['PRICE_LEVEL_INEXPENSIVE']\n )\n) as count\n\nUNION ALL\n\nSELECT \"PRICE_LEVEL_MODERATE\" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'types', [\"restaurant\"],\n 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building\n 'geography_radius', 1000, -- Radius in meters\n 'business_status', ['OPERATIONAL'],\n 'price_level', ['PRICE_LEVEL_MODERATE']\n )\n) as count\n\nUNION ALL\n\nSELECT \"PRICE_LEVEL_EXPENSIVE\" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'types', [\"restaurant\"],\n 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building\n 'geography_radius', 1000, -- Radius in meters\n 'business_status', ['OPERATIONAL'],\n 'price_level', ['PRICE_LEVEL_EXPENSIVE']\n )\n) as count\n\nUNION ALL\n\nSELECT \"PRICE_LEVEL_VERY_EXPENSIVE\" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`(\n JSON_OBJECT(\n 'types', [\"restaurant\"],\n 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building\n 'geography_radius', 1000, -- Radius in meters\n 'business_status', ['OPERATIONAL'],\n 'price_level', ['PRICE_LEVEL_VERY_EXPENSIVE']\n )\n) as count\n```"]]