gis点批量转换为经/纬度

时间:2019-09-20 09:25:26

标签: php mysql database gis latitude-longitude

我有一个成千上万条记录的数据库,每个记录包含GIS格式的几个坐标。 我需要将所有这些点(一次)转换为经度/纬度点。

我该如何实现?

  • php?
  • mysql?-> sql
  • 脚本?

我已经手动尝试过这个online gis converter 但根据前几对数据gis: lat_gis:40°29'02,70''long_gis:16°28'60,00'' 给出错误,该秒数必须小于60(<60) 初始数据有误吗?

这是更聪明,更快捷的方式吗?

1 个答案:

答案 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"