PHP 无序经纬度极角排序
时间: 2023-02-08 17:22:50 浏览: 67
在 PHP 中,可以使用 usort() 函数进行无序经纬度极角排序。首先需要定义一个自定义比较函数,该函数需要返回两个经纬度之间的极角差值,然后将该函数作为参数传递给 usort() 函数。usort() 函数会根据这个自定义函数对数组中的元素进行排序。
示例代码如下:
```
$points = array(
array("lat" => 25.774, "lng" => -80.190),
array("lat" => 18.466, "lng" => -66.118),
array("lat" => 32.321, "lng" => -64.757),
array("lat" => 25.774, "lng" => -80.190)
);
function compareLatLng($a, $b) {
$a = deg2rad($a["lat"]) * cos(deg2rad($a["lng"]));
$b = deg2rad($b["lat"]) * cos(deg2rad($b["lng"]));
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
usort($points, "compareLatLng");
```
这样就可以得到按照极角排序的点集了。
相关问题
PHP 多边型无序点经纬度极角排序
### 回答1:
可以使用 PHP 的 usort() 函数来实现多边形无序点的经纬度极角排序。首先需要定义一个比较函数,该函数接受两个参数,分别为两个点的经纬度,在函数中计算这两个点的极角并比较,返回 -1、0 或 1 。然后调用 usort() 函数将多边形的点按照极角进行排序。
代码示例:
```
function compare($a, $b) {
$angle1 = atan2($a['lat'], $a['lng']);
$angle2 = atan2($b['lat'], $b['lng']);
if ($angle1 == $angle2) {
return 0;
}
return ($angle1 < $angle2) ? -1 : 1;
}
usort($points, "compare");
```
其中 $points 是一个包含多边形无序点的数组,每个点包含两个属性 lat 和 lng 分别表示纬度和经度.
### 回答2:
在PHP中,如果要对多边形的无序点进行经纬度极角排序,可以按照以下步骤进行:
1. 首先,将无序点的经纬度坐标存储在一个数组中。假设数组名为$points。
2. 创建一个新的数组$sortedPoints用于存储排序后的点。
3. 选择一个基准点,可以是多边形中的一个点。
4. 计算每个点相对于基准点的极角,并将极角和点的索引存储在一个辅助数组$angles中。可以使用atan2函数来计算两个点之间的角度。
5. 使用usort函数对$angles数组进行排序,按照极角从小到大的顺序排序。
6. 遍历排序后的$angles数组,根据索引从$points数组中取出对应的点,并将其存储在$sortedPoints数组中。
7. 最后,$sortedPoints数组中存储的就是按照经纬度极角排序后的无序点。
下面是一个示例代码:
```php
function sortPointsByPolarAngle($points) {
$sortedPoints = array();
$basePoint = $points[0]; //选择第一个点作为基准点
$angles = array();
foreach ($points as $index => $point) {
$dx = $point['longitude'] - $basePoint['longitude'];
$dy = $point['latitude'] - $basePoint['latitude'];
$angle = atan2($dy, $dx);
$angles[$index] = array('angle' => $angle, 'pointIndex' => $index);
}
usort($angles, function($a, $b) {
return $a['angle'] - $b['angle'];
});
foreach ($angles as $angle) {
$sortedPoints[] = $points[$angle['pointIndex']];
}
return $sortedPoints;
}
// 调用示例
$points = array(
array('latitude' => 39.9042, 'longitude' => 116.4074), // 北京
array('latitude' => 31.2304, 'longitude' => 121.4737), // 上海
array('latitude' => 23.1291, 'longitude' => 113.2644), // 广州
);
$sortedPoints = sortPointsByPolarAngle($points);
// 输出排序后的点
foreach ($sortedPoints as $point) {
echo 'Latitude: ' . $point['latitude'] . ', Longitude: ' . $point['longitude'] . "\n";
}
```
这样就可以实现对多边形的无序点按照经纬度极角排序的功能。
PHP 无序经纬度距离和极角排序
### 回答1:
可以使用 Haversine 公式来计算两经纬度之间的距离。然后使用 usort 函数对数组进行极角排序。
例如:
```
function haversine_distance($lat1, $lng1, $lat2, $lng2) {
$earth_radius = 6371;
$dLat = deg2rad($lat2 - $lat1);
$dLng = deg2rad($lng2 - $lng1);
$a = sin($dLat/2) * sin($dLat/2) +
cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *
sin($dLng/2) * sin($dLng/2);
$c = 2 * asin(sqrt($a));
$d = $earth_radius * $c;
return $d;
}
$points = array(
array("lat" => 40.748817, "lng" => -73.985428),
array("lat" => 41.748817, "lng" => -73.985428),
array("lat" => 40.748817, "lng" => -74.985428),
);
$origin = array("lat" => 40.785091, "lng" => -73.968285);
usort($points, function($a, $b) use ($origin) {
$distanceToA = haversine_distance($origin["lat"], $origin["lng"], $a["lat"], $a["lng"]);
$distanceToB = haversine_distance($origin["lat"], $origin["lng"], $b["lat"], $b["lng"]);
return $distanceToA <=> $distanceToB;
});
```
### 回答2:
PHP 无序经纬度距离和极角排序是一种处理经纬度数据的方法。在实际应用中,我们经常需要计算两个坐标点之间的距离或者对坐标点进行排序。下面我将详细介绍PHP中的实现方法。
对于无序经纬度之间的距离计算,可以使用Haversine公式。它是一种常用算法,基于球面三角形来计算地球上两个坐标点之间的距离。通过给定两个坐标点的经纬度,可以使用Haversine公式计算它们之间的距离。具体的计算公式可以参考相关文档和代码库。
而对于无序经纬度数据的极角排序,主要是通过计算坐标点与一个参考点之间的方位角(也称为极角)来进行排序。首先,我们需要选定一个参考点,然后计算其他点与该参考点的方位角。可以使用反正切函数或者其他相关的数学方法来计算方位角。一旦得到所有点的方位角,就可以按照一定的规则进行排序,如逆时针排序或者顺时针排序。
实现以上功能,可以使用PHP中的数学函数和相关算法库,如sin、cos、atan2等方法来计算距离和方位角。同时,使用排序算法可以对方位角进行排序。
总结来说,PHP无序经纬度距离和极角排序的实现可以通过Haversine公式和数学函数来计算距离和方位角,并使用相关的排序算法对方位角进行排序。这样可以对经纬度数据进行有效的处理和分析。
### 回答3:
PHP 可以使用 Haversine 公式来计算两个地理坐标之间的距离。Haversine 公式是一种常用的计算球面上两点之间距离的方法,其基本原理是根据经纬度计算出两点之间的球面距离。
PHP 中可以通过封装一个函数来实现 Haversine 公式的计算。该函数需要传入两个经纬度参数,分别表示两个地点的位置坐标(经度和纬度),然后计算出两地之间的距离并返回结果。
在计算好多个地点之间的距离后,可以使用 PHP 自带的排序函数对经纬度距离结果进行排序。根据需求,可以选择按照距离升序或降序进行排序。例如,可以使用 `sort()` 函数对距离结果进行升序排序。
关于极角排序,可以使用 `usort()` 函数来进行排序。需要自定义一个比较函数,根据地点的经纬度坐标来计算每个地点的极角(弧度形式),然后按照极角进行排序。比较函数需要判断两个地点之间的极角大小来确定它们的相对顺序。
综上所述,PHP 可以通过编写函数来计算经纬度之间的距离,并使用自带的排序函数对距离结果进行排序。对于极角排序,需要自定义比较函数并根据经纬度坐标计算每个地点的极角,然后进行排序。这样可以实现无序的经纬度距离和极角排序功能。