Введение:

В этой статье блога мы узнаем, как создавать карты из геолокаций в Python с помощью библиотеки Folium. Folium — это мощная и простая в использовании библиотека для создания интерактивных карт с различными функциями, такими как маркеры и всплывающие окна. Мы будем использовать случайно сгенерированные геоточки в Европе, чтобы продемонстрировать этот процесс.

В следующем примере кода показано, как создать карту со случайными географическими точками в Европе. Код будет объяснен позже.

import random
import folium

def generate_random_geopoints_europe(num_points):
    lat1, lng1 = 36.022, -9.393
    lat2, lng2 = 71.919, 31.852
    geopoints = [(random.uniform(lat1, lat2), random.uniform(lng1, lng2)) for x in range(num_points)]
    return geopoints

points = generate_random_geopoints_europe(10)
print(points)

m = folium.Map(location=[50.0, 10.0], zoom_start=4)

for geopoint in points:
    folium.Marker(location=[geopoint[0], geopoint[1]]).add_to(m)

m.save('map.html')

Теперь давайте создадим более полный пример, добавив всплывающие окна с дополнительной информацией для каждого маркера:

import folium
import pandas as pd

geopoints = generate_random_geopoints_europe(10)

df = pd.DataFrame({
    'Name': [f'Point {chr(65 + i)}' for i in range(10)],
    'Description': [f'Description {chr(65 + i)}' for i in range(10)]
})

m = folium.Map(location=[50.0, 10.0], zoom_start=4)

for i, geopoint in enumerate(geopoints):
    popup = folium.Popup(f'<b>{df["Name"][i]}</b><br>{df["Description"][i]}')
    folium.Marker(location=[geopoint[0], geopoint[1]], popup=popup).add_to(m)

m.save('map_with_popups.html')

Шаг 1. Импортируйте необходимые библиотеки

Для начала нам нужно импортировать необходимые библиотеки, а именно random, folium и pandas:

import random
import folium
import pandas as pd

Шаг 2. Создайте случайные геоточки

def generate_random_geopoints_europe(num_points):
    lat1, lng1 = 36.022, -9.393
    lat2, lng2 = 71.919, 31.852
    geopoints = [(random.uniform(lat1, lat2), random.uniform(lng1, lng2)) for x in range(num_points)]
    return geopoints

Приведенная выше функция генерирует случайные геоточки (пары широты и долготы). С помощью аргумента num_points вы можете указать количество создаваемых точек. Все сгенерированные точки находятся в границах Европы. Разберем код шаг за шагом:

  • def generate_random_geopoints_europe(num_points):: Эта строка определяет функцию и принимает один параметр, num_points, который указывает количество случайных геоточек для создания.
  • lat1, lng1 = 36.022, -9.393: Это координаты юго-западного угла ограничивающей рамки, в которой находится Европа.
  • lat2, lng2 = 71.919, 31.852: это координаты северо-восточного угла ограничивающей рамки, в которой находится Европа.
  • geopoints = [(random.uniform(lat1, lat2), random.uniform(lng1, lng2)) for x in range(num_points)]: Функция random.uniform(a, b) возвращает случайное число с плавающей запятой между a и b. Код использует понимание списка для создания списка геоточек num_points, где каждая геоточка представляет собой кортеж с двумя числами с плавающей запятой: случайная широта (между lat1 и lat2) и случайная долгота (между lng1 и lng2).
  • return geopoints: Эта строка возвращает список сгенерированных геоточек.

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

Шаг 3: Создайте базовую карту с маркерами

Теперь мы можем создать карту с маркерами для случайных геоточек с помощью Folium:

points = generate_random_geopoints_europe(10)

m = folium.Map(location=[50.0, 10.0], zoom_start=4)

for geopoint in points:
    folium.Marker(location=[geopoint[0], geopoint[1]]).add_to(m)

m.save('map.html')

Этот код создаст базовую карту с маркерами для каждой из случайных геоточек и сохранит ее в виде HTML-файла с именем map.html. Чтобы отобразить карту в Jupyter Notebook, выполните ячейку с содержимым m.

Шаг 4: Добавьте всплывающие окна с дополнительной информацией

Чтобы сделать нашу карту более информативной, мы можем добавить всплывающие окна с дополнительной информацией для каждого маркера. Мы будем использовать Pandas DataFrame для хранения информации:

geopoints = generate_random_geopoints_europe(10)

df = pd.DataFrame({
    'Name': [f'Point {chr(65 + i)}' for i in range(10)],
    'Description': [f'Description {chr(65 + i)}' for i in range(10)]
})

Теперь создадим карту с маркерами и всплывающими окнами для каждой случайной геоточки:

m = folium.Map(location=[50.0, 10.0], zoom_start=4)

for i, geopoint in enumerate(geopoints):
    popup = folium.Popup(f'<b>{df["Name"][i]}</b><br>{df["Description"][i]}')
    folium.Marker(location=[geopoint[0], geopoint[1]], popup=popup).add_to(m)

m.save('map_with_popups.html')

Этот код создаст карту с маркерами и всплывающими окнами для каждой из случайных геоточек, отображая имя и описание из DataFrame, и сохранит ее в виде HTML-файла с именем map_with_popups.html. Чтобы отобразить карту в Jupyter Notebook, выполните ячейку с содержимым m.

Заключение

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

Если вам понравилась эта статья и вы хотите узнать больше об использовании Python для задач, связанных с данными, и других тем, обязательно подпишитесь на мой профиль!

Чтобы убедиться, что вы усвоили принципы, изложенные в этой статье, пройдите небольшой тест:

Which Python library is used to create interactive maps in this article?
a) Geopy
b) Folium
c) Matplotlib

What is the purpose of the generate_random_geopoints_europe function?
a) To generate a map of Europe
b) To create random geopoints within the boundaries of Europe
c) To add markers to the map

How do you add a marker to a Folium map?
a) folium.Map(location=[latitude, longitude])
b) folium.Marker(location=[latitude, longitude])
c) folium.Marker(location=[latitude, longitude]).add_to(map)

How can you add a popup with additional information to a marker?
a) Use folium.Popup with the marker's location
b) Use folium.Popup with the desired content and add it to the marker
c) Use folium.Popup with the desired content and location

Ответы:

  1. b
  2. b
  3. c
  4. b

Некоторые части этого руководства были созданы с помощью chatGPT.