@Test
  public void testDistance() {
    double lon1 = 32.32;
    double lat1 = 32.32;
    Transaction tx = graphDb.beginTx();
    String query;
    System.out.println("delete all nodes");
    String deleteQuery = "MATCH n-[r]-() DELETE n, r";
    graphDb.execute(deleteQuery);

    root = PrefixTree.getOrCreateRoot(INDEXLABEL, graphDb);
    Node node = graphDb.createNode();
    node.setProperty(LON, lon1);
    node.setProperty(LAT, lat1);
    List<Node> candidate1 = gendata.insertNode(graphDb, 2, lon1, lat1, 0.1);
    List<Node> candidate2 = gendata.insertNode(graphDb, 2, lon1, lat1, 0.2);

    PrefixTree.addNode(graphDb, root, candidate1.get(0));
    query = "MATCH (n {PrefixTreeRoot:'root'})-[*8..8]-(x {geohash: 'stz030gzmygt'}) RETURN x";
    PrefixTree.addNode(graphDb, root, candidate1.get(1));
    query = "MATCH (n {PrefixTreeRoot:'root'})-[*8..8]-(x {geohash: 'stz00001z0d7'}) RETURN x";
    PrefixTree.addNode(graphDb, root, candidate2.get(0));
    query = "MATCH (n {PrefixTreeRoot:'root'})-[*8..8]-(x {geohash: 'stz0dy31m1hs'}) RETURN x";
    PrefixTree.addNode(graphDb, root, candidate2.get(1));
    query = "MATCH (n {PrefixTreeRoot:'root'})-[*8..8]-(x {geohash: 'stz00s3tzsd0'}) RETURN x";
    //		for (Node can : candidate1) {
    //			PrefixTree.addNode(graphDb, root, can);
    //			query = "MATCH (n {PrefixTreeRoot:'root'})-[*8..8]-(n {geohash: ''}) RETURN x";
    //			getAllNodes(query, "tag");
    //			System.out.println("lat:" + can.getProperty("lat") + " lon:"
    //					+ can.getProperty("lon") + " geohash:" + can.getProperty("geohash") + " dis:" +
    // CalDistance
    //							.calculateDistance((double) can.getProperty("lon"), (double) can.getProperty("lat"),
    // node)
    //					+ " value:" + can);
    //		}
    //		for (Node can : candidate2) {
    //			PrefixTree.addNode(graphDb, root, can);
    //			query = "MATCH (n {PrefixTreeRoot:'root'})-[*8..8]-(x) RETURN x";
    //			getAllNodes(query, "tag");
    //			System.out.println("lat:" + can.getProperty("lat") + " lon:"
    //					+ can.getProperty("lon") + " geohash:" + can.getProperty("geohash") + " dis:" +
    // CalDistance
    //							.calculateDistance((double) can.getProperty("lon"), (double) can.getProperty("lat"),
    // node)
    //					+ " value:" + can);
    //		}

    getWithDistance(20.0, root, node);
    getWithDistance(4.0, root, node);

    tx.close();
    graphDb.shutdown();
  }
 @Test
 public void testAddNode() {
   List<Node> candidate = null;
   List<Node> child = null;
   Transaction tx = graphDb.beginTx();
   try {
     root = PrefixTree.getOrCreateRoot(INDEXLABEL, graphDb);
     candidate = gendata.insertNode(graphDb, 1, false);
     PrefixTree.addNode(graphDb, root, candidate.get(0));
     child = PrefixTree.getChild((String) candidate.get(0).getProperty(GEOHASH), root, 7);
     assertTrue(candidate.get(0).getProperty(GEOHASH) == child.get(0).getProperty(GEOHASH));
   } catch (Exception e) {
     System.out.println(e);
   } finally {
     tx.close();
   }
   graphDb.shutdown();
 }
