Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用Sequelize从几何体(';点';)获取lat/lng坐标?_Sql Server_Node.js_Sequelize.js_Sqlgeography - Fatal编程技术网

Sql server 如何使用Sequelize从几何体(';点';)获取lat/lng坐标?

Sql server 如何使用Sequelize从几何体(';点';)获取lat/lng坐标?,sql-server,node.js,sequelize.js,sqlgeography,Sql Server,Node.js,Sequelize.js,Sqlgeography,我有一个MS SQL数据库,其中包含一个带有某些设备的纬度/经度位置的表。这些位置存储在地理字段中。现在我想用Sequelize从我的节点应用程序中获取这些位置 以下是我的sequelize模型定义: db.define('StationLocation', { StationId: { type: Sequelize.INTEGER }, Position: { type: Sequelize.GEOMETRY('POINT') } } ) 以下是我目前得到的信息: {

我有一个MS SQL数据库,其中包含一个带有某些设备的纬度/经度位置的表。这些位置存储在地理字段中。现在我想用Sequelize从我的节点应用程序中获取这些位置

以下是我的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];

对MSSQL几何图形和地理数据类型的正确支持仍在等待中。但是,Teduous确实为您得到的缓冲区提供了一个解析器:

我创建了一个适配器实用程序,它使用起来相当简单,但只支持以下几点,可以解决任何有相同问题的人的问题:

在模型定义中相应地要求并使用有关代码段描述的更多信息

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
。两者的解析器都不清楚。

您也可以分享您的查询吗?@Tamas:我更新了这个问题。您是否100%肯定该列在数据库中具有正确的数据类型?此外,这是一种不同的方法,也是一种有趣的阅读: