计算从起点到终点的测地线,并将其存储在gis文件(shapefile和geojson)中。解决了测地线穿越反电离层的问题。
GeodesicLinesToGIS的Python项目详细描述
计算从起点到终点的测地线并将其存储在 地理信息系统文件(shapefile和geojson)。测地线是最短的路径 在曲面上的两点之间,如旋转椭球体 (Read more on Wikipedia)。
此代码构建在三个库之上:pyproj、fiona和 很漂亮。
有几个库可以计算测地线距离 反问题(寻找两点之间的最短路径)。 我之所以选择pyproj,是因为它可以很好地实现这一目的,并且是 地理空间工业中广泛使用的库(proj4 c库)。实际项目4 C 用于计算测地线距离的库(>;=v.4.9.0)例程是一个简单的转录 来自Charles Karney开发的优秀地理库C++文库。proj4 c库<;v.4.9.0 使用paul d.thomas算法。你可以在这里看到更多关于这个的信息: GeodeticMusings: a little benchmark of three Python libraries to compute geodesic distances。
所有计算都是用wgs84椭球和crs进行的。 (坐标参考系)地理信息系统文件输出为EPSG:4326。
在示例部分,您可以看到计算行的问题 解决了交叉反间谍。
numpy数组支持作为输入数据。
测地线示例
下面显示了使用此库计算的不同测地线 几个地图投影。你也可以看到与伦布线的关系 (loxodromic)和相同点之间的直线:
要求
用法
用法很简单。有两种模式: -单输入(一个 开始/结束)。 -多个输入(多个开始/结束)。
单输入
单一输入用法。
fromgeodesiclinestogisimportGeodesicLine2Gisfile
lons_lats:输入坐标。(开始经度,开始纬度,结束 经度,结束纬度)
lons_lats=(-3.6,40.5,-118.4,33.9)
存储输出文件和文件名的文件夹路径:
folderpath='/tmp'layername="geodesicline"
创建对象。可以传递两个参数: -anteridian:[true,false]用于解决anteridian问题(默认为true)。 -打印:[true,false]打印输出消息(默认为true)。
gtg=GeodesicLine2Gisfile()
启动计算。可以传递两个参数: -lons_lats:gccomp返回的输入坐标。 -公里/分:每N公里计算一个点(默认为20公里)
cd=gtg.gdlComp(lons_lats,km_pts=30)
将测地线坐标转储到线串要素并存储在地理信息系统文件中。
输出格式:“esri shapefile”(默认)、“geojson”
# shapefile outputgtg.gdlToGisFile(cd,folderpath,layername)# geojson outputgtg.gdlToGisFile(cd,folderpath,layername,fmt="GeoJSON")
多输入
多输入用法。
fromgeodesiclinestogisimportGeodesicLine2Gisfiledata=[(-6.,37.,-145.,11.),(-150.,37.,140.,11.),(-6.,37.,120.,50.),(-3.6,40.5,-118.4,33.9),(-118.4,33.9,139.8,35.5),(-118.4,33.9,104.,1.35),(-118.4,33.9,151.,-33.9),(-20.4,33.9,178.,-33.9)]folderpath="/tmp/geod_line"layername="geodesicline"gtg=GeodesicLine2Gisfile()gtg.gdlToGisFileMulti(data,folderpath,layername)
numpy数组(多个)输入
numpy数组输入用法。
importnumpyasnpfromgeodesiclinestogisimportGeodesicLine2Gisfiledata_=[(-6.,37.,-145.,11.),(-150.,37.,140.,11.),(-6.,37.,120.,50.),(-3.6,40.5,-118.4,33.9),(-118.4,33.9,139.8,35.5),(-118.4,33.9,104.,1.35),(-118.4,33.9,151.,-33.9),(-20.4,33.9,178.,-33.9)]data=np.array(data_)folderpath="/tmp/geod_line_np"layername="geodesicline"gtg=GeodesicLine2Gisfile()gtg.gdlToGisFileMulti(data,folderpath,layername)
许可证
这个程序是免费软件;你可以重新发布和/或修改它 根据 自由软件基金会;许可证的版本2,或者 选项)任何更高版本。
第三方许可证
您可以在下面的链接中阅读Pyproj、Fiona和Shapely许可证: https://raw.githubusercontent.com/jswhit/pyproj/master/LICENSEhttps://raw.githubusercontent.com/Toblerity/Shapely/master/LICENSE.txthttps://raw.githubusercontent.com/Toblerity/Fiona/master/LICENSE.txt