医院项目循环调用的接触追踪坐标距离计算函数技术问询
我最近在医院的一个项目里,落地了一个患者接触追踪的函数,并且通过循环调用它来分析患者与Beacon设备采集点之间的距离,进而判断是否存在近距离接触的情况。下面是我整理的实现细节和使用方式:
函数功能说明
这个函数的核心作用是计算患者坐标与指定设备下Beacon采集点的坐标距离,判断是否达到预设的接触阈值,最终返回符合接触条件的患者ID列表。
函数实现代码
import math import pandas as pd def inContact(patientID, patientLng, patientLat, dev, index, _data, mapScale, distance): contact = [] # 从数据集提取对应设备的Beacon经纬度列表 contactX = _data.loc[dev, 'Beacon Longtitude'].tolist() contactY = _data.loc[dev, 'Beacon Latitude'].tolist() # 计算经度方向的坐标差值绝对值(这里变量名latVect是笔误,建议改成lngVect更准确) latVect = math.fabs(float(patientLng[index]) - float(contactX[index])) # 后续需补充纬度方向差值计算,结合mapScale将坐标差转换为实际物理距离 # 示例逻辑: # lngVect = math.fabs(float(patientLat[index]) - float(contactY[index])) # actual_distance = math.hypot(latVect, lngVect) * mapScale # 对比阈值,收集符合条件的患者ID # if actual_distance <= distance: # contact.append(patientID) return contact
关键逻辑拆解
- 数据提取:从传入的
_data(Pandas DataFrame格式)中,根据设备IDdev提取对应的Beacon经纬度数据,转成列表方便按索引匹配计算 - 坐标差值计算:先计算患者当前坐标与同索引Beacon点的经度差值绝对值,后续需要补充纬度差值的计算,再通过勾股定理计算平面距离
- 比例尺转换:利用
mapScale将坐标单位的距离转换为实际物理距离(比如1坐标单位对应1000米) - 阈值判断:对比计算出的实际距离和传入的
distance接触阈值,将符合条件的患者ID加入返回列表
循环调用示例
# 模拟患者数据 patient_ids = ["P001", "P002", "P003"] patient_lngs = [116.397, 116.398, 116.396] patient_lats = [39.908, 39.907, 39.909] # 模拟设备列表 devices = ["DEV001", "DEV002"] # 配置参数 map_scale = 1000 # 1坐标单位对应1000米 contact_threshold = 2 # 接触判定阈值:2米 # 循环遍历患者和设备,调用接触追踪函数 for idx, pid in enumerate(patient_ids): for dev in devices: contacts = inContact(pid, patient_lngs, patient_lats, dev, idx, patient_data_df, map_scale, contact_threshold) if contacts: print(f"患者{pid}与{','.join(contacts)}存在近距离接触")
内容的提问来源于stack exchange,提问作者confused_kid
相关产品推荐
相关产品推荐

