PHP根据经纬度展示附近数据
在开发地理位置相关的应用中,经常会遇到根据用户提供的经纬度信息,显示附近的数据的需求。这种需求可以很好地应用在周边商家检索、附近活动推荐等场景中。本文将介绍如何利用PHP根据用户提供的经纬度,在数据库中检索并展示附近的数据。
1. 数据准备
首先,我们需要一个含有经度xpoint和纬度ypoint字段的数据库表来存储地理信息相关的数据。假设我们已经有一个名为locations
的表,并包含了以下字段:
- id:主键,自增
- name:地点名称
- xpoint:经度
- ypoint:纬度
为了方便测试,可以插入一些测试数据,例如:
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. 运行结果
在运行上述代码后,我们将获得以下输出:
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 阅读(68) 评论(0) 编辑 收藏 举报