Menu

[r1214]: / trunk / toolkits / basemap / src / proj4.pyx  Maximize  Restore  History

Download this file

68 lines (62 with data), 2.2 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""Pyrex code to provide python interfaces to proj.4 functions.
Make changes to this file, not the c-wrappers that Pyrex generates."""
import math
cdef double _rad2dg
_rad2dg = 180./math.pi
_dg2rad = math.pi/180.
cdef extern from "proj_api.h":
ctypedef void *projPJ
ctypedef struct projUV:
double u
double v
projPJ pj_init_plus(char *)
projUV pj_fwd(projUV, projPJ)
projUV pj_inv(projUV, projPJ)
cdef class Proj:
cdef char *pjinitstring
cdef void *projpj
def __new__(self, char * pjinitstring):
cdef void *projpj
self.pjinitstring = pjinitstring
projpj = pj_init_plus(pjinitstring)
self.projpj = projpj
def fwd(self, lons, lats):
cdef projUV projxyout, projlonlatin
cdef long ndim, i
cdef double u, v
try: # inputs are lists
ndim = len(lons)
x = []; y = []
for i from 0 <= i < ndim:
projlonlatin.u = _dg2rad*lons[i]
projlonlatin.v = _dg2rad*lats[i]
projxyout = pj_fwd(projlonlatin,self.projpj)
x.append(projxyout.u)
y.append(projxyout.v)
except: # inputs are scalars
projlonlatin.u = lons*_dg2rad
projlonlatin.v = lats*_dg2rad
projxyout = pj_fwd(projlonlatin,self.projpj)
x = projxyout.u
y = projxyout.v
return x,y
def inv(self, x, y):
cdef projUV projxyin, projlonlatout
cdef long ndim, i
cdef double u, v
try: # inputs are lists
ndim = len(x)
lons = []; lats = []
for i from 0 <= i < ndim:
projxyin.u = x[i]
projxyin.v = y[i]
projlonlatout = pj_inv(projxyin, self.projpj)
lons.append(projlonlatout.u*_rad2dg)
lats.append(projlonlatout.v*_rad2dg)
except: # inputs are scalars.
projxyin.u = x
projxyin.v = y
projlonlatout = pj_inv(projxyin, self.projpj)
lons = projlonlatout.u*_rad2dg
lats = projlonlatout.v*_rad2dg
return lons,lats
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.