获取几何值

问题描述 投票:0回答:1

使用 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 响应中出现错误 -

enter image description here

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@", 

请帮忙返回正确的值。

laravel laravel-8 voyager
1个回答
0
投票

响应中返回的是众所周知的二进制文件? 我从未使用过 Voyager 或 Swagger,但是,要在 Laravel 中处理几何字段中的坐标,可以使用的一个选项是 Accessors/Mutators。

获取坐标数组的一种简单方法是使用 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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.