Есть ли в Python метод оценки цвета на графике, который я создал с помощью pyplot? Я нарисовал несколько схем F1 в pyplot следующим образом: желтая схема на сером фоне
Далее в моем проекте нужно определить, находится ли точка на этом изображении на трассе или нет. Точки желтого цвета обозначают дорожку, красный квадрат — конец дорожки, а зеленый — начало. Я хотел бы определить цвет по любой координате на этом графике. Методы, в которых я использую файл JPG, неудобны, поскольку я хочу использовать реальные координаты. Например: этот путь находится между 24,464 и 24,478 северной широты и 54,620 и 54,690 восточной долготы. Могу ли я получить цвет точки (24.46823,54.66023)
Мне удалось найти только методы, использующие JPG-файл (Pillow), но преобразовать реальные координаты в правильную точку в JPG-файле не так уж просто и точно.
Есть ли в pyplot метод, который я пропустил, или, может быть, Skimage?
Это тоже помогло бы мне. Можете ли вы дать мне подсказку, как это сделать? Мои треки сейчас составляют несколько сотен очков. координаты с точностью до шести цифр.
Matplotlib использует преобразование transData
для перехода от ваших реальных координат к пиксельным координатам matplotlib.org/stable/users/explain/artists/…
Другим решением может быть игнорировать изображение и превратить трек и интересующую вас точку в объекты Shapely. Затем используйте метод Shapely difference
, чтобы увидеть, насколько они близки shapely.readthedocs.io/en/stable/manual.html
Возможно, это проблема XY.
Мое предложение — использовать операции ГИС и просто проверять, пересекается ли точка с контуром:
def is_inside_circuit(latlon, tolerance=0): # in meters
from shapely import Point
y, x = latlon # could be optional
circuit = gdf
if tolerance > 0:
circuit = gdf.to_crs("EPSG:30340").buffer(tolerance)
return circuit.to_crs(gdf.crs).intersects(Point(x, y)).squeeze()
is_inside_circuit((24.46997 , 54.605463)) # True
is_inside_circuit((24.46997 , 54.605563)) # False
is_inside_circuit((24.46997 , 54.605563), 10) # True
Используемый вход/схема:
import geopandas as gpd
url_yasmarina = (
"https://raw.githubusercontent.com/bacinger/"
"f1-circuits/master/circuits/ae-2009.geojson"
)
gdf = gpd.read_file(url_yasmarina)
В используемом вами масштабе (несколько километров в обоих направлениях) вы можете отобразить географические координаты в пикселях с отличной аппроксимацией, используя линейное преобразование, т. е. практически за короткое время.