(, UTM), pyproj , lon/lat , MUCH, scipy.spatial. df['something'] = df.apply(...) np.vectorize() , .
ds1
id lon lat varA
0 1 20.11 19.88 100
1 2 20.87 18.65 90
2 3 18.99 20.75 120
ds2
placeid lon lat
0 a 18.75 20.77
1 b 19.77 22.56
2 c 20.86 23.76
3 d 17.55 20.74
from scipy.spatial import distance
coords_a = ds1.values[:,(1,2)]
coords_b = ds2.values[:, (1,2)]
coords_a
distances = distance.cdist(coords_a, coords_b)
distances . coords_a.shape (3, 2) coords_b.shape (4, 2), (3,4). np.distance eculidean, .
, vara:
vara = np.array([2,4.5,2])
( 100 90 120). , distances 1 , 2, , 4.5,..., - vara ( , vara):
vara.resize(3,1)
res = res - vara
:
res[res>0] = 0
res = np.absolute(res)
, :
sum_ = res.sum(axis=1)
:
count = np.count_nonzero(res, axis=1)
() , . - cKDTree. . , , .
x, y = np.mgrid[0:4, 0:4]
points = zip(x.ravel(), y.ravel())
tree = spatial.cKDTree(points)
tree.query_ball_point([2, 0], 1)
[4, 8, 9, 12]
query_ball_point() r (s) x, .
: lon/lat, , .
UPDATE:
, WGS84 (lon/lat) UTM. , utm- , epsg.io.
lon = -122.67598
lat = 45.52168
WGS84 = "+init=EPSG:4326"
EPSG3740 = "+init=EPSG:3740"
Proj_to_EPSG3740 = pyproj.Proj(EPSG3740)
Proj_to_EPSG3740(lon,lat)
df.apply() Proj_to_... df.