Подтвердить что ты не робот

Как вставить точку PostGIS GEOMETRY в Sequelize ORM?

Я пытаюсь вставить строку в таблицу со столбцом геометрии в Sequelize.js ORM. У меня есть широта, долгота и высота, и мне нужно сначала преобразовать ее в точку, чтобы я мог вставить ее в геометрию.

Хранимая процедура PostGIS, которая выполняет преобразование,

ST_MakePoint( longitude, latitude, altitude ) 

Вставить строку Я использую функцию sequelize model.create

models.Data.create({    
  location: "ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")", // PSUEDO code, How can I call this function?
  speed: request.params.spd,
  azimuth: request.params.azi,
  accuracy: request.params.acc
});

Теперь то, что я хочу сделать, это сделать поле location иметь возвращаемый результат "ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")", когда я вставляю строку.

Как я могу это сделать?

4b9b3361

Ответ 1

Развернувшись на l0oky-ответе, в тесте интеграции есть много хороших подсказок о том, как использовать json с различными типами геометрии. В принципе, кажется, что sequelize будет строгать предоставленный объект геометрии, предполагая, что он действительно GeoJSON и pipe, который входит в функцию PostGIS ST_GeomFromGeoJSON. Поэтому для геометрических объектов можно просто выполнить спецификацию GeoJSON.

Очки:

var point = { type: 'Point', coordinates: [39.807222,-76.984722]};

User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});

объект LineString:

var line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] };

User.create({username: 'username', geometry: line }).then(function(newUser) {
...
});

Полигоны:

var polygon = { type: 'Polygon', coordinates: [
             [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
               [100.0, 1.0], [100.0, 0.0] ]
             ]};

User.create({username: 'username', geometry: polygon }).then(function(newUser) {
...
});

Настройка пользовательского SRID:

var point = { 
  type: 'Point', 
  coordinates: [39.807222,-76.984722],
  crs: { type: 'name', properties: { name: 'EPSG:4326'} }
};

User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});

Ответ 2

После небольшого исследования я обнаружил, что Sequelize 3.5.1 (поддерживает GEOMETRY) имеет test, который вставляет Point.

var point = { type: 'Point', coordinates: [39.807222,-76.984722] }; 
return User.create({ username: 'user', email: ['[email protected]'], location: point})

Где location - поле GEOMETRY. Таким образом, мне не нужно вызывать ST_MakePoint вручную, так как заботится о секвестре.