Пример #3
0
 /** Given an input string, level, and optionally a tag length, find a matching prefix. */
 private PrefixMatch findPrefixMatch(
     String input, TagLengthList tagLength, LevelTypeList level_type) {
   List<PrefixMatch> match_list = new ArrayList<PrefixMatch>();
   PrefixTree<PrefixMatch> tree = prefix_tree_map.get(level_type);
   assert tree != null;
   List<PrefixMatch> list = tree.search(input);
   if (!list.isEmpty()) {
     if (tagLength == null) match_list.addAll(list);
     else {
       for (PrefixMatch match : list)
         if (match.getScheme().getTagLength() == tagLength) match_list.add(match);
     }
   }
   if (match_list.isEmpty())
     throw new TDTException("No schemes or levels matched the input value");
   else if (match_list.size() > 1)
     throw new TDTException("More than one scheme/level matched the input value");
   else return match_list.get(0);
 }
 @Test
 public void testDeleteNode() {
   Transaction tx = graphDb.beginTx();
   String query = "MATCH n-[r]-() DELETE n, r";
   graphDb.execute(query);
   query = "MATCH (n) WHERE HAS (n.geohash) DELETE n";
   graphDb.execute(query);
   root = PrefixTree.getOrCreateRoot(INDEXLABEL, graphDb);
   List<Node> candidate = gendata.insertNode(graphDb, 10, true);
   for (Node node : candidate) {
     PrefixTree.addNode(graphDb, root, node);
   }
   List<Node> child = PrefixTree.getChild((String) candidate.get(0).getProperty(GEOHASH), root, 7);
   assertTrue(candidate.get(0).getProperty(GEOHASH) == child.get(0).getProperty(GEOHASH));
   PrefixTree.deleteNode(candidate.get(0));
   child = PrefixTree.getChild((String) candidate.get(0).getProperty(GEOHASH), root, 7);
   assertEquals(child.size(), 0);
   tx.close();
   graphDb.shutdown();
 }
Пример #5
0
  /** initialise various indices */
  private void initFromTDT(EpcTagDataTranslation tdt) {
    Scheme[] scheme = tdt.getScheme();
    for (Scheme ss : scheme) {

      // create an index so that we can find a scheme based on tag length

      for (Level level : ss.getLevel()) {
        String s = level.getPrefixMatch();
        if (s != null) {
          // insert into prefix tree according to level type.
          PrefixTree<PrefixMatch> prefix_tree = prefix_tree_map.get(level.getType());
          if (prefix_tree == null) {
            prefix_tree = new PrefixTree<PrefixMatch>();
            prefix_tree_map.put(level.getType(), prefix_tree);
          }
          prefix_tree.insert(s, new PrefixMatch(ss, level));
        }
      }
    }
  }
  @Test
  public void testUpdateNode() {
    double lon = -139.12;
    double lat = -45.24;
    Transaction tx = graphDb.beginTx();
    String query = "MATCH n-[r]-() DELETE n, r";
    graphDb.execute(query);
    query = "MATCH (n) WHERE HAS (n.geohash) DELETE n";
    graphDb.execute(query);
    root = PrefixTree.getOrCreateRoot(INDEXLABEL, graphDb);
    List<Node> candidate = gendata.insertNode(graphDb, 10, true);
    for (Node node : candidate) {
      PrefixTree.addNode(graphDb, root, node);
    }

    String geoHashPre = (String) candidate.get(0).getProperty(GEOHASH);
    String geoHashCur = GeoHash.getHash(lon, lat);
    List<Node> child = PrefixTree.getChild(geoHashPre, root, 7);
    assertEquals(child.size(), 1);
    PrefixTree.updateNode(graphDb, root, candidate.get(0), lon, lat);
    child = PrefixTree.getChild(geoHashPre, root, 7);
    assertEquals(child.size(), 0);
    child = PrefixTree.getChild(geoHashCur, root, 7);
    assertEquals(child.size(), 1);
    tx.close();
    graphDb.shutdown();
  }
 public void getWithDistance(double distance, Node root, Node node) {
   System.out.println("test distance");
   Iterator<Node> neighbors = PrefixTree.withinDistance(root, node, distance).iterator();
   print(neighbors, node);
 }