Rising Sun

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            148 隨筆 :: 0 文章 :: 22 評論 :: 0 Trackbacks
          1、創(chuàng)建索引   
          -------------------------------------------------------------------------------------------
          GeohashPrefixTree grid = new GeohashPrefixTree(ctx, 12);//< 1 meter == 11 maxLevels
                  this.strategy = new RecursivePrefixTreeStrategy(grid, "shape");
                  ((RecursivePrefixTreeStrategy) this.strategy).setDistErrPct(LUCENE_4464_distErrPct);//1% radius (small!)

           String wktstr = clobtoString(map.get("wkt"));//圖形信息
                          String objectid = map.get("objectid").toString();//對象id
                          String name = map.get("name").toString();//對象名稱
                          Shape shape = wktGeoRect(wktstr);
                          Document doc = new Document();
                          doc.add(new StringField("objectidtable", objectid + tableName, Field.Store.YES));
                          doc.add(new StringField("objectid", objectid, Field.Store.YES));
                          doc.add(new StringField("tableName", tableName, Field.Store.YES));
                          doc.add(new StringField("metadataid", mid.toString(), Field.Store.YES));
                          doc.add(new TextField ("title", name, Field.Store.YES));
                          if (shape != null) {
                              for (Field f : strategy.createIndexableFields(shape)) {
                                  doc.add(f);
                              }
                              doc.add(new StoredField(strategy.getFieldName(), ctx.toString(shape)));
                          }
            indexWriter.addDocument(doc);
          ---------------------------------------------------------------
              public Shape wktGeoRect(String wktStr) {
                  JtsGeometry jtsGeom = null;
                  try {
                      if (StringUtils.trim(wktStr.substring(0, wktStr.indexOf("("))).equalsIgnoreCase("POINT")) {
                          wktStr = wktStr.substring(wktStr.indexOf("(") + 1, wktStr.lastIndexOf(")"));
                          String[] point = wktStr.split(" ");
                          return ctx.makePoint(Double.parseDouble(point[0]), Double.parseDouble(point[1]));
                      } else {
                          jtsGeom = (JtsGeometry) ctx.readShape(wktStr);
                      }
                  } catch (Exception e) {
                  }
                  return jtsGeom;
              }
          2、查詢空間索引

             @Test
              public void testshape() throws Exception {
                          JtsSpatialContext ctx = JtsSpatialContext.GEO;
                  Directory directory = new SimpleFSDirectory(new File("D:/platform/spatiallucence"));
                  IndexReader[] indexReaders1 = new IndexReader[]{IndexReader.open(directory)};
                  MultiReader multiReader = new MultiReader(indexReaders1);
                  indexSearcher = new IndexSearcher(multiReader);
                  indexSearcher.setSimilarity(new NoScoreSimilarity());
                  GeohashPrefixTree grid = new GeohashPrefixTree(ctx, 12);//< 1 meter == 11 maxLevels
                  strategy = new RecursivePrefixTreeStrategy(grid, "shape");
                  ((RecursivePrefixTreeStrategy) strategy).setDistErrPct(0.025);//1% radius (small!)
                  //POINT (121.591953019118 28.7566972164043)
                  //Shape shape = ctx.readShape("POINT (121.454715099823 28.860595871703)");
                  Shape shape = ctx.readShape("POLYGON(" +
                          "(121.10836126349 28.84450508816,\n" +
                          "121.12569906256 28.84450508816,\n" +
                          "121.12569906256 28.856950537989,\n" +
                          "121.10836126349 28.856950537989,\n" +
                          "121.10836126349 28.84450508816))");
                  shape = ctx.makeRectangle(121.10836126349d ,121.12569906256d, 28.84450508816d ,28.856950537989d);
                  SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects, shape);
                  args.setDistErrPct(0.025);
                  Query query = strategy.makeQuery(args);
                  TopDocs results = indexSearcher.search(query, 1000);
                  int numTotalHits = results.totalHits;
                  System.out.println("共 " + numTotalHits + " 完全匹配的文檔");
                  ScoreDoc[] hits = results.scoreDocs;
                  for (int i = 0; i < hits.length; i++) {
                      Document document = indexSearcher.doc(hits[i].doc);
                      System.out.println("Id: " + document);
                  }
              }

          posted on 2013-11-29 16:15 brock 閱讀(705) 評論(0)  編輯  收藏 所屬分類: 學(xué)習(xí)總結(jié)
          主站蜘蛛池模板: 平乐县| 稻城县| 壤塘县| 新田县| 奉化市| 武胜县| 台北县| 福鼎市| 高唐县| 年辖:市辖区| 上思县| 永川市| 锦屏县| 嘉鱼县| 斗六市| 治多县| 道孚县| 舞钢市| 柘荣县| 恭城| 林芝县| 巴青县| 临颍县| 肇州县| 武安市| 紫阳县| 高邮市| 临汾市| 平舆县| 延边| 珠海市| 启东市| 苍溪县| 崇礼县| 新余市| 建瓯市| 津市市| 洞口县| 横峰县| 三明市| 建昌县|