laravel 获取几何值

gk7wooem  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(101)

使用Laravel 8 + Voyager + Swagger如说明https://voyager-docs.devdojo.com/v/1.1/customization/coordinates-使用点列的几何类型

Schema::create('offices', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('address')->nullable();
            $table->geometry('points')->nullable();
            $table->timestamps();
        });

但在API响应中出现错误-

mb_convert_encoding(\DB::raw($this->attributes['points']), 'UTF-8'); - return 
"points": "\u0000\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000??\u0010??bR??Ng???D@",

请帮助返回正确的值。

sxissh06

sxissh061#

在响应中返回一个已知的二进制?我从未使用过Voyager或Swagger,但是,要在Laravel中使用几何字段中的坐标,可以使用的一个选项是访问器/突变器。
获取坐标数组的简单方法是使用ST_AsGeoJSON函数将字段作为GeoJSON获取,然后使用json_decode返回坐标字段。
这样的东西可以返回坐标:

public function getPointsAttribute($value)
    {
        $result = DB::table('offices')
            ->select(DB::raw('ST_AsGeoJSON(points) as points'))
            ->where('id', $this->id)
            ->first();

        $geojson = \json_decode($result->points);
        return $geojson->coordinates;
    }

相关问题