Введение:
В этой статье блога мы узнаем, как создавать карты из геолокаций в 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
Ответы:
- b
- b
- c
- b
Некоторые части этого руководства были созданы с помощью chatGPT.