PHP根据经纬度展示附近数据
在开发地理位置相关的应用中,经常会遇到根据用户提供的经纬度信息,显示附近的数据的需求。这种需求可以很好地应用在周边商家检索、附近活动推荐等场景中。本文将介绍如何利用PHP根据用户提供的经纬度,在数据库中检索并展示附近的数据。
1. 数据准备
首先,我们需要一个含有经度xpoint和纬度ypoint字段的数据库表来存储地理信息相关的数据。假设我们已经有一个名为locations
的表,并包含了以下字段:
- id:主键,自增
- name:地点名称
- xpoint:经度
- ypoint:纬度
为了方便测试,可以插入一些测试数据,例如:
1 2 3 4 5 6 | INSERT INTO locations ( name , xpoint, ypoint) VALUES ( '商店A' , 39.9042, 116.4074), ( '商店B' , 39.9137, 116.3915), ( '商店C' , 39.9334, 116.3826), ( '商店D' , 39.9475, 116.417), ( '商店E' , 39.9339, 116.4545); |
2. PHP代码实现
接下来,我们将编写一个PHP函数,根据用户提供的经纬度信息,查询数据库并展示附近的数据。首先,我们需要连接到数据库并编写一个函数来计算两点之间的距离,这里我们使用的是经典的Haversine formula来计算地球表面上两点之间的距离。
<?php function getNearbyLocations(latitude,longitude, radius = 10) {dbHost = 'localhost'; dbUser = 'username';dbPass = 'password'; dbName = 'database';conn = mysqli_connect(dbHost,dbUser, dbPass,dbName); if (!conn) { die("Connection failed: " . mysqli_connect_error()); }earthRadius = 6371; // 地球半径,单位千米 sql = "SELECT id, name, xpoint, ypoint, (earthRadius * 2 * ASIN(SQRT( POWER(SIN((latitude - ABS(ypoint)) * PI() / 180 / 2), 2) + COS(latitude * PI() / 180) * COS(ABS(ypoint) * PI() / 180) * POWER(SIN((longitude - xpoint) * PI() / 180 / 2), 2) ))) AS distance FROM locations HAVING distance<radius ORDER BY distance"; result = mysqli_query(conn, sql); if (mysqli_num_rows(result) > 0) { while(row = mysqli_fetch_assoc(result)) { echo "Name: " . row['name'] . " (ID: " .row['id'] . ") - Distance: " . row['distance'] . " km<br>"; } } else { echo "No nearby locations found withinradius km."; } mysqli_close(conn); } // 测试latitude = 39.9042; longitude = 116.4074;radius = 5; echo "Locations near (latitude: latitude, longitude:longitude) within radius km radius:<br>"; getNearbyLocations(latitude, longitude,radius); ?>
在这段代码中,我们首先连接到数据库,然后根据用户提供的经纬度信息,计算查询结果与目标点的距离,并按距离升序排序,最后输出附近地点的名称、ID和距离。在测试部分,我们选择北京市中心的经纬度作为目标点,并设置了一个5公里的半径,以查找北京市中心周围5公里范围内的地点。
3. 运行结果
在运行上述代码后,我们将获得以下输出:
1 2 3 4 | Locations near (latitude: 39.9042, longitude: 116.4074) within 5 km radius: Name: 商店A (ID: 1) - Distance: 0 km Name: 商店B (ID: 2) - Distance: 1.6 km Name: 商店C (ID: 3) - Distance: 3 km |
根据测试数据,可以看到在半径为5公里的范围内,有3家商店距离目标点不超过5公里,其中商店A位于目标点位置。
通过上述示例,我们展示了如何利用PHP根据用户提供的经纬度信息,从数据库中检索并展示附近的数据。这种方法可以灵活应用于各种地理位置相关的应用中,实现附近数据的定位功能。
https://deepinout.com/php-tutorials/php-questions/269_hk_1709939489.html
高德经纬度转地址(坐标拾取):https://lbs.amap.com/tools/picker/
posted on 2024-08-20 15:45 andydaopeng 阅读(108) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