Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

भू-स्थानिक क्वेरी को अनुक्रमित करें:किसी स्थान के निकटतम बिंदु खोजें

जब आप sequelize.fn . को घेर लेते हैं कोष्ठक के साथ, आपको एक उपनाम के रूप में एक स्ट्रिंग भी शामिल करनी होगी:

[sequelize.fn('ST_Distance_Sphere', sequelize.literal('geolocation'), location), 'ALIASNAME']

साथ ही, ST_Distance को बदलने का प्रयास करें से ST_Distance_Sphere . तक . तो:

    const location = sequelize.literal(`ST_GeomFromText('POINT(${lng} ${lat})', 4326)`);

    User.findAll({
      attributes: [[sequelize.fn('ST_Distance_Sphere', sequelize.literal('geolocation'), location),'distance']],
      order: 'distance',
      limit: 10,
      logging: console.log
    })
    .then(function(instance){
      console.log(instance);
    })

यह वास्तव में मेरे लिए काम कर रहा है। obs:सुनिश्चित करें कि आप 'उपयोगकर्ता' को उस मॉडल से प्रतिस्थापित करते हैं जिसमें आपके पास ज्यामिति डेटा प्रकार है।

अपडेट करें: यदि आप अभी भी order: 'distance' . का उपयोग करके आदेश नहीं दे सकते हैं , हो सकता है कि आपको इसे एक var में घोषित करना चाहिए और order: distance . का उपयोग करना चाहिए बिना उद्धरण के, इस तरह:

    var lat = parseFloat(json.lat);
    var lng = parseFloat(json.lng);
    var attributes = Object.keys(User.attributes);

    var location = sequelize.literal(`ST_GeomFromText('POINT(${lng} ${lat})')`);
    var distance = sequelize.fn('ST_Distance_Sphere', sequelize.literal('geolocation'), location);
    attributes.push([distance,'distance']);

    var query = {
      attributes: attributes,
      order: distance,
      include: {model: Address, as: 'address'},
      where: sequelize.where(distance, {$lte: maxDistance}),
      logging: console.log
    }

दूरी सटीकता पर अपडेट:

सरिकाया . द्वारा उल्लिखित समाधान अधिक सटीक प्रतीत होता है। पोस्टग्रेज़ का उपयोग करके इसे करने का तरीका यहां दिया गया है:

var distance = sequelize.literal("6371 * acos(cos(radians("+lat+")) * cos(radians(ST_X(location))) * cos(radians("+lng+") - radians(ST_Y(location))) + sin(radians("+lat+")) * sin(radians(ST_X(location))))");


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में InnoDB और MyISAM क्या है?

  2. Django एकाधिक डेटाबेस फॉलबैक मास्टर के लिए अगर गुलाम नीचे है

  3. MySQL प्रतिकृति और GTID- आधारित विफलता - त्रुटिपूर्ण लेन-देन में एक गहरा गोता

  4. अल्पविराम सूची में MySQL खोज

  5. PHP ऐप की सेटिंग्स को स्टोर करने का सबसे अच्छा तरीका?