在 Loopback 4 中处理 GeoLocation 并存储为 MySQL 点
Posted
技术标签:
【中文标题】在 Loopback 4 中处理 GeoLocation 并存储为 MySQL 点【英文标题】:Prcoessing GeoLocation in Loopback 4 and storing as MySQL point 【发布时间】:2021-08-31 22:07:24 【问题描述】:我的 MySQL 数据库将地理位置坐标存储为空间数据类型Point
。
我需要我的环回 4 (lb4) 才能处理这种属性类型。
根据documentation,lb4 有GeoPoint
类型,经过一番研究我发现它不受支持(参见issue #1981)。
我还进行了测试,可以确认 lb4 无法识别 GeoPoint
类型,并且在 @property
装饰器 type: 'geopoint'
中定义时,它也无法识别该类型。
我的问题是:如何在环回 4 中处理地理位置数据,而我的 mysql 数据库将其存储为空间类型 Point
?
@model()
export class SomeEntity extends Entity
@property(
type: 'geopoint', // does not recognize
required: true,
mysql:
dataType: 'point',
,
)
coordinate: GeoPoint; // is not defined
【问题讨论】:
【参考方案1】:此后我在 Loopback slack 频道上与一些乐于助人的人交谈,还发现 GeoPoint 似乎不起作用,但是以下允许我在 Mysql 中创建 Point 数据类型字段
@property(
type: 'object',
mysql:
dataType: 'point',
,
)
latlng: point;
最后需要定义导出点
export interface point
lat: number;
lng: number;
所以我的整个模型看起来像这样......
import Entity, model, property from '@loopback/repository';
import moment from 'moment';
@model(settings: strict: false)
export class Location extends Entity
@property(
type: 'number',
id: true,
generated: true,
)
id: number;
@property(
type: 'string',
)
addr1: string;
@property(
type: 'string',
)
addr2: string;
@property(
type: 'string',
)
city: string;
@property(
type: 'string',
)
region: string;
@property(
type: 'string',
)
postcode: string;
@property(
type: 'string',
)
country: string;
// NEW PROPERTY ..........................
@property(
type: 'object',
mysql:
dataType: 'point',
,
)
latlng: point;
@property(
type: 'number',
)
display_ix: number;
@property(
type: 'date',
defaultFn: 'now',
)
created_date: string;
@property(
type: 'number',
required: false,
)
created_by: number;
@property(
type: 'date',
defaultFn: 'now',
)
modified_date: string;
@property(
type: 'number',
required: false,
)
modified_by: number;
constructor(data?: Partial<Location>)
super(data);
// NEW EXPORT ..........................
export interface point
lat: number;
lng: number;
export interface LocationRelations
// describe navigational properties here
export type LocationWithRelations = Location & LocationRelations;
我希望这会有所帮助...正如您所见,它已管理 mysql 中的新点属性 see mysql table screenshot here
【讨论】:
以上是关于在 Loopback 4 中处理 GeoLocation 并存储为 MySQL 点的主要内容,如果未能解决你的问题,请参考以下文章
在 LoopBack 4 中访问 express 应用以添加中间件