Авторизоваться
Аким Солянкин 30.04.2021 Опубликована

Поиск мест и их географических данных для геоаналитики

API Google Places в сочетании со стандартным пакетом Python обеспечивает простой способ поиска мест по именам, адресу, номеру телефона, ключевым словам или категориям (рестораны, бары, магазины и т. д.)

Роль географических данных стала важным компонентом принятия политических и деловых решений для понимания и решения конкретных проблем. Например, я использую его для своих исследований в области устойчивого развития, таких как определение кластеров различных отраслей, демографии и т. д. В определенном месте, где фирмы участвуют в устойчивых методах ведения бизнеса.

Одной из основных проблем исследований на основе ГИС являются трудности в получении данных. Хотя существует множество стандартных баз данных, которые предоставляют подробную информацию о зданиях, предприятиях, населении и т. д. В районе, основная проблема этих баз данных в том, что они часто становятся устаревшими, менее точными и ненадежными. Карты Google или аналогичные службы могут использоваться для дополнения существующих баз данных актуальной информацией. В этом посте я разверну API Google Адресов для поиска мест и получения необходимой информации для желаемого места.

Предупреждение: в то время как службы Google API имеют несколько бесплатных квот каждый месяц - этого более чем достаточно для большинства случаев использования, необходимо предоставить платежные реквизиты (например, кредитную или дебетовую карту) для регистрации, прежде чем можно будет выдать ключ API. Если вы не желаете платить или опасаетесь непредвиденных расходов, существует достаточно гибкости и возможностей, чтобы ограничить запросы / использование за пределами бесплатных услуг, чтобы предотвратить запуск любого нежелательного биллинга. Но вы не можете пользоваться услугами (насколько мне известно), не предоставив приемлемую форму платежных учетных данных.

Есть два способа найти места в Python с помощью официального API Google. Можно напрямую делать HTTP-запросы URL, используя инструкции по поиску, доступные на веб-странице Google Place Search API. Можно также использовать пакет Googlemaps, который обеспечивает удобную функциональность для получения сведений о месте в Python. Поскольку использовать стандартный пакет удобнее, мы воспользуемся им для ваших упражнений. Искать места в Google API можно четырьмя разными способами.

  1. Поиск мест поблизости

Поиск поблизости ищет места в пределах области, указанной, например, широтой, долготой и радиусом. Мы можем уточнить поисковый запрос, указав ключевые слова (кофе, вегетарианство и т. д.) Или тип целевых мест (например, рестораны, кафе). Он ищет весь контент, который Google проиндексировал для места. Оба способа поиска (по ключевому слову или типу) часто дают разные результаты. Пример кода показан ниже:

import googlemaps

# объект клиента
client = googlemaps.Client(key = "YOUR API")

# площадь в пределах 500 м от Белого дома
lat =  38.897957, 
lon = -77.036560, # lat lon of The White House
radius = 500 # radius in meters
token = None # page token for going to next page of search

# способ 1
desirable_places = client.places_nearby(keyword = 'coffee', **kwargs)

# или использовать # способ 2
place_type = 'cafe'
desirable_places = client.places_nearby(type = place_type, **kwargs)

# маркер для поиска следующей страницы; для использования в цикле
token = desirable_places['next_page_token'] 

print(len(desirable_places))

# выход
Found 20 places

Этот запрос API возвращает большую часть информации о каждом месте, за исключением formatted_address, номера телефона, веб-сайта и отзывов. Хотя эти сведения могут иметь значение в определенных случаях, функция «Места поблизости» предоставляет всю необходимую и удовлетворительную информацию о местах, которые мы ищем.

2. Поиск мест

Этот запрос очень похож на API поиска поблизости, о котором говорилось выше, но с той лишь разницей, что он возвращает немного другие детали. Например, ответ на запрос возвращает адреса места, которого нет в функции поиска поблизости.


import googlemaps

# объект клиента
client = googlemaps.Client(key = "YOUR API")

# площадь в пределах 500 м от Белого дома
lat =  38.897957, 
lon = -77.036560, # lat lon of The White House
radius = 500 # radius in meters
token = None # page token for going to next page of search

# способ 1
desirable_places = client.places(query = 'coffee', **kwargs)

# или использовать# способ 2
place_type = 'cafe'
desirable_places = client.places(type = place_type, **kwargs)

# маркер для поиска следующей страницы; для использования в цикле
token = desirable_places['next_page_token'] 

print(len(desirable_places))

# выход
Found 20 places

3. Найдите место

Этот запрос находит одно место на основе названий места, адреса или номера телефона. Запрос API предлагает гибкость при указании параметров, для которых нам нужны данные, как показано в приведенном ниже коде:

# объект клиента
client = googlemaps.Client(key = "YOUR API")

# наиболее доступные параметры
all_fields = ['business_status', 'formatted_address','geometry/location','name', 
              'place_id', 'rating','types', 'user_ratings_total','formatted_phone_number']

# желаемые параметры
fields = ['place_id', 'name', 'formatted_address']

# район в 5 км от Белого дома
location_bias = 'circle:{}@{},{}'.format(5000, '38.897957', '-77.036560') # lat lon of The White House

place_details = client.find_place(input = 'coffee', # или введите номер телефона
                                  input_type = 'textquery', # или 'phonenumber'
                                  location_bias = location_bias, 
                                  fields = fields)

print(place_details)

# вывод (здесь показано только несколько полей)
{'formatted_address': '435 11th St NW, Washington, DC 20004, United States',
   'name': "Peet's Coffee",
   'place_id': 'ChIJUYmDuZC3t4kRU04ESW3XH94'}],
 'status': 'OK'}

Такой способ отправки запроса имеет два ограничения. Во-первых, хотя запрос, основанный на номере телефона или адресе, обязательно вернет один результат, текстовый запрос, включающий название места, может найти другое место, чем то, что мы хотим. Таким образом, если мы также не знаем точное название места, эта функция несколько ненадежна или требует ручного вмешательства для проверки деталей места. Во-вторых, совпадение возможно, но не обязательно, в пределах целевой географии. Если совпадение не найдено в желаемой области, он может вернуть самое близкое совпадение из любой точки земного шара, а не вернуть нулевые результаты - при условии, что любое совпадение доступно в базе данных Google.

4. Получите подробную информацию о месте.

Это наиболее полный API Адресов для поиска информации об известном месте. Запрос сведений о месте возвращает все сведения о месте - в зависимости от аргумента поля запроса, - которые Google проиндексировал для этого места, включая отзывы (до 4–5 отзывов для отдельной учетной записи), веб-сайт и т. д. Подобно find_place, этот запрос API также обеспечивает гибкость в определении того, какие атрибуты места должны быть возвращены. Единственное отличие состоит в том, что он также возвращает несколько дополнительных сведений (например, веб-сайт, обзоры), которых нет. 3 API нет. Пример фрагмента кода показан ниже:

# объект клиента
client = googlemaps.Client(key = "YOUR API")

# запрос сведений о месте
place_details = client.place(place_id = 'ChIJ37HL3ry3t4kRv3YLbdhpWXE') # place_id of The White House

print(place_details)

#вывод (здесь показано только несколько полей)
{'address_components': [{'long_name': '1600',
   'short_name': '1600',
   'types': ['street_number']},
  {'long_name': 'Pennsylvania Avenue Northwest',
   'short_name': 'Pennsylvania Avenue NW',
   'types': ['route']},
  {'long_name': 'Northwest Washington',
   'short_name': 'Northwest Washington',
   'types': ['neighborhood', 'political']},
  {'long_name': 'Washington',
   'short_name': 'Washington',
   'types': ['locality', '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']},

Основным недостатком этой функции является то, что она выполняет поиск с использованием place_id, и перед отправкой запроса необходимо иметь точный place_id. Таким образом, этот API часто используется в сочетании с API общего поиска, которые предоставляют place_ids на основе поиска по ключевым словам, а затем используют place_id для сбора информации о месте. Также,

Возможные применения и заключительные замечания

Есть разные способы использования таких API. Например, в моем случае API позволяет мне быстро определять местоположение торговых центров, кафе, ресторанов, баров и т. д. Рядом с конкретным офисом, колледжем или жилым комплексом, что поможет мне понять эволюцию городской экономики и шаблоны развития. Такая коммерческая плотность и модели развития могут также выявить неравенство в инфраструктуре, бизнесе, магазинах, школах и т. д. в разных районах. Обнаружение таких кластеров будет полезно при разработке политики содействия устойчивому развитию в регионе на уровне города или района.

Основная цель этой статьи - познакомить с функциями Google Places API на Python. API Google для географической информации предлагает множество преимуществ разработчикам приложений, а также другим экспертам в предметной области, например исследователям географической информации.

Коментарии
Авторизоваться что-бы оставить комментарий
Присоединяйся в тусовку
Наш сайт использует файлы cookie для вашего максимального удобства. Пользуясь сайтом, вы даете свое согласие с условиями пользования cookie