在windows或ubuntu上为x86或x64平台提供高效的大圆计算和投影库。
Gryd的Python项目详细描述
Gryd包提供以下功能:
- 大圆计算
- 投影和网格坐标
- 高等大地测量学
更改
1.2.0
- 添加了geohash模块
1.1.1
- Geodesic类现在可以从google staticmap api转储thumbanil位置
- 修正了传统投影(网格除外)的单元使用错误
1.1.0
- 投影核心更改(更简单和更快)
- 添加了miller和eqc投影
- 对Windows的64位支持
- 加密/解密测地线坐标
>>> point = Gryd.Geodesic(-6.23, 53.63) >>> point.encrypt("your encryption key") 'mwszncbe9g2tu29' >>> Gryd.decrypt('mwszncbe9g2tu29', key="hacking...") # gives coordinates but not the good ones Geodesic point lon=+025°22'0.011'' lat=-086°36'35.290'' alt=0.000 >>> Gryd.decrypt('mwszncbe9g2tu29', key="your encryption key") Geodesic point lon=-006°13'48.000'' lat=+053°37'48.000'' alt=0.000 >>> point Geodesic point lon=-006°13'48.000'' lat=+053°37'48.000'' alt=0.000
1.0.11
- mgrs.inverse函数的错误修复
- utm和mgrs网格调整
1.0.10
- Gryd.Geodesic在geohash、maidenhead、georef和gars中导出自己
- Gryd.Geodesic从geohash、maidenhead、georef和gars创建
1.0.9
- bng和ing网格调整
1.0.8
- 网格计算的utm和mgrs错误修复
- Crs.unitvalue现在用于计算
1.0.7
- 提供一个多平台控制盘(32位和64位,适用于windows和ubuntu)
- 发布的python源代码
1.0.6
- 添加了API文档
1.0.5
- 所有Gryd对象都是可pickle的
>>> import pickle >>> data = pickle.dumps(wgs84) >>> data b'\x80\x03c_ctypes\n_unpickle\nq\x00cGryd\nEllipsoid\nq\x01}q\x02X\x04\x00\x00\x 00nameq\x03X\x06\x00\x00\x00WGS 84q\x04sC(v\x1b\x00\x00\x00\x00\x00\x00\x00\x00\ x00@\xa6TXA\xd0\x97\x1c\x14\xc4?XA\x9a\xaf\xda<\x1a\xf2\xb4?(\xe1\xf3\x84Zwk?q\x 05\x86q\x06\x86q\x07Rq\x08.' >>> pickle.loads(data) Ellispoid epsg=7030 a=6378137.000000 1/f=298.25722356
1.0.4
- 错误修复Gryd.Vincenty_dest表示法
- 车轮分配固定装置
1.0.3
- Linux(ubuntu)修复程序
1.0.2
- Gryd.Geodesic类接受经度和纬度值的度数参数
- 更好的对象表示
- 速度提高
- 为Gryd.Dms和Gryd.Dmm对象添加了__float__运算符
>>> float(Gryd.Dms(1, 5, 45, 23)) 5.756388888888889 >>> "%.6f" % Gryd.Dms(-1, 5, 45, 23) '-5.756389'
1.0.1
- C扩展中的细微更改
- 错误修复geoid.dms和geoid.dmm函数
1.0.0
- 第一个公共二进制版本(win32和linux平台)
Vicenty应用程序
>>> from Gryd import * >>> import math >>> wgs84 = Ellipsoid(name="WGS 84") # WGS 84 ellipsoid >>> wgs84 Ellispoid epsg=7030 a=6378137.000000 1/f=298.25722356 >>> london = Geodesic(-0.127005, 51.518602, 0.) >>> dublin = Geodesic(-6.259437, 53.350765, 0.) >>> vdist = wgs84.distance(dublin, london) >>> vdist Distance 464.025km initial bearing=113.6 final bearing=118.5 >>> vdist.distance, vdist.initial_bearing, vdist.final_bearing (464025.2235062019, 1.9826304238310775, 2.0675106301597674) >>> vdest = wgs84.destination(london, math.degrees(vdist.final_bearing)+180, vdist.distance) >>> vdest Destination lon=-006°15'33.973'' lat=+053°21'2.754'' end bearing=-66.4 >>> dublin Geodesic point lon=-006°15'33.973'' lat=+053°21'2.754'' alt=0.000 >>> vdest.longitude, vdest.latitude, vdest.destination_bearing (-0.10924778507143726, 0.9311465077339985, -1.1589622298392817) >>> for p in wgs84.npoints(dublin, londre, 4): print(p) ... Destination lon=-006°15'33.973'' lat=+053°21'02.754'' end bearing=113.6 Destination lon=-004°59'32.422'' lat=+053°00'36.687'' end bearing=114.6 Destination lon=-003°44'43.501'' lat=+052°39'22.715'' end bearing=115.6 Destination lon=-002°31'07.792'' lat=+052°17'22.201'' end bearing=116.6 Destination lon=-001°18'45.650'' lat=+051°54'36.502'' end bearing=117.5 Destination lon=-000°07'37.218'' lat=+051°31'06.967'' end bearing=118.5
EPSG数据集
所有与墨卡托、横向墨卡托和兰伯特相关的epsg数据集 通过使用epsg的python api可以获得共形圆锥投影。 身份证或姓名。
>>> unit = Gryd.Unit(epsg=9002) >>> unit Unit epsg=9002 ratio=3.2808693302666354 >>> wgs84 = Gryd.Ellipsoid(epsg=7030) >>> wgs84 Ellispoid epsg=7030 a=6378137.000000 1/f=298.25722356 >>> Datum(epsg=4326) Datum epsg=4326: - <Ellispoid epsg=7030 a=6378137.000000 1/f=298.25722356> - <Prime meridian epsg=8901 longitude=0.000000> - to wgs84 0.0,0.0,0.0,0.0,0.0,0.0,0.0 >>> osgb36 = Crs(epsg=27700) >>> osgb36 Crs epsg=27700: - <Datum epsg=4277: - <Ellispoid epsg=7001 a=6377563.396000 1/f=299.32496460> - <Prime meridian epsg=8901 longitude=0.000000> - to wgs84 446.45,-125.16,542.06,-20.49,0.15,0.25,0.84> - <Unit epsg=9001 ratio=1.0> - <Projection 'tmerc'>
网格
四个主要网格可用:通用横轴墨卡托, 军用网格参考系统、英国国家网格和爱尔兰 国家电网。
>>> utm = Crs(projection="utm") >>> utm(dublin) Grid point area=29U E=682406.211 N=5914792.531, alt=0.000 >>> mgrs = Crs(projection="mgrs") >>> mgrs(dublin) Grid point area=29U PV E=82406.211 N=14792.531, alt=0.000 >>> bng = Crs(projection="bng") >>> bng(dublin) Grid point area=SG E=16572.029 N=92252.917, alt=0.000 >>> ing = Crs(projection="ing") >>> ing(dublin) Grid point area=O E=15890.887 N=34804.964, alt=0.000
高级大地测量函数
>>> dublin = Gryd.Geodesic(-6.272877, 53.344606, 0.) >>> dublin.Geohash(), dublin.Geohash(digit=15) ('gc7x3r04z7', 'gc7x3r04z77csws') >>> dublin.Maindenhead(), dublin.Maindenhead(level=6) ('IO63ui72gq', 'IO63ui72gq19dh') >>> dublin.Georef(), dublin.Georef(digit=6) ('MKJJ43322037', 'MKJJ433203') >>> dublin.Gars() '348MY16' >>> Gryd.from_geohash('gc7x3r04z77csws') Geodesic point lon=-006°16'22.357'' lat=+053°20'40.582'' alt=0.000 >>> Gryd.from_maidenhead('IO63ui72gq') Geodesic point lon=-006°16'21.938'' lat=+053°20'40.563'' alt=0.000 >>> Gryd.from_maidenhead('IO63ui72gq19dh') Geodesic point lon=-006°16'22.357'' lat=+053°20'40.583'' alt=0.000 >>> Gryd.from_georef('MKJJ43322037') Geodesic point lon=-006°16'21.900'' lat=+053°20'41.100'' alt=0.000 >>> Gryd.from_georef('MKJJ433203') Geodesic point lon=-006°16'15.000'' lat=+053°20'45.000'' alt=0.000 >>> Gryd.from_gars('348MY16') # center of 5minx5min tile Geodesic point lon=-006°17'30.000'' lat=+053°22'30.000'' alt=0.000 >>> Gryd.from_gars('348MY16', anchor="sw") # south west of 5minx5min tile Geodesic point lon=-006°20'00.000'' lat=+053°20'00.000'' alt=0.000
图像地图插值
Gryd.Crs类还提供映射坐标的函数 使用校准点插值。最少两点是 必修的。
>>> pvs = Crs(epsg=3785) # Popular Visualisation Crs >>> pvs.add_map_point(0,0, Geodesic(-179.999, 85)) >>> pvs.add_map_point(512,512, Geodesic(179.999, -85)) >>> g = pvs.map2crs(256+128, 256+128) >>> g Geodesic point lon=+089°59'58.20'' lat=-066°23'43.74'' alt=0.000 >>> pvs.crs2map(g) Reference point px=384 py=384 - <Geodesic point lon=+089°59'58.20'' lat=-066°23'43.74'' alt=0.000> - <Geographic point X=10018698.512 Y=-9985934.440s alt=0.000> >>> g = pvs.map2crs(256-128, 256+128, geographic=True) >>> g Geographic point X=-10018698.512 Y=-9985934.440s alt=0.000 >>> pvs.crs2map(g) Reference point px=128 py=384 - <Geodesic point lon=-089°59'58.20'' lat=-066°23'43.74'' alt=0.000> - <Geographic point X=-10018698.512 Y=-9985934.440s alt=0.000>
所有的Gryd对象都是ctypes Structure,可以直接在c代码中使用。
>>> [f[0] for f in london._fields_] ['longitude', 'latitude', 'altitude'] >>> london.longitude -0.002216655416495398 >>> [f[0] for f in wgs84._fields_] ['epsg', 'a', 'b', 'e', 'f'] >>> [f[0] for f in osgb36._fields_] ['datum', 'unit', 'epsg', 'lambda0', 'phi0', 'phi1', 'phi2', 'k0', 'x0', 'y0', 'azimut']
待办事项
- 实现斜墨卡托
- 实现epsg数据库维护器