代码如下:
SELECT
ROUND(
6378.138 * 2 * ASIN(SQRT(POW(
SIN((纬度 * PI() / 180 - substring_index(maps, ",", - 1) * PI() / 180) / 2),2) +
COS(纬度 * PI() / 180) * COS(substring_index(maps, ",", - 1) * PI() / 180) *
POW(SIN((经度 * PI() / 180 - substring_index(maps, ",", 1) * PI() / 180) / 2),2))
) * 1000
)
FROM list
ORDER BY distance asc
问题一:上面代码里的经度和纬度是获取用户当前位置的经纬度,我在外面写了个百度提供的接口通过IP地址获取经纬度,分出来两个变量一个是$lat一个是$lng,请问我该如何把这两个变量替换上面代码里的经度和纬度呢?
问题二:还有就是我通过下面代码获取用户IP
function getIP(){
global $ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else $ip = "Unknow";
return $ip;
}
$content = file_get_contents("http://api.map.baidu.com/location/ip?ak=akid&ip=IP地址&coor=bd09ll");我应该怎么把getIP()这个方法写在上面IP地址的位置呢?让它能成功解析IP地址呢?非常感谢!~
3 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
谢邀。
$lat
和 $lon
直接替换到上面拼接字符串即可。
你的sql查询语句在php中使用,自然需要拼接sql语句,把sql当成一个字符串,拼接好之后再query即可。
另外,要看你的经纬度是什么格式,是XXX°XXX′xxx″
形式还是11231.123
形式,前者不支持运算,需要转后者。
其次不建议在数据库查询的时候使用计算,你上面sql中的计算完全可以在php中计算完,直接 查询计算的结果。
第四,初步感觉你的sql有问题,sql直接查询数据,而不是select field from table where xxx = xxx order
,你select的直接select了一个数据。比如 select 1 from table ..
第二个问题拿到ip之后拼接到里面的字符串即可,一样的道理。
- 3 回答
- 0 关注
- 535 浏览
添加回答
举报
0/150
提交
取消