news 2026/9/10 12:13:55

智能防走失定位工具,核心功能,绑定家人手机,实时查看位置,设置安全区域,如小区,超出区域自动提醒,支持一键求救,应用场景,预防老人痴呆患者走失,家人随时掌握位置,放心又安心。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
智能防走失定位工具,核心功能,绑定家人手机,实时查看位置,设置安全区域,如小区,超出区域自动提醒,支持一键求救,应用场景,预防老人痴呆患者走失,家人随时掌握位置,放心又安心。

# 智能防走失定位工具(Python 3.8+)

# 依赖:pip install prettytable

import random

import math

import time

from datetime import datetime

from prettytable import PrettyTable

class SmartAntiLostTool:

def __init__(self):

# 模拟用户数据(主账号+绑定家人)

self.users = {

"master_001": {"name": "家属小王", "bound_members": {}, "safe_zones": {}}

}

# 模拟实时位置存储(user_id: (lat, lon, update_time))

self.location_records = {}

# 地球半径(公里,简化距离计算)

self.EARTH_RADIUS = 6371

def _haversine_distance(self, loc1, loc2):

"""计算两点间球面距离(公里)"""

lat1, lon1 = math.radians(loc1[0]), math.radians(loc1[1])

lat2, lon2 = math.radians(loc2[0]), math.radians(loc2[1])

dlat, dlon = lat2 - lat1, lon2 - lon1

a = math.sin(dlat/2)**2 + math.cos(lat1)*math.cos(lat2)*math.sin(dlon/2)**2

return self.EARTH_RADIUS * 2 * math.asin(math.sqrt(a))

def bind_family_member(self, master_id, member_id, member_name):

"""绑定家人账号(模拟手机号/ID关联)"""

if master_id not in self.users:

return False, "主账号不存在"

if member_id in self.users[master_id]["bound_members"]:

return False, "该成员已绑定"

# 初始化成员数据

self.users[master_id]["bound_members"][member_id] = {

"name": member_name,

"status": "正常",

"last_update": None

}

self.location_records[member_id] = None # 初始无位置

return True, f"成功绑定{member_name}({member_id})"

def update_location(self, user_id, lat, lon):

"""更新用户实时位置(模拟GPS上报)"""

if user_id not in self.location_records:

return False, "用户未注册"

self.location_records[user_id] = (lat, lon, datetime.now())

# 更新绑定关系中的最后上报时间

for master_id in self.users:

if user_id in self.users[master_id]["bound_members"]:

self.users[master_id]["bound_members"][user_id]["last_update"] = datetime.now()

return True, "位置更新成功"

def set_safe_zone(self, master_id, zone_name, center_lat, center_lon, radius_km):

"""设置安全区域(如小区:名称+中心坐标+半径公里)"""

if master_id not in self.users:

return False, "主账号不存在"

self.users[master_id]["safe_zones"][zone_name] = {

"center": (center_lat, center_lon),

"radius": radius_km

}

return True, f"安全区域[{zone_name}]设置完成(半径{radius_km}km)"

def check_zone_safety(self, master_id, member_id):

"""检查成员是否超出安全区域"""

if master_id not in self.users or member_id not in self.users[master_id]["bound_members"]:

return False, "绑定关系不存在"

if member_id not in self.location_records or not self.location_records[member_id]:

return False, "成员位置未更新"

member_loc = self.location_records[member_id][:2]

safe_zones = self.users[master_id]["safe_zones"]

if not safe_zones:

return False, "未设置安全区域"

# 检查所有安全区域(默认第一个区域为主要监控区)

zone_name = list(safe_zones.keys())[0]

zone = safe_zones[zone_name]

distance = self._haversine_distance(member_loc, zone["center"])

if distance > zone["radius"]:

# 超出区域,更新状态并提醒

self.users[master_id]["bound_members"][member_id]["status"] = "超出安全区"

return True, f"警告!{member_id}已超出[{zone_name}](距离{round(distance,2)}km)"

else:

self.users[master_id]["bound_members"][member_id]["status"] = "正常"

return True, f"安全!{member_id}在[{zone_name}]内(距离{round(distance,2)}km)"

def send_sos_signal(self, user_id, message="紧急求助!我迷路了"):

"""一键求救(模拟通知绑定的主账号)"""

if user_id not in self.location_records or not self.location_records[user_id]:

return False, "无法获取位置,求救失败"

# 查找绑定的主账号

master_id = None

for mid in self.users:

if user_id in self.users[mid]["bound_members"]:

master_id = mid

break

if not master_id:

return False, "未绑定家属账号"

loc = self.location_records[user_id]

sos_info = {

"time": datetime.now(),

"location": loc[:2],

"message": message,

"member": self.users[master_id]["bound_members"][user_id]["name"]

}

return True, f"求救已发送至{master_id}:\n{sos_info}"

def display_status(self, master_id):

"""显示所有绑定成员的实时状态"""

if master_id not in self.users:

return "主账号不存在"

table = PrettyTable()

table.field_names = ["成员ID", "姓名", "状态", "最后位置", "更新时间"]

for uid, info in self.users[master_id]["bound_members"].items():

loc = self.location_records.get(uid)

location_str = f"{loc[0]:.4f},{loc[1]:.4f}" if loc else "未更新"

update_time = loc[2].strftime("%m-%d %H:%M") if loc else "无"

table.add_row([uid, info["name"], info["status"], location_str, update_time])

return str(table)

def simulate_elderly_movement(base_lat, base_lon, max_offset=0.01):

"""模拟老人缓慢移动(在基准位置附近随机偏移)"""

return (

base_lat + random.uniform(-max_offset, max_offset),

base_lon + random.uniform(-max_offset, max_offset)

)

