Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
4a353c0f
提交
4a353c0f
authored
11 年前
作者:
Thomas Mueller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Spatial index (work in progress)
上级
0fd0134f
master
noel-pr1
plus33-master
pr/267
stumc-Issue#576
version-1.4.198
version-1.4.197
version-1.4.196
version-1.4.195
version-1.4.194
version-1.4.193
version-1.4.192
version-1.4.191
version-1.4.190
version-1.4.188
version-1.4.187
version-1.4.186
version-1.4.185
version-1.4.184
version-1.4.183
version-1.4.182
version-1.4.181
version-1.4.178
version-1.4.177
version-1.3
无相关合并请求
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
23 行增加
和
46 行删除
+23
-46
IndexCursor.java
h2/src/main/org/h2/index/IndexCursor.java
+2
-2
ValueGeometry.java
h2/src/main/org/h2/value/ValueGeometry.java
+13
-0
TestSpatial.java
h2/src/test/org/h2/test/db/TestSpatial.java
+8
-44
没有找到文件。
h2/src/main/org/h2/index/IndexCursor.java
浏览文件 @
4a353c0f
...
...
@@ -182,9 +182,9 @@ public class IndexCursor implements Cursor {
if
(
row
==
null
)
{
row
=
table
.
getTemplateRow
();
}
else
if
(
row
.
getValue
(
columnId
)
!=
null
)
{
// the
intersect
ion of the two envelopes
// the
un
ion of the two envelopes
ValueGeometry
vg
=
(
ValueGeometry
)
row
.
getValue
(
columnId
).
convertTo
(
Value
.
GEOMETRY
);
v
=
((
ValueGeometry
)
v
.
convertTo
(
Value
.
GEOMETRY
)).
getEnvelope
Intersect
ion
(
vg
);
v
=
((
ValueGeometry
)
v
.
convertTo
(
Value
.
GEOMETRY
)).
getEnvelope
Un
ion
(
vg
);
}
if
(
columnId
<
0
)
{
row
.
setKey
(
v
.
getLong
());
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueGeometry.java
浏览文件 @
4a353c0f
...
...
@@ -88,6 +88,19 @@ public class ValueGeometry extends Value {
return
geometry
.
getEnvelopeInternal
().
intersects
(
r
.
getGeometry
().
getEnvelopeInternal
());
}
/**
* Get the union.
*
* @param r the other geometry
* @return the union of this geometry envelope and another geometry envelope
*/
public
Value
getEnvelopeUnion
(
ValueGeometry
r
)
{
GeometryFactory
gf
=
new
GeometryFactory
();
Envelope
mergedEnvelope
=
new
Envelope
(
geometry
.
getEnvelopeInternal
());
mergedEnvelope
.
expandToInclude
(
r
.
getGeometry
().
getEnvelopeInternal
());
return
get
(
gf
.
toGeometry
(
mergedEnvelope
));
}
/**
* Get the intersection.
*
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/db/TestSpatial.java
浏览文件 @
4a353c0f
...
...
@@ -56,15 +56,14 @@ public class TestSpatial extends TestBase {
public
void
test
()
throws
SQLException
{
if
(
DataType
.
GEOMETRY_CLASS
!=
null
)
{
deleteDb
(
"spatial"
);
// testSpatialValues();
// testOverlap();
// testNotOverlap();
// testPersistentSpatialIndex();
// testSpatialIndexQueryMultipleTable();
// testIndexTransaction();
// testJavaAlias();
// testJavaAliasTableFunction();
// testPersistentSpatialIndex2();
testSpatialValues
();
testOverlap
();
testNotOverlap
();
testPersistentSpatialIndex
();
testSpatialIndexQueryMultipleTable
();
testIndexTransaction
();
testJavaAlias
();
testJavaAliasTableFunction
();
testMemorySpatialIndex
();
testRandom
();
deleteDb
(
"spatial"
);
...
...
@@ -494,40 +493,5 @@ public class TestSpatial extends TestBase {
throw
new
SQLException
(
ex
);
}
}
/**
* Not really a test case but show that something go crazy (in mvstore) after some seconds.
* @throws SQLException
*/
private
void
testPersistentSpatialIndex2
()
throws
SQLException
{
deleteDb
(
"spatial_pers"
);
final
long
count
=
150000
;
Connection
conn
=
getConnection
(
"spatial_pers"
);
try
{
Statement
stat
=
conn
.
createStatement
();
stat
.
execute
(
"create table test(id int primary key auto_increment, the_geom geometry)"
);
PreparedStatement
ps
=
conn
.
prepareStatement
(
"insert into test(the_geom) values(?)"
);
Random
rnd
=
new
Random
(
44
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
ps
.
setObject
(
1
,
getRandomGeometry
(
rnd
,
0
,
100
,-
50
,
50
,
3
));
ps
.
execute
();
}
stat
.
execute
(
"create spatial index on test(the_geom)"
);
Database
db
=
((
Session
)((
JdbcConnection
)
conn
).
getSession
()).
getDatabase
();
MVStore
store
=
db
.
getMvStore
().
getStore
();
int
cpt
=
0
;
while
(
cpt
<
46
)
{
try
{
// First it shows 610, then 5 until cpt==44, finally at cpt==45 it shows an unsaved 688 with a trace in spatial_pers.trace.db
System
.
out
.
println
((
cpt
++)+
" store.getUnsavedPageCount()=="
+
store
.
getUnsavedPageCount
());
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
ex
)
{
throw
new
SQLException
(
ex
);
}
}
}
finally
{
// Close the database
conn
.
close
();
}
}
}
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论