You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

医院项目循环调用的接触追踪坐标距离计算函数技术问询

我最近在医院的一个项目里,落地了一个患者接触追踪的函数,并且通过循环调用它来分析患者与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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:36:35