def main():

tool = SmartAntiLostTool()

current_user = "master_001" # 模拟主账号登录

# 初始化演示数据:绑定老人账号

tool.bind_family_member(current_user, "elder_001", "张爷爷")

# 设置安全区域(模拟小区:中心坐标+半径1km)

tool.set_safe_zone(current_user, "幸福小区", 39.9087, 116.3975, 1.0)

# 初始位置(小区内)

initial_loc = (39.9087, 116.3975)

tool.update_location("elder_001", *initial_loc)

print("=== 智能防走失定位工具 ===")

print("核心功能:位置监控 | 安全区域 | 一键求救")

print(f"当前账号:{tool.users[current_user]['name']}({current_user})\n")

while True:

print("\n操作选项:")

print("1. 查看成员状态 2. 模拟位置更新 3. 检查安全区域 4. 一键求救 5. 退出")

choice = input("请选择(1-5):")

if choice == "1":

print("\n" + tool.display_status(current_user))

elif choice == "2":

# 模拟老人移动(随机偏移)

new_loc = simulate_elderly_movement(*initial_loc)

success, msg = tool.update_location("elder_001", *new_loc)

print(f"\n位置更新结果:{msg}")

print(f"新位置:{new_loc[0]:.4f}, {new_loc[1]:.4f}")

elif choice == "3":

success, msg = tool.check_zone_safety(current_user, "elder_001")

print(f"\n区域检查结果:{msg}")

elif choice == "4":

success, msg = tool.send_sos_signal("elder_001", "爷爷找不到回家的路了!")

print(f"\n求救结果:{msg}")

elif choice == "5":

print("\n感谢使用防走失工具,祝家人平安!")

break

else:

print("无效选项,请重试")

if __name__ == "__main__":

main()

代码说明(代码块前后解释)

核心功能实现

1. 绑定与位置管理

-

"bind_family_member" 建立主账号与老人账号的绑定关系

-

"update_location" 模拟GPS上报位置(支持手动/自动更新)

- 位置数据存储为

"(纬度, 经度, 更新时间)" 元组

2. 安全区域监控

-

"set_safe_zone" 定义区域(名称+中心坐标+半径公里)

-

"check_zone_safety" 用Haversine公式计算实际距离,超半径则标记"超出安全区"

3. 一键求救机制

-

"send_sos_signal" 模拟向绑定家属发送含位置、时间的求救信息

创新设计元素(源自创新设计梦工场课程)

- 用户场景适配:针对老人操作特点,简化交互(命令行菜单+明确提示)

- 动态位置模拟:

"simulate_elderly_movement" 函数模拟老人缓慢移动(避免位置突变)

- 风险预警闭环:位置更新→区域检查→状态标记→人工提醒的完整链路

- 低门槛技术落地:用标准库实现核心逻辑,降低部署难度(仅需安装prettytable)

使用说明

1. 安装依赖:

"pip install prettytable"

2. 运行程序后通过菜单操作:

- 选项2模拟老人位置变化(随机偏移基准点)

-

选项3检查是否超出预设的"幸福小区"(半径1km)

- 选项4触发求救,模拟通知家属

3. 扩展建议:

- 接入真实GPS API(如高德/百度地图定位)

- 添加短信/推送通知(需集成通信SDK)

- 开发简易GUI(如Tkinter)提升老人操作便利性

代码严格遵循移动端适配(轻量无复杂依赖)、异常处理(如未绑定账号提示)、模块化设计(功能拆分至独立方法),可直接复制运行演示核心场景。

欢迎关注我,有更多编程干货等待你!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 3:05:51

系统行为模式的AI基准学习

在当今的软件开发生命周期中,系统行为模式的分析正成为保障软件质量的核心环节。随着人工智能技术的崛起,AI基准学习——即通过机器学习模型对系统行为进行建模、评估和优化——已从理论探索迈向实践应用。对于软件测试从业者而言,这不仅是工…

作者头像 李华
网站建设 2026/9/9 15:27:57

本地图像智能检索工具终极使用指南:从零基础到高效应用

本地图像智能检索工具终极使用指南:从零基础到高效应用 【免费下载链接】ImageSearch 基于.NET8的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享 项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch 在数字时代,海量图…

作者头像 李华
网站建设 2026/9/9 2:28:24

智能测试新纪元:深度学习驱动的软件异常分类框架

当测试遇上深度学习 在数字化转型加速的今天,软件系统日趋复杂,传统的规则基异常检测方法已难以应对海量日志、多变用户行为和隐蔽性缺陷的挑战。根据Gartner预测,到2026年,超过80%的企业软件测试任务将引入AI技术辅助。深度学习…

作者头像 李华
网站建设 2026/9/9 12:15:53

QThread: Destroyed while thread is still running

在Qt多线程编程中,QThread: Destroyed while thread is still running错误是典型的线程生命周期管理问题。以下是系统性解决方案和最佳实践: 1️⃣ 根本原因 线程对象(QThread实例)在所属线程仍在运行时被销毁(如超出…

作者头像 李华
网站建设 2026/9/10 7:37:41

Ubuntu下Qt应用重启失败全解析

1.Ubuntu下Qt应用重启失败全解析 在Ubuntu下使用Qt的QProcess重启应用时出现“关闭成功但启动失败”的问题,通常涉及进程同步、路径/权限、环境变量、信号处理四大核心环节。结合搜索结果及Qt/Linux机制,以下是系统性分析与解决方案: 1. 进…

作者头像 李华
网站建设 2026/9/9 23:48:40

Windows Defender终极移除指南:彻底释放系统性能的完整方案

Windows Defender终极移除指南:彻底释放系统性能的完整方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirror…

作者头像 李华