2015-08-17 20 views
12

Ben Sequelize.js ORM bir geometri sütunu olan bir tabloya bir satır eklemek çalışıyorum. Ben enlem, boylam ve yükseklik var ve bir geometri olarak yerleştirin böylece ilk bir noktaya dönüştürmek gerekir.Sequelize ORM'de PostGIS GEOMETRY Noktası nasıl eklenir?

dönüştürme yapar PostGIS saklı yordam ben

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 
}); 

Şimdi ne yapmak istediğiniz alanı yapmak mı sequelize model.create fonksiyonunu kullanıyorum bir satır ekler için

ST_MakePoint(longitude, latitude, altitude) 

olduğunu Satırı eklediğimde location"ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")" döndürülen sonucu var.

Bunu nasıl yapabilirim?

cevap

17

l0oky'nin yanıtını genişleten integration test, jsonun farklı Geometri türleri ile nasıl kullanıldığına dair pek çok iyi ipucu içeriyor. Temel olarak, sequelize sağlanan bir geometri objesi, geçerli GeoJSON ve boru olduğunu varsayarak stringify olacağı görünen PostGIS fonksiyonu ST_GeomFromGeoJSON içine. Bu nedenle, geometri nesneleri için GeoJSON spec'u takip edebilirsiniz.

Puanlar:

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

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

LineStrings:

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

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

Çokgenler:

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) { 
... 
}); 

Ayar özel bir 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) { 
... 
}); 
1

Biraz araştırma yaptıktan sonra, Sequelize 3.5.1'in (GEOMETRY'yi destekliyor), Point'u ekleyen test olduğunu öğrendim. location bir GEOMETRİ alanını olduğu

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

. Bu şekilde, ST_MakePoint numaralı telefonu aramam gerekmiyor, sıralı hale getirme bununla ilgileniyor.