2017-08-26 51 views
5

मैं MongoDB में कई GeoJSON अंक के बीच मार्ग दूरी की गणना कैसे करूं? क्या मेरे पास डेटाबेस क्वेरी हो सकती है जो आइटम को उनके दिनांक फ़ील्ड द्वारा क्रमबद्ध करती है, फिर अंकों के बीच की दूरी की गणना करती है और आखिरकार कुल दूरी की गणना करने के लिए सभी को रकम मिलती है? ,मैं मोंगोडीबी में कई जियोज़सन बिंदुओं के बीच मार्ग दूरी की गणना कैसे करूं?

{ 
_id: 599cfc236ed0d81c98007f66 
tracerId: 59a07ea26ed0d81d78001acd 
loc { 
     type: "2dsphere", 
     coordinates: [ 159.9, -37.92 ] 
    }, 
date: 2017-08-26 00:16:42, 
speed: 58, 
} 
{ 
_id: 59a074d46ed0d81d78001acc 
tracerId: 59a07ea26ed0d81d78001acd 
loc { 
     type: "2dsphere", 
     coordinates: [ 160, -38.20 ] 
    }, 
date: 2017-08-26 00:18:42, 
speed: 75, 
} 
{ 
_id: 59a074d46ed0d81d78ac11cc 
tracerId: 59a07ea26ed0d81d78001acd 
loc { 
     type: "2dsphere", 
     coordinates: [ 160.222, -38.92 ] 
    }, 
date: 2017-08-26 00:20:42, 
speed: 60, 
} 
+0

हाँ गणना करने के लिए। (1) दिनांक फ़ील्ड द्वारा आइटम क्रमबद्ध करें (2) मार्ग दूरी (3) के बीच दूरी की गणना करें, उनमें से सभी मार्ग दूरी की गणना करने के लिए योग करें। इन व्यक्तिगत रूप से देखने की कोशिश करें और जो काम नहीं करता है उसके साथ वापसी करें। – nullpointer

+0

@ nullpointer आपके उत्तर के लिए धन्यवाद, प्रत्येक चरण के लिए अलग-अलग क्वेरी के लिए मैं चरण 1 और 2 कर सकता हूं लेकिन चरण 3 के लिए कोई विचार नहीं है। लेकिन असली मुद्दा यह है कि मैं प्रदर्शन चाहता हूं तो क्या मैं ऐसा नहीं कर सकता एक प्रश्न – mohsenJsh

+0

एक बार जब आप तीनों के साथ काम कर लेंगे, तो हम प्रदर्शन के बारे में सोच सकते हैं, है ना? परेशान होना नहीं चाहते हैं, क्या काम कर रहा है, क्या काम नहीं कर रहा है, इसे सुधारने के लिए प्रश्न में आप किस प्रदर्शन समस्या का सामना कर रहे हैं (इस तरह के विवरण)। – nullpointer

उत्तर

2

के रूप में रूप में अच्छी तरह टिप्पणी में कहा यहाँ एक ऐसी ही तस्वीर आकर्षित करने के लिए जावा का उपयोग कर की कोशिश करेंगे:

यहाँ मेरी डेटा के कुछ उदाहरण हैं।

public class GeoData { 
    String tracerId; 
    Location loc; 
    Date date; 
    Integer speed; 
    ...getters, setters and other overrides 
} 

public class Location { 
    String type; 
    Coordinate coordinates; 
} 

public class Coordinate { 
    double x; 
    double y; 
} 

इस प्रकार यह आगे बढ़ना होगा: col के रूप में अपने डेटाबेस नाम db और संग्रह नाम और GeoData के रूप में दस्तावेज़ प्रकार जो के रूप में तैयार किया जा सकता है मान लिया जाये कि दिनांक फ़ील्ड से

  1. क्रमबद्ध आइटम (मान लें आरोही क्रम) में

    MongoDatabase database = getDatabase("db"); 
    MongoCollection<GeoData> collection = database.getCollection("col", GeoData.class); 
    Bson sortFilter = Filters.eq("date", "1"); //sort ascending 
    List<GeoData> geoData = Lists.newArrayList(collection.find().sort(sortFilter)); 
    
  2. का उपयोग कर अंक के बीच दूरी की गणना

    private static double distanceBetweenCoordinates(Coordinate a, Coordinate b) { 
        return Math.sqrt(Math.pow(b.getX() - a.getX(), 2) + Math.pow(b.getY() - a.getY(),2)); 
    } 
    
  3. योग उन सभी को मार्ग दूरी

    double routeDist = 0.0; 
    for (int i = 0; i < geoData.size()-1; i++) { 
        routeDist += distanceBetweenCoordinates(geoData.get(i+1).getLoc().getCoordinates(), geoData.get(i+1).getLoc().getCoordinates()); 
    } 
    
संबंधित मुद्दे