php mysql point類型進行轉換

2024年12月27日00:04:04 科技 1583

最近項目中用到地理坐標,所以mysql就使用了point類型,當然查詢的時候可以用mysql的空間函數實現,ST_X(p):獲取點 p 的 X 坐標,ST_Y(p):獲取點 p 的 Y 坐標。

但我覺得還是用php實現好點,讓它自動轉換,因為我用的thinkphp,在 ThinkPHP 框架中,get+字段名+Attr 是一種用於定義模型屬性訪問器(Accessor)的方法。屬性訪問器允許你在獲取模型屬性時對數據進行自定義處理。這種機制通常用于格式化數據、轉換數據類型或進行其他數據處理操作。

我的location字段保存了地理坐標,所以我在模型層定義了一個getLocationAttr方法,讓它自動轉換,實現方法如下,希望有相同需求的人可以用上

    public function getLocationAttr($point): array
    {
        $offset = 4;  // 跳過前 4 個字節
        $byteOrder = ord($point[$offset]);
        $srid = unpack($byteOrder === 1 ? 'V' : 'N', substr($point, $offset + 1, 4))[1]; // 使用 'V' 解包小端序,'N' 解包大端序
        if ($srid !== 1) { // 1 表示 Point 類型
            return [
                'longitude' => null,
                'latitude' => null
            ];
        }
        $offset += 5; // 1 字節字節序 + 4 字節幾何類型
        if ($byteOrder === 1) {
            $x = unpack('d', substr($point, $offset, 8))[1];
            $y = unpack('d', substr($point, $offset + 8, 8))[1];
        } else { // 大端序
            $x = unpack('d', strrev(substr($point, $offset, 8)))[1];
            $y = unpack('d', strrev(substr($point, $offset + 8, 8)))[1];
        }
        return [
            'longitude' => $x,
            'latitude' => $y,
        ];
    }


php mysql point類型進行轉換 - 天天要聞

查詢出來location自動轉換


php mysql point類型進行轉換 - 天天要聞

php mysql point類型進行轉換 - 天天要聞

php mysql point類型進行轉換 - 天天要聞

php mysql point類型進行轉換 - 天天要聞

科技分類資訊推薦

微信右上角的加號,原來這麼好用,隱藏着4個實用功能 - 天天要聞

微信右上角的加號,原來這麼好用,隱藏着4個實用功能

微信右上角的加號原來這麼好用,還隱藏着四個實用功能,真的是太好用了。在使用微信聊天的時候會發現在聊天頁面右上角有一個加號,平常都知道打開之後可以掃一掃付款,也可以掃一掃添加好友。除了這幾個用途之外,其實右上角的加號還隱藏着四個非常實用的小功
最後的幻覺:小米為何仍不肯離開印度? - 天天要聞

最後的幻覺:小米為何仍不肯離開印度?

撰文 泰坦在全球化與地緣政治交織的棋盤上,小米正在印度進行一場越來越艱難的“持久戰”。面對印度政府的高壓政策、巨額罰款和持續的技術圍堵,小米的處境已形同“戰略圍困”。然而,令人疑惑的是,儘管盈利被嚴重壓縮、市場份額下滑、前景黯淡,小米依然沒
央視曝光:大眾點評給刷好評開綠燈 - 天天要聞

央視曝光:大眾點評給刷好評開綠燈

記者接到消費者反映,他們在網絡平台上吐槽某商品不好用的差評帖,莫名其妙就消失了。並且發現在好多直播電商平台的差評區里,充斥的竟然都是各種好評和誇誇帖。究竟是誰,在互聯網各大平台上操控輿情,興風作浪呢?