public Feature [] getMultiHorizons(Map<Point, Set<Integer>> geoTags, int srdsSrcID){
        
        // the returned features object:
        ArrayList<Feature> features = new ArrayList<Feature>();

        // ResultSet objects:
        ResultSet resultSet;
        
        // array of points:
        Point [] points = geoTags.keySet().toArray(new Point[geoTags.size()]);

        try
        {
            // parameterIndex:
            int parameterIndex = 1;
            
            // set parameters of the statements:
            for (Point p : points)
            {
                // x value:
                hPStatement.setInt((parameterIndex++), (p.x));
                
                // y value:
                hPStatement.setInt((parameterIndex++), (p.y));
                
                // src id value:
                //hPStatement.setInt((parameterIndex++), (srdsSrcID+10));//[TEST]
                hPStatement.setInt((parameterIndex++), (srdsSrcID));
                
                // prop id value:
                hPStatement.setInt((parameterIndex++), (HORIZON_PROPERTY_ID));
                
                // prop_val values:
                // first set what's requested in geoTags
                // then fill remaining, if any, with -1:
                int hInd = 0; // horizon index
                for (int propVal : geoTags.get(p)){
                    hPStatement.setInt((parameterIndex++), (propVal));
                    hInd++;
                }
                for (int i=hInd; i < this.numOfHorizons; i++)
                    hPStatement.setInt((parameterIndex++), (-1));
                
                // go to next point
            }
            
            // if points (geo-tags) are less than the multi-statement length,
            // set remaining parameters to 0, -1:
            for (int p=geoTags.size(); p < (this.multiStatementLength); p++)
            {
                // x value:
                hPStatement.setInt((parameterIndex++), (0));
                
                // y value:
                hPStatement.setInt((parameterIndex++), (0));
                
                // src id value:
                hPStatement.setInt((parameterIndex++), (-1));
                
                // prop id value:
                hPStatement.setInt((parameterIndex++), (-1));
                
                // prop_val values:
                for (int i=0; i < this.numOfHorizons; i++)
                    hPStatement.setInt((parameterIndex++), (-1));
                
                // go to next point
                
            }//for
            
            // run the multiple query in one go:
            hPStatement.execute();

            // get resultSet for each statement
            for (Point p : points)
            {
                // get result set:
                resultSet = hPStatement.getResultSet();

                // move on rows
                while(resultSet.next())
                {
                    // get prop_val:
                    int propVal = resultSet.getInt(1);
                    
                    // get two-way-travel-time (TWT)
                    int twt = resultSet.getInt(2);
                    
                    // create a Feature object with prop_val as its id:
                    Feature f = new Feature (p.x, p.y, propVal);
                    
                    // add twt to this feature:
                    f.addW(twt);
                    
                    // add this feature to the feature array list:
                    features.add(f);
                }//if
                
                // move to next result set:
                hPStatement.getMoreResults();
            }   
            
        }//try

        catch(SQLException ex)
        {
            // A SQLException was generated.  Catch it and display
            // the error information.
            // Note that there could be multiple error objects chained
            // together.
            System.out.println();
            System.out.println("*** SQLException caught ***");

            while (ex != null)
            {
                System.out.println(" Error code: " + ex.getErrorCode());
                System.out.println(" SQL State: " + ex.getSQLState());
                System.out.println(" Message: " + ex.getMessage());
                //ex.printStackTrace();
                System.out.println();
                ex = ex.getNextException();
            }

            throw new IllegalStateException ("Sample failed.") ;

        }//catch

        // return traces array
        return features.toArray(new Feature[0]);
    }//getMultiHorizons