DD MM.MMM坐标为PHP中的Decimal



使用Openstreetmap API需要将DDM坐标转换为Decimal(DD(,但在互联网上找不到解决方案。

示例:我想转换";N51°8.080、E11°33.313";至";51.134664 11.555220〃;。

我只是试了一些类似的东西:

$longitude = $degreesLong+((($minutesLong*60)+($secondsLong))/3600);
$latitude = $degreesLat + ((($minutesLat * 60) + ($secondsLat)) / 3600);

但是这个公式不正确。。。

有人能帮我吗?

感谢

在网上仔细查看后,我找到了以下解决方案:

// converts DD°MM.mmm to DD coordinates
public function ConvertToDecimal($cmbs){
$convertedArray = [];

foreach ($cmbs as $cmb) {
// degrees
$degreesLong = substr($cmb->longitude, 1, 1);
$degreesLat = substr($cmb->latitude, 1, 2);
// minutes and seconds
$msLong = str_replace('.','',substr($cmb->longitude, 5, 6));
$msLat = str_replace('.','',substr($cmb->latitude, 6, 7));
// converted latitude
$latitude = ($msLat/60);
// if below 100 then add zero
$latitude <100 ? $extra = '.0' :  $extra = '.';
$latitude = str_replace('.', '',$latitude);
$latitude = $degreesLat . $extra .$latitude;
// converted longitude
$longitude = ($msLong/60);
// if below 100 then add zero
$longitude <100 ? $extra = '.0' :  $extra = '.';
$longitude = str_replace('.', '',$longitude);
$longitude = $degreesLong . $extra .$longitude;
array_push($convertedArray, [
'name' => $cmb->name, 'lng' => $longitude, 'lat' => $latitude, 'gc_code' => $cmb->gc_code,
'picture' => $cmb->picture]);
}

return $convertedArray;
}

如果有人知道更短/更好的方法,就发帖吧!

最新更新