因为我的另一个问题没有成功 (How to extend polygon by a certain distance in PHP/Mysql?),我正在考虑找一个更简单的解决方案。
我有一个地方表(由lat和lng定义)和一个位置表(多边形存储为几何)。我需要的是在多边形+特定半径(例如1/4英里)内搜索mysql中的记录。
有一个函数ST_Centroid用于获取多边形的中心点但是如何获得中心点和最远点之间的距离以获得圆的扩展半径?
答案 0 :(得分:0)
圆是最简单的解决方案,如何扩展多边形,但总比没有好。
这是获取多边形最远点的计算。 $ polygon 和 $ centroid 取自数据库(在mysql: ST_AsText(polygon),ST_AsText(ST_Centroid(polygon)))并转换为阵列。
function get_max_point ($polygon,$centroid) {
foreach ($polygon AS $point) {
$distance = (sin(deg2rad($centroid['lat'])) * sin(deg2rad($point['lat']))) + (cos(deg2rad($centroid['lat'])) * cos(deg2rad($point['lat'])) * cos(deg2rad($centroid['lng'] - $point['lng'])));
$distance = acos($distance);
$distance = rad2deg($distance);
$distance = $distance * 60 * 1.152;
if($distance>$distance_max) $distance_max=$distance;
}
return (round($distance_max,2));
}