我目前在mysql数据库中的位置不到一百万个,都有经度和纬度信息.
我试图通过查询找到一个点和许多其他点之间的距离.它没有我想要的那么快,尤其是每秒100次点击.
是否有更快的查询或可能比mysql更快的系统?我正在使用此查询:
SELECT
name,
( 3959 * acos( cos( radians(42.290763) ) * cos( radians( locations.lat ) )
* cos( radians(locations.lng) - radians(-71.35368)) + sin(radians(42.290763))
* sin( radians(locations.lat)))) AS distance
FROM locations
WHERE active = 1
HAVING distance < 10
ORDER BY distance;
Run Code Online (Sandbox Code Playgroud)
注意:提供的距离以英里为单位.如果您需要公里数,请使用6371而不是3959.
我有一个工作的PHP脚本,它获取经度和纬度值,然后将它们输入到MySQL查询中.我想把它做成MySQL.这是我目前的PHP代码:
if ($distance != "Any" && $customer_zip != "") { //get the great circle distance
//get the origin zip code info
$zip_sql = "SELECT * FROM zip_code WHERE zip_code = '$customer_zip'";
$result = mysql_query($zip_sql);
$row = mysql_fetch_array($result);
$origin_lat = $row['lat'];
$origin_lon = $row['lon'];
//get the range
$lat_range = $distance/69.172;
$lon_range = abs($distance/(cos($details[0]) * 69.172));
$min_lat = number_format($origin_lat - $lat_range, "4", ".", "");
$max_lat = number_format($origin_lat + $lat_range, "4", ".", "");
$min_lon = number_format($origin_lon - $lon_range, "4", ".", "");
$max_lon = …Run Code Online (Sandbox Code Playgroud) 我正在写一个网站,主要是在一个纬度25英里范围内寻找地方,长期使用php和mysql.
我想知道这样的事情会怎么样?
我会将一个lat和long传递给该脚本,并且只从位于我的数据库位置的纬度25英里内的位置拉出它.
做这个的最好方式是什么?
编辑:我发现这个代码用于计算2点之间的距离.
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在MYSQL查找中执行此计算,这样我只能在里程= <25时返回?
我有一个包含纬度和经度值的MySQL表.我想玩MySQL 5中的空间内容,只是为了看看它是如何工作的.
但是,我遇到一个真正的问题,就是从现有值中获取点数据.我正在尝试这样的事情,但它在我尝试的每种格式中都出现语法错误.有人能指出正确的方法吗?
UPDATE locationtable a SET geopoint = GeomFromText( POINT() a.latitude a.longitude ) WHERE 1
Run Code Online (Sandbox Code Playgroud)
我也尝试过其他变种,包括:
UPDATE locationtable a SET geopoint = GeomFromText( 'POINT()' a.latitude a.longitude ) WHERE 1
UPDATE locationtable a SET geopoint = GeomFromText( 'POINT() a.latitude a.longitude' ) WHERE 1
Run Code Online (Sandbox Code Playgroud)
和别的…
mysql ×4
geolocation ×2
php ×2
geometry ×1
geospatial ×1
gis ×1
great-circle ×1
html5 ×1
location ×1