坐标反查地址 php,php – SQL查询,按给定坐标选择最近的位置

参见英文答案 > Fastest Way to Find Distance Between Two Lat/Long Points                                    16个

我有$latitude = 29.6815400和$longitude = 64.3647100,现在在MySQL中我想把这些坐标的15个最近的位置和我打算做这个查询:

SELECT *

FROM places

WHERE latitude BETWEEN($latitude - 1, $latitude + 1)

AND longitude BETWEEN($longitude - 1, $logintude + 1)

LIMIT 15;

你认为这是正确的还是你建议别的吗?

如何做BEETWEEN,因为我想在近处搜索最大50Km的范围?

我忘了说我也可以在运行查询之前使用PHP做任何事情.

注意:我无法使用存储过程.

解决方法:

这是用于计算两点之间距离的PHP公式:

function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi')

{

$theta = $longitude1 - $longitude2;

$distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))+

(cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));

$distance = acos($distance); $distance = rad2deg($distance);

$distance = $distance * 60 * 1.1515;

switch($unit)

{

case 'Mi': break;

case 'Km' : $distance = $distance * 1.609344;

}

return (round($distance,2));

}

然后添加一个查询以获取距离小于或等于上述距离的所有记录:

$qry = "SELECT *

FROM (SELECT *, (((acos(sin((".$latitude."*pi()/180)) *

sin((`geo_latitude`*pi()/180))+cos((".$latitude."*pi()/180)) *

cos((`geo_latitude`*pi()/180)) * cos(((".$longitude."-

`geo_longitude`)*pi()/180))))*180/pi())*60*1.1515*1.609344)

as distance

FROM `ci_geo`)myTable

WHERE distance <= ".$distance."

LIMIT 15";

你可以看看here进行类似的计算.

你可以阅读更多here

更新:

你必须记住,要计算经度2和经度2,你需要知道:

每个纬度相距约69英里(111公里).范围从赤道的68.703英里(110.567公里)到极地的69.407(111.699公里)不等(由于地球略呈椭圆形).这很方便,因为每分钟(1/60度)大约是一英里.

赤道的经度最宽,为69.172英里(111.321),在极地逐渐缩小为零.在北纬40°或北纬经度之间的距离为53英里(85公里).

所以根据50km大约计算$longitude2 $latitude2:

$longitude2 = $longitude1 + 0.449; //0.449 = 50km/111.321km

$latitude2 = $latitude1 + 0.450; // 0.450 = 50km/111km

标签:php,sql,mysql,range,coordinates

来源: https://codeday.me/bug/20190923/1814938.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现百度地图坐标反查,可以使用百度地图 JavaScript API。具体实现步骤如下: 1. 在 HTML 文件中引入百度地图 JavaScript API: ```html <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> ``` 其中,您需要将“您的密钥”替换为您在百度地图开放平台申请的密钥。 2. 创建地图容器: ```html <div id="map"></div> ``` 在 JavaScript 文件中,可以使用以下代码创建地图: ```javascript var map = new BMap.Map("map"); // 创建地图实例 var point = new BMap.Point(116.404, 39.915); // 创建点坐标 map.centerAndZoom(point, 15); // 初始化地图,设置中心点和缩放级别 ``` 3. 添加地图控件: ```javascript map.addControl(new BMap.NavigationControl()); // 添加平移缩放控件 map.addControl(new BMap.ScaleControl()); // 添加比例尺控件 map.addControl(new BMap.OverviewMapControl()); // 添加缩略地图控件 map.addControl(new BMap.MapTypeControl()); // 添加地图类型控件 ``` 4. 实现坐标反查功能: ```javascript var geoc = new BMap.Geocoder(); // 创建地址解析器实例 map.addEventListener("click", function(e) { var pt = e.point; // 获取点击的地理坐标 geoc.getLocation(pt, function(rs) { var addComp = rs.addressComponents; // 获取地址组成部分 var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber; // 拼接地址 alert(address); // 弹出反查结果 }); }); ``` 上述代码中,通过添加地图的 click 事件监听器,获取用户点击的地理坐标,然后调用地址解析器实例的 getLocation 方法获取该坐标对应的地址信息,并拼接成完整的地址字符串,最后弹出反查结果。 以上就是实现百度地图坐标反查的基本步骤。需要注意的是,使用百度地图 JavaScript API 需要申请密钥,并且需要在使用之前引入 API 文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值