我正在使用matplotlib和cartopy在python中绘制覆盖在Map上的线。目前,我只是确定两个点的纬度,并在它们之间绘制一条线。由于我是在这些线上绘制横截面,我想找到一种方法使线的长度相同(比如说300公里长)无论我把它放在Map上的什么地方。这是不是可能的,而不只是使用反复试验和设置点,直到它们是所需的长度?
第一次,第二次,第一次,第二次= [34.5,36,-100,-97] x,y = [第一次,第二次],[第一次,第二次]
ax 1.绘图(x,y,颜色=“黑色”,标记=“o”,z阶数=3,转换= ccrs.PlateCarree(),线宽= 2.5)
下面是我现在使用的代码的相关部分。这是可行的,但我正在寻找一种方法来保持线长度不变,而不是改变端点“lat 1,lat 2,lon 1,lon 2”的值。我设想设置一个线长度,一个中点(lat/lon),以及一个围绕该点旋转的Angular 。我不知道这是否可能,但这就是我所想象的工作方式!
Example of a line that the cross section would be through
2条答案
按热度按时间p1iqtdky1#
pyproj中的
Geod
类对于这些类型的操作非常方便。下面的示例基于方位角和距离(以米为单位)从给定纬度/经度沿直线移动。既然你提到从中点开始,你可以为每个方向做两次,以得到完整的线。
在下面的例子中,我只是检索端点,并使用Cartopy(
ccrs.Geodetic()
)对大圆进行插值。但是,您也可以使用相同的Geod对象(参见npts方法)自己进行插值,并沿直线采样给定数量的点。例如,如果您需要这些坐标来提取数据,后一种方法可能会很方便。pbpqsu0x2#
the easiest way to do this would probably be to re-project your data into an equidistant projection, such as azimuthal equidistant , then buffer the point by 300km. You could do this
This creates an ellipsoid of points in lat/lon space (a circle in actual distance):