我有一个成千上万条记录的数据库,每个记录包含GIS格式的几个坐标。 我需要将所有这些点(一次)转换为经度/纬度点。
我该如何实现?
我已经手动尝试过这个online gis converter 但根据前几对数据gis: lat_gis:40°29'02,70''long_gis:16°28'60,00'' 给出错误,该秒数必须小于60(<60) 初始数据有误吗?
这是更聪明,更快捷的方式吗?
答案 0 :(得分:2)
您可能需要这样的字符串转换函数:
<?php
function gis2dec(string $string): string {
$string = str_replace(',', '.', $string);
if (preg_match('#^((\d+(\.\d+|))°)((\d+(\.\d+|))(′|\')|)((\d+(\.\d+|))(″|"|′′|\'\')|)(|\s*([NESW]))$#', $string, $matches)) {
$sign = 1;
switch (strtoupper($matches[13])) {
case 'S':
case 'W':
$sign = -1;
break;
}
return $sign * ($matches[2] + ((float) ($matches[5] ?? 0)) / 60 + ((float) ($matches[9] ?? 0)) / 3600);
}
return (string) $string;
}
var_dump(gis2dec("40°29'02,70''"));
var_dump(gis2dec("16°28'60,00''"));
var_dump(gis2dec("40°29'02,70'' S"));
var_dump(gis2dec("16°28'60,00'' W"));
输出:
string(15) "40.484083333333"
string(15) "16.483333333333"
string(16) "-40.484083333333"
string(16) "-16.483333333333"