-2

위도 및 경도 값이있는 위치 배열을 가지며 배열의 좌표가 중간에있는 위치 (중간 값)를 찾고 싶습니다.PHP - 위도 경도가있는 배열의 중 심도 찾기

$location = []; 
$location[0] = []; 
$location[0]['name'] = 'Valencia'; 
$location[0]['latitude'] = 39.46990750; 
$location[0]['longitude'] = -0.37628810; 
$location[1] = []; 
$location[1]['name'] = 'Alanya'; 
$location[1]['latitude'] = 36.54444300; 
$location[1]['longitude'] = 31.99540800; 
$location[2] = []; 
$location[2]['name'] = 'Side'; 
$location[2]['latitude'] = 36.77687300; 
$location[2]['longitude'] = 31.39764400; 
$location[2] = []; 
$location[3]['name'] = 'Miami'; 
$location[3]['latitude'] = 25.79065400; 
$location[3]['longitude'] = -80.13004550; 
$location[4] = []; 
$location[4]['name'] = 'Albufeira'; 
$location[4]['latitude'] = 37.08907190; 
$location[4]['longitude'] = -8.24787960; 

가 어떻게 위도/경도의 평균을 계산하고 PHP를 사용하여 연결된 위치의 이름을 찾을 수 있습니다 :이처럼 보이는 배열이 있다고 가정?

답변

2

배열 열을 사용하여 배열의 위도와 경도를 분리 할 수 ​​있습니다.
새 배열을 정렬하고 중간 값을 가져옵니다.

$lat = array_column($location, "latitude"); 
$lon = array_column($location, "longitude"); 
Sort($lon); 
Sort($lat); 


Echo "median lat " . $lat[round((count($lat)-1)/2,0)] . "\n"; 
Echo "median lon " . $lon[round((count($lon)-1)/2,0)] . "\n"; 

https://3v4l.org/p5aLZ


나는 지금 내가 질문을 잘못 이해했을 수 있음을 참조하십시오. 중간에있는 전체 하위 배열을 원하십니까?

이것이 맞는지 확실하지 않지만 lat와 lon을 계산하면 lat와 lon과 관련된 숫자를 얻을 수 있습니다.
그런 다음 계산 된 값을 모두 가져 와서 두 개의 배열로 저장합니다. 하나는 참조로 유지되고 다른 하나는 정렬됩니다.

그런 다음 정렬 된 배열에서 가운데 ​​값을 가져 와서 계산 된 값의 참조 배열에서 array_search에 사용합니다.
배열을 정렬하기 전에 중간 값이 인 키를 반환합니다.
그런 다음 그 열쇠의 하위 배열을 잡습니다.

Foreach($location as &$loc){ 
    $loc["calc"] = $loc["latitude"] - $loc["longitude"]; 
} 

$sorted = $calc = array_column($location, "calc"); 
Sort($sorted); 

$key = array_search($sorted[round((count($sorted)-1)/2,0)], $calc); 
$median = $location[$key]; 
Var_dump($median); 

https://3v4l.org/ktnK9