news 2026/7/7 11:59:51

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

作者头像

张小明

前端开发工程师

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/7/6 20:44:35

VMware云原生转型:传统IT的破局之道

云原生与VMware的融合背景云原生技术的核心概念(容器化、微服务、DevOps、持续交付)VMware在虚拟化领域的传统优势与转型挑战两者结合的价值:传统企业IT如何平滑过渡到云原生架构VMware Tanzu:云原生的企业级解决方案Tanzu产品套件…

作者头像 李华
网站建设 2026/7/7 10:35:49

Xshell连接故障终极排雷指南

Xshell连接故障排雷技术文章大纲常见连接错误类型认证失败(用户名/密码错误、密钥验证问题)网络不可达(IP/端口错误、防火墙拦截)协议不匹配(SSH版本冲突、加密算法不支持)会话超时或中断(网络波…

作者头像 李华
网站建设 2026/7/7 14:05:28

PlugY插件终极指南:暗黑破坏神2单机模式完全解锁

PlugY插件终极指南:暗黑破坏神2单机模式完全解锁 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 还在为暗黑破坏神2单机模式的种种限制而烦恼吗&#xff…

作者头像 李华
网站建设 2026/7/7 12:27:12

Day37 MLP神经网络的训练

先搞懂基础准备:PyTorch CUDA(让训练更快) MLP 训练通常用PyTorch 框架,如果电脑有 N 卡(NVIDIA 显卡),可以装CUDA让显卡帮着加速计算。 安装:先装对应版本的 CUDA,再…

作者头像 李华
网站建设 2026/7/7 5:22:33

MouseTester:免费鼠标性能测试工具完整使用指南

MouseTester:免费鼠标性能测试工具完整使用指南 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mo/MouseTester 还在为鼠标响应延迟、光标漂移而困扰吗?MouseTester作为一款专业的开源鼠标测试工具,通过数据…

作者头像 李华
网站建设 2026/7/7 6:59:03

KeymouseGo自动化工具终极指南:从零基础到高效应用

KeymouseGo自动化工具终极指南:从零基础到高效应用 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 在现代工作环…

作者头像 李华