如何使用 Sequelize 从 GEOMETRY('POINT') 获取纬度/经度坐标?
Posted
技术标签:
【中文标题】如何使用 Sequelize 从 GEOMETRY(\'POINT\') 获取纬度/经度坐标?【英文标题】:How to get lat/lng coordinates from GEOMETRY('POINT') with Sequelize?如何使用 Sequelize 从 GEOMETRY('POINT') 获取纬度/经度坐标? 【发布时间】:2017-10-18 12:31:59 【问题描述】:我有一个 MS SQL 数据库,其中包含一个包含某些设备的纬度/经度位置的表。这些位置存储在 GEOGRAPHY 字段中。现在我想使用 Sequelize 从我的节点应用程序中获取这些位置。
这是我的续集模型定义:
db.define('StationLocation',
StationId: type: Sequelize.INTEGER ,
Position: type: Sequelize.GEOMETRY('POINT')
)
这是我目前得到的:
"id":4,
"StationId":1,
"Position":
"type":"Buffer",
"data":[
230,
16,
0,
0,
1,
12,
25,
159,
112,
57,
112,
200,
73,
64,
0,
0,
0,
128,
184,
247,
26,
64
]
如何将其转换为纬度和经度值? Sequelize 能做到这一点吗?
更新:在上面的例子中,位置是这样的:
Latitude: 51.565924816122966
Longitude: 6.741914749145508
这是我的查询:
StationLocation
.findAll( raw: true )
.then(function(allStationLocations)
console.dir(allStationLocations[0].coordinates); // Just for debugging
res.send(JSON.stringify(allStationLocations));
);
这转换为以下 SQL 语句:
SELECT [id], [StationId], [Position] FROM [StationLocations] AS [StationLocation];
【问题讨论】:
您也可以分享您的查询吗? @Tamas:我更新了问题。 您是否 100% 肯定该列在数据库中具有正确的数据类型? 【参考方案1】:对 MSSQL 几何和地理数据类型的适当支持仍有待解决。然而,Tedious 确实为您获得的缓冲区提供了一个解析器:Tediousjs Geoparser
作为一种解决方法,我创建了一个适配器实用程序,它使用起来相当简单,但只支持点:Sequelize MSSQL Adapter
在您的模型定义中要求并相应使用,有关 sn-p 描述的更多信息。
const adapter = require('../utils/sequelize-geodata-adapter');
module.exports = (sequelize, DataType) =>
sequelize.define('MyModel',
// Attributes
location:
type: DataType.GEOGRAPHY('POINT', 4326),
get: function ()
const location = this.getDataValue('location');
if (location)
return adapter.get(location);
,
set: function (value)
if (value === undefined || value === null)
return this.setDataValue('location', value);
this.setDataValue('location', adapter.set(value));
,
validate:
hasCoordinates: adapter.validate
,
...
,
tableName: 'MyModels'
...
);
Setter 支持 GeoJSON 和 Google 风格的 lat, lng
位置格式,getter 始终返回 lat, lng
对象。
在您的特定情况下,您需要在适配器处将 geography::Point
替换为 geometry::Point
,因为您使用的是 GEOMETRY 数据类型。解析器对两者都不清楚。
【讨论】:
另外,这是一种不同的方法和有趣的阅读:Using geo-based data with SequelizeJS以上是关于如何使用 Sequelize 从 GEOMETRY('POINT') 获取纬度/经度坐标?的主要内容,如果未能解决你的问题,请参考以下文章