http://www.sqlite.org/rtree.html表示r*树"作为合并的一部分包含在内但默认情况下是禁用的"并且启用它"只需使用SQLITE_ENABLE_RTREE C-preprocessor宏定义编译"
好吧,我想在我的Android应用程序中使用R-trees,但显然SQLite都已预先安装等.有没有办法在用户的手机/设备上启用它?
或者,是否可以使用NDK和SQLite的免费可用源代码?
我有一组多边形区域(地理围栏).这组数据是固定的; 所以不需要插入和删除数据.哪个数据结构可用于搜索查询点(经度,纬度)所在的区域?
注意:我已经成功地为一组点实现了KD-Tree(实际上是一个2D树).但它不适用于这个问题.我已经实现了一个R-Tree; 它解决了问题,但它很慢(或我的实施很糟糕).
谢谢
注意:我从事过R-Tree实现,现在工作正常.
我试图了解RTree算法的基础知识,我试图找出它如何执行例如1公里范围内的所有零售商的搜索.我们将把所有对象存储在我们数据库中的矩形中,然后我们会(可能)根据我们当前的位置构建一个查询矩形,然后找到与它重叠的所有矩形.我们然后扫描结果以找到感兴趣的,即只有餐馆的对象?
我正在使用来自http://libspatialindex.github.com/的spatialindex库
我在主内存中创建一个R*树:
size_t capacity = 10;
bool bWriteThrough = false;
fileInMem = StorageManager
::createNewRandomEvictionsBuffer(*memStorage, capacity, bWriteThrough);
double fillFactor = 0.7;
size_t indexCapacity = 10;
size_t leafCapacity = 10;
size_t dimension = 2;
RTree::RTreeVariant rv = RTree::RV_RSTAR;
tree = RTree::createNewRTree(*fileInMem, fillFactor, indexCapacity,
leafCapacity, dimension, rv, indexIdentifier);
Run Code Online (Sandbox Code Playgroud)
然后我插入了大量的边界框,目前大约2.5M(德国巴伐利亚州的公路网).后来我的目标是插入欧洲的所有道路.
存储管理器和rtree的参数选择有哪些?大多数情况下,我使用rtree来查找到给定查询(bbox交叉点)最近的道路.
R*Tree如何实现为持久性(基于磁盘)?用于保存R*Tree索引或保存叶值的文件架构是什么?
注意:此外如何在这样的持久R*树中执行插入,更新和删除操作?
注释II:我已经实现了具有批量加载功能的内存中R-Tree.但是,当我们谈论基于磁盘的问题时,我认为这完全无关紧要.
我有一个奇怪的问题,我没有线索来追踪原因.我会试着清楚地描述我的问题.
我有一个RTree类,在这个类中,我想比较两个rectanlge(这里我称为信封,它包含minX,minY,maxX,maxY),所以我们有一个比较器类如下:
private class AnonymousXComparerImpl : IComparer
{
public AnonymousXComparerImpl()
{ }
public int Compare(object o1, object o2)
{
IEnvelope ea = (IEnvelope)((IBoundable)o1).Bounds;
IEnvelope eb = (IEnvelope)((IBoundable)o2).Bounds;
double a = (ea.MinX + ea.MaxX) / 2d;
double b = (eb.MinX + eb.MaxX) / 2d;
return a > b ? 1 : a < b ? -1 : 0;
}
}
Run Code Online (Sandbox Code Playgroud)
使用这个比较器,我们可以维护一个信封的ArrayList并轻松排序,随机添加信封.当我们调用以下代码并且我们遇到了
无法排序,因为IComparer.Compare()方法返回不一致的结果.值不比较等于自身,或者重复一个值与另一个值相比产生不同的结果.
sortedChildBoundables.Sort(new AnonymousXComparerImpl());
Run Code Online (Sandbox Code Playgroud)
这是奇怪的部分.此错误仅发生在未安装VistualStudio的.net 4.0中.如果机器安装了VS或.net 4.5,则此问题无法再次进行再处理.
在这种情况下,我无法弄清楚它为什么会发生.如果你有任何关于解决这类问题的经验,那将是很棒的,我很感激.
谢谢,霍华德
我对R-Tree数据结构有疑问.什么是R-Tree中的扇出.它是最大条目数吗?
我们如何确定R-Tree中的最小和最大条目数?如果我有10000点,我的页面大小为8kb.
谢谢
是否有人可以向我解释dbscan算法如何与R*-Tree一起使用?我理解dbscan的工作,似乎我理解为R*-Tree有效,但我无法将它们连接在一起.
最初,我有数据 - 具有8个功能的特征向量,我不明白我如何处理构造R*-Tree.如果有人列出我必须通过的主要步骤,我将不胜感激.
如果我的问题很明显,我会道歉,但这会给我带来困难.提前致谢!
我有一个简化的城市地图,其中的街道为线串,地址为点。我需要找到从每个点到任何一条街线的最近路径。我有一个执行此操作的脚本,但由于嵌套了循环,因此它在多项式时间内运行。对于15万行(形状为LineString)和10000点(形状为Point),在8 GB Ram计算机上需要10个小时才能完成。
该函数如下所示(抱歉,无法完全重现):
import pandas as pd
import shapely
from shapely import Point, LineString
def connect_nodes_to_closest_edges(edges_df , nodes_df,
edges_geom,
nodes_geom):
"""Finds closest line to points and returns 2 dataframes:
edges_df
nodes_df
"""
for i in range(len(nodes_df)):
point = nodes_df.loc[i,nodes_geom]
shortest_distance = 100000
for j in range(len(edges_df)):
line = edges_df.loc[j,edges_geom]
if line.distance(point) < shortest_distance:
shortest_distance = line.distance(point)
closest_street_index = j
closest_line = line
...
Run Code Online (Sandbox Code Playgroud)
然后,将结果保存在表中作为新列,该列将点到线的最短路径添加为新列。
有没有一种方法可以使该功能更快些?
例如,如果我可以为50m左右的每个点过滤出线,这将有助于加快每次迭代的速度?
有没有一种方法可以使用rtree包使其更快?我能够找到一个答案,从而使脚本可以更快地找到多边形的交点,但是我似乎无法使它适用于最接近点到线的地方。
https://pypi.python.org/pypi/Rtree/
抱歉,如果已经回答了,但是我在这里也没有在gis.stackexchange上找到答案
谢谢你的建议!