码迷,mamicode.com
首页 > 其他好文 > 详细

Rtree实现多维空间搜索

时间:2017-06-01 16:47:47      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:rtree 多维空间搜索

    好的,现在有这么一个需求。你所开发的应用的数据库中有全市所有饭店的经纬度坐标,现在你在某地定位了一个坐标,应用如何给你找出最近的饭店。多维空间搜索,使用RTree。这里只推荐已有的实现了RTree的jar包。

maven项目,可下载jar包,并且这是一个简单的例子:https://github.com/aled/jsi-examples

在线API:http://jsi.sourceforge.net/apidocs/index.html 


下面附上自己很low的测试代码:

package net.sf.jsi.examples;

import gnu.trove.procedure.TIntProcedure;
import net.sf.jsi.Point;
import net.sf.jsi.Rectangle;
import net.sf.jsi.SpatialIndex;
import net.sf.jsi.rtree.RTree;

/**
 * Created by Administrator on 2017/5/31.
 */
public class TestRTree {
    private void run() {
        //当前所在坐标
        final Point point = new Point(0, 0);
        //点 矩形
        final Rectangle[] rectangle = new Rectangle[4];
        rectangle[0] = new Rectangle(1, 1, 1, 1);
        rectangle[1] = new Rectangle(0, 1, 0, 1);
        rectangle[2] = new Rectangle(-1, -1, -1, -1);
        rectangle[3] = new Rectangle(-2, -2, -2, -2);
        //将点 矩形依次放入RTree中
        SpatialIndex si = new RTree();
        si.init(null);
        for (int i = 0; i < rectangle.length; i++) {
            si.add(rectangle[i], i);
        }
        //离点最近的3个点 矩形
        si.nearestN(point, new TIntProcedure() {
            public boolean execute(int i) {
                System.out.println("点 矩形" + i + " " + rectangle[i] + ",距离=" + rectangle[i].distance(point));
                return true;
            }
        }, 3, Float.MAX_VALUE);

    }

    public static void main(String[] args) {
        new TestRTree().run();
    }
}


本文出自 “12571026” 博客,请务必保留此出处http://12581026.blog.51cto.com/12571026/1931232

Rtree实现多维空间搜索

标签:rtree 多维空间搜索

原文地址:http://12581026.blog.51cto.com/12571026/1931232

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!