Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2023, 06:53   #1
TryingToSolve
Новичок
Джуниор
 
Регистрация: 07.04.2023
Сообщений: 2
Печаль Построение смещений на карте

Пытаюсь выполнить задачу построения карты используя подложку tile сервера OpenStreetMap на которую нанесены: опорные точки, точки профилей 1 и 2 соединенные линиями различных цветов. Для каждой из точек профиля должны быть указаны направление (az в градусах) и величина смещения (value) в виде стрелки. Исходные считываемые данные приложены в .zip.

При выполнении кода не отображаются направление (az в градусах) и величинf смещения (value) в виде стрелок. Изменения значений scale_factor не помогают. Подскажите, пожалуйста, что же не так? Никак не могу найти ошибку. Заранее спасибо за ответ!

Код:
import numpy as np
import matplotlib.pyplot as plt
from cartopy import crs as ccrs
import shapefile
from cartopy.io.img_tiles import OSM
from matplotlib.patches import FancyArrowPatch

shpfile = shapefile.Reader("/User/Desktop/tdata/tdata")

fields = [x[0] for x in shpfile.fields[1:]]

points = {'base': [], 'profile1': [], 'profile2': []}
for item in shpfile.iterShapeRecords():
kind = item.record[fields.index('kind')]
position = item.shape.points[0]
points[kind].append((position, dict(zip(fields, item.record))))

tiles_provider = OSM()

plt.figure(figsize=(16, 16))

ax = plt.axes(projection=tiles_provider.crs)

ax.set_extent([shpfile.bbox[0]-0.1, shpfile.bbox[2]+0.1,
shpfile.bbox[1]-0.1, shpfile.bbox[3]+0.1], ccrs.PlateCarree())

ax.add_image(tiles_provider, 11)

def draw_arrow(ax, point, angle, length, scale_factor=1, **kwargs):
angle_rad = np.deg2rad(angle)
dx = scale_factor * length * np.cos(angle_rad)
dy = scale_factor * length * np.sin(angle_rad)
point_proj = ccrs.PlateCarree().transform_point(point[0], point[1], ax.projection)
arrow = FancyArrowPatch(point_proj, (point_proj[0] + dx, point_proj[1] + dy), connectionstyle="arc3,rad=.5", **kwargs)
ax.add_patch(arrow)

for point, data in points['base']:
ax.plot(point[0], point[1], marker='o', markersize=5, color='red', transform=ccrs.PlateCarree())

for i, (point, data) in enumerate(points['profile1']):
if i > 0:
prev_point = points['profile1'][i-1][0]
ax.plot([prev_point[0], point[0]], [prev_point[1], point[1]], color='blue', transform=ccrs.PlateCarree())
draw_arrow(ax, point, data['az'], data['value'], scale_factor=10, color='blue', transform=ax.projection)

for i, (point, data) in enumerate(points['profile2']):
if i > 0:
prev_point = points['profile2'][i-1][0]
ax.plot([prev_point[0], point[0]], [prev_point[1], point[1]], color='green', transform=ccrs.PlateCarree())
draw_arrow(ax, point, data['az'], data['value'], scale_factor=10, color='green', transform=ax.projection)

plt.show()
Вложения
Тип файла: zip tdata.zip (1.4 Кб, 1 просмотров)

Последний раз редактировалось TryingToSolve; 07.04.2023 в 10:08.
TryingToSolve вне форума Ответить с цитированием
Старый 10.04.2023, 08:22   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
arrow = FancyArrowPatch(point, (point[0] + dx, point[1] + dy), connectionstyle="arc3,rad=.5", **kwargs)
...
draw_arrow(ax, point, data['az'], data['value'], scale_factor=0.002, color='blue', transform=ccrs.PlateCarree())
Вот так рисуются какие-то "загогулины"
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 10.04.2023, 19:46   #3
TryingToSolve
Новичок
Джуниор
 
Регистрация: 07.04.2023
Сообщений: 2
По умолчанию

BDA, да, но почему-то значения направления в градусах все-равно не отображаются, хотя все прописано
TryingToSolve вне форума Ответить с цитированием
Старый 10.04.2023, 20:18   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Почему не отображаются? Чуть-чуть арки наклонены, но в файле как раз значения углов не превышают 12 градусов:
Цитата:
blue 0
blue 10
blue -5
blue 12
blue 7
blue -3
blue 0
blue -10
blue -2
blue 4
green -7
green 3
green 0
green -1
green -4
green -6
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по карте в с# CvetokZemli C# (си шарп) 0 31.05.2019 23:16
Map Overlay линия на карте serega1q2w3e C# (си шарп) 0 27.03.2014 15:09
Построение траектории по координатам на карте grebljmax Общие вопросы Delphi 0 06.11.2013 11:50
Поиск пути на карте mrbadge Общие вопросы Delphi 15 04.06.2012 11:57
Нуждаюсь в видео карте Redhurt Свободное общение 0 01.10.2010 20:33