在我的场景中,我将消息发布到 Redis,这些消息包含 GPS 坐标(纬度/经度对)。
例子:
redis-cli -p 16379 PUBLISH gps_positions "{'lat': 50.5243584, 'lon': 12.3616320}"
redis-cli -p 16379 PUBLISH gps_positions "{'lat': 50.5063360, 'lon': 12.3377472}"
客户端订阅这些消息:
redis-cli -p 16379 PSUBSCRIBE gps_positions
现在我想在它们发布到 Redis pubsub 频道的那一刻计算当前和以前的 GPS 坐标之间的方位角。计算应该直接在 Redis 中进行,对客户端透明。由于有大量已发布的消息,我想避免在 Redis 中保存任何数据——我只需要每个新发布的坐标的前一个 GPS 坐标。
最后,客户端应该收到包括方位角在内的 GPS 位置,而无需自己进行任何计算:
"{'lat': 50.5243584, 'lon': 12.3616320, 'bearing': $BEARING}"
计算方位的算法对于这个问题无关紧要,但它看起来像这样:
import pyproj
def get_bearing(lat1, lon1, lat2, lon2):
geodesic = pyproj.Geod(ellps='WGS84')
fwd_azimuth, back_azimuth, distance = geodesic.inv(lat1, lon1, lat2, lon2)
return fwd_azimuth, back_azimuth, distance
lat1, lon1 = 50.5243584, 12.3616320
lat2, lon2 = 50.5063360, 12.3377472
bearing = get_bearing(lat1, lon1, lat2, lon2)[0]
RedisGears 是否能够在客户端收到这些消息之前侦听和更改已发布的消息?或者我可以使用 RedisGears 将消息发布到包含计算的方位角的不同通道吗?