php - DD MM.MMM 坐标到 PHP 中的十进制
问题描述
为了使用 Openstreetmap API,我需要将 DDM 坐标转换为十进制 (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;
}
如果有人知道更短/更好的方法,请发布!
推荐阅读
- c# - 水晶报表数据源更新问题
- image-processing - 图像每个像素可以有不同的位和不同的位深度吗
- firebase - 我在使用 firebase 的 android studio 中遇到问题
- azure - Blob 存储帐户的 Azure SAS 令牌不起作用
- jupyter-notebook - 我可以像 Google Colab 一样使用 AWS Sagemaker 吗?
- python - 通过 Selenium 导航下载课程列表
- python - 处理 Brownie FundMe Chainlink 演示和与合约交互的脚本在 Rinkeby 上工作,但不在 Ganache
- tensorboard - 将 Google 的 Tensorboard 连接到 Vertex AI AutoML
- arrays - 是否可以编写一个以整数数组作为参数并返回 C 中数组元素数的函数
- eclipse - Maven 构建无法正确生成文件(War and Ear)