如何在 Matplotlib 中绘制给定 2 个点(纬度和经度)的有向线段(矢量)

How to plot a directed line segment (vector) given 2 points (Latitude and longitude) in Matplotlib

假设我们从一个 Python 列表开始,例如:

list=[[-3.7025753,40.417016,-3.7062202, 40.4285271, 20], [5.7023456,40.221567,3.67823, 41.27236, 10]]

其中:

我试图在 Matplotlib 中获得的是类似于以下的图:

总结:

  1. 用 plot(x, y) 画点很清楚
  2. Matplotlib 的 Text 函数也可以清楚地绘制标签
  3. 我要问的关键问题是:

根据第一个回答要使用的函数应该是:

 matplotlib.pyplot.arrow(x, y, dx, dy, **kwargs)

重点是,除了 de x 和 y 原始坐标外,此函数还接收增量 dx 和 dy。在我的问题中,B 点为我提供了向量的方向,并且大小需要与其大小成正比。所以主要问题是 我如何将数据从 (latitude_origin, longitude_origin, latitude_destiny, longitude_destiny, magnitude) 转换为 (x, y, dx ,dy)?。明白了x,y是从经纬度原点直接变换过来的,但是dx和dy呢?

终于找到了解决办法:

第 1 步:计算形成连接起点和终点线的坡度角。使用此自定义函数:

import math

def CalcPendAng (lon1, lat1, lon2,lat2):

    if (lon2-lon1)==0:
        ang_grad=0 división por 0
    else:    
        m=(lat2-lat1) / (lon2-lon1)
        ang_rad=math.atan(m) 
        ang_grad=ang_rad* 180 / 3.14159265

    return ang_grad

步骤 2 计算连接起点和终点的 sme 线上的命运点,但与我们想要的向量的起点点 = 模数有一定距离:

def CalcLatLonDest (lon1, lat1,modulo, angulo_grad):

    factor_corrector= 0.0001

    lon2= lon1 + (modulo* math.cos(angulo_grad))
    lat2= lat1 + (modulo* math.sin(angulo_grad))
   
    return lon2, lat2