在windows或ubuntu上为x86或x64平台提供高效的大圆计算和投影库。

Gryd的Python项目详细描述


Gryd包提供以下功能:

  • 大圆计算
  • 投影和网格坐标
  • 高等大地测量学

更改

1.2.0

  • 添加了geohash模块

1.1.1

  • Geodesic类现在可以从google staticmap api转储thumbanil位置
  • 修正了传统投影(网格除外)的单元使用错误

1.1.0

  • 投影核心更改(更简单和更快)
  • 添加了millereqc投影
  • 对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函数的错误修复
  • utmmgrs网格调整

1.0.10

  • Gryd.Geodesicgeohashmaidenheadgeorefgars中导出自己
  • Gryd.Geodesicgeohashmaidenheadgeorefgars创建

1.0.9

  • bnging网格调整

1.0.8

  • 网格计算的utmmgrs错误修复
  • 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.DmsGryd.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.dmsgeoid.dmm函数

1.0.0

  • 第一个公共二进制版本(win32linux平台)

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数据库维护器

支持此项目

http://bruno.thoorens.free.fr/img/gratipay.png

-

http://bruno.thoorens.free.fr/img/bitcoin.png

16sphzxaxjccnjcry3rg711oybqj4kz4

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java hibernate。MappingException持久类未知   其余的都是java。lang.ClassNotFoundException:雅加达。servlet。在Tomcat 9上运行时在Maven/Jersey web服务上进行筛选   java从异步任务返回结果   java阶乘程序打印出递归   停止或重新部署Spring 3.1.2、Hibernate 4.1.0、Spring DataJpa 1.1.0、Tomcat 7.0.30时出现java内存泄漏   java如何在配置文件中生成计算属性   集合java 8将ListB的所有元素合并到ListA中(如果不存在)   运行mvn verify时,java为'test'配置文件中的测试设置defaultbinder   java如何在Hashmap中删除重复的键值对?不只是复制键或值   java如何编程一个按钮以成功加载数组中的下一个数据   java将ASCII数据发送到Android Things上的UART3,最后是3个字节0xFF   多线程Java并发递增一个值   java Android应用程序登录和登录问题