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编辑  收藏  举报

导航