science Этот продукт или функция находится в экспериментальном состоянии (pre-GA). Продукты и функции Pre-GA могут иметь ограниченную поддержку, а изменения в продуктах и функциях Pre-GA могут быть несовместимы с другими версиями Pre-GA. Предложения Pre-GA подпадают под действие Особых условий сервиса платформы Google Карт . Для получения дополнительной информации см. описания этапа запуска . Зарегистрируйтесь , чтобы протестировать Places Insights!
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Функция PLACES_COUNT возвращает количество мест на основе указанной области поиска и фильтров поиска. Необходимо указать область поиска для функции PLACES_COUNT , а также можно указать дополнительные параметры фильтра, такие как тип места, статус работы, уровень цен и другие.
Поскольку функция PLACES_COUNT возвращает одно значение, вызовите ее с помощью предложения SELECT .
Входные параметры:
Обязательно : параметр фильтраgeography , задающий область поиска. Параметр geography принимает значение, определяемое типом данных BigQuery GEOGRAPHY , который поддерживает точки, линии и многоугольники.
Необязательно : дополнительные параметры фильтра для уточнения поиска.
Возврат:
Одно значение count в формате INT64 .
Пример: рассчитать количество мест в радиусе поиска
Простейший вызов функции PLACES_COUNT возвращает единое количество всех мест в заданной географической области. В этом примере возвращается количество всех действующих мест в радиусе 1000 метров от Эмпайр-стейт-билдинг.
В этом примере функция BigQuery ST_GEOGPOINT используется для возврата значения GEOGRAPHY из точки.
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;
Ответ содержит один отсчет:
Более типичный вызов применяет фильтры к области поиска. В следующем примере фильтры используются для ограничения поиска, чтобы возвращать только следующее количество:
Места типа restaurant с минимальным рейтингом 3
Уровень цен недорогой или средний
В настоящее время действует
Позволяет собакам
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;
Отфильтрованный ответ:
Помните, что запросы к наборам данных о местах устанавливают минимальный порог количества, равный 5. Одним из преимуществ функций подсчета мест является то, что они могут возвращать любые количества, включая 0. Например, следующий вызов возвращает количество, равное 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;
Пример: рассчитать количество ресторанов, используя многоугольник.
Для задания области поиска можно использовать многоугольник. При использовании многоугольника его точки должны образовывать замкнутый контур, в котором первая точка совпадает с последней.
В этом примере функция BigQuery ST_GEOGFROMTEXT используется для возврата значения GEOGRAPHY из полигона.
Пример: рассчитать количество ресторанов, используя строку
В следующем примере область поиска определяется с помощью линии соединённых точек с радиусом поиска 100 метров вокруг неё. Эта линия аналогична маршруту, рассчитанному с помощью API маршрутов . Маршрут может быть предназначен для автомобиля, велосипеда или пешехода:
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;
Ответ на строку:
Пример: объединение результатов нескольких вызовов
Вы можете объединить результаты нескольких вызовов функции PLACES_COUNT . Например, вам нужен один результат, показывающий количество ресторанов со следующими ценовыми уровнями в определённом районе:
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE"
В этом примере вы создаёте цикл для вызова функции PLACES_COUNT для каждого уровня цен и вставляете результаты каждого вызова во временную таблицу. Затем вы отправляете запрос к временной таблице, чтобы отобразить результаты:
-- 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;
Объединенный ответ:
Другой вариант — использовать команду UNION ALL для объединения результатов нескольких операторов SELECT . В следующем примере показаны те же результаты, что и в предыдущем примере:
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
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 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```"]]