使用 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@",
请帮忙返回正确的值。
响应中返回的是众所周知的二进制文件? 我从未使用过 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;
}