Построение межштатных автомагистралей с помощью pyplot

Вопрос или проблема

Изображение результата

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

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

#! /usr/bin/python3

# Основано на этом видео на YouTube и данных из Бюро переписи населения США:
# https://www.youtube.com/watch?v=X706iRqe1hA
# https://www.census.gov/geographies/mapping-files/time-series/geo/carto-boundary-file.html
#
# Проекции:
# https://scitools.org.uk/cartopy/docs/latest/reference/projections.html

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import numpy as np
import cartopy.feature as cfeature
import cartopy.io.shapereader as shpreader
from metpy.cbook import get_test_data


def drawUtah():
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1, projection=ccrs.Miller())
    ax.stock_img()

    for rec in shpreader.Reader(get_test_data('us_counties_500k.shp',
            as_file_obj=False)).records():
        fips_code = rec.attributes['GEOID']
        if(fips_code.startswith("49")):
            ax.add_geometries([rec.geometry], crs=ccrs.PlateCarree(),
                edgecolor="black", facecolor="#FFFAFA")

    ax.set_extent( (-114.75, -108.5, 36.5, 42.5) )
    ax.add_feature(cfeature.STATES)

    fig.savefig("./utah.png")


if __name__ == "__main__":
    drawUtah()

Изображение результата:

Ответ или решение

Для отображения межштатных шоссе на карте штата Юта с использованием библиотеки Matplotlib и Cartopy, вы можете использовать данные из OpenStreetMap или другие источники, содержащие информацию о межштатных хайвеях. В данном примере мы воспользуемся форматом Shapefile, который можно загрузить из различных открытых источников, таких как Natural Earth или US Census Bureau.

Вот пример кода, который дополнительно добавляет межштатные шоссе на вашу карту:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import cartopy.io.shapereader as shpreader
from metpy.cbook import get_test_data

def drawUtah():
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1, projection=ccrs.Miller())
    ax.stock_img()

    # Рисуем округа Юты
    for rec in shpreader.Reader(get_test_data('us_counties_500k.shp', as_file_obj=False)).records():
        fips_code = rec.attributes['GEOID']
        if(fips_code.startswith("49")):
            ax.add_geometries([rec.geometry], crs=ccrs.PlateCarree(),
                              edgecolor="black", facecolor="#FFFAFA")

    ax.set_extent((-114.75, -108.5, 36.5, 42.5))
    ax.add_feature(cfeature.STATES)

    # Загружаем и рисуем межштатные шоссе
    # Предположим, что у вас есть Shapefile с межштатными шоссе
    highways_shp = 'path_to_your_highways_shapefile.shp'
    for rec in shpreader.Reader(highways_shp).records():
        ax.add_geometries([rec.geometry], crs=ccrs.PlateCarree(),
                          edgecolor="red", facecolor="none", linewidth=1)

    plt.title("Карта межштатных шоссе и округов Юты")
    fig.savefig("./utah_highways.png")
    plt.show()

if __name__ == "__main__":
    drawUtah()

Объяснение изменений:

  1. Загрузка Shapefile с межштатными шоссе: Замените 'path_to_your_highways_shapefile.shp' на фактический путь к вашему файлу с данными о межштатных шоссе.
  2. Добавление шоссе на карту: Мы добавляем полигональные геометрические объекты шоссе в ту же систему координат, что и округа, с использованием ax.add_geometries(). Цвет линий шоссе установлен как красный, чтобы они выделялись на графике.
  3. Заголовок: Добавлен заголовок для карты, что позволяет легче понять, что изображает ваша графика.

Получение данных о межштатных шоссе:

Если у вас нет доступных данных о межштатных шоссе формата Shapefile, рекомендуем исследовать следующие источники:

  • OpenStreetMap: данные о дорогах можно экспортировать в Shapefile.
  • US Census Bureau или другие федеральные агентства, которые могут предоставлять такие данные.

Применив этот код, вы получите график, на котором будут показаны округа Юты и межштатные шоссе, что позволяет визуализировать дорожную сеть в этом штате.

Оцените материал
Добавить комментарий

Капча загружается...