public class DatasetVector extends Dataset
矢量数据集类。
用于对矢量数据集进行描述,并对之进行相应的管理和操作。对矢量数据集的操作主要包括数据查询、修改、删除等。
用户在对矢量数据集进行操作之前,需要先打开该数据集,即调用打开数据集的方法—— Dataset.open()
方法。
| 限定符和类型 | 方法和说明 |
|---|---|
boolean |
append(Recordset recordset)
用于将记录集(
Recordset)追加到矢量数据集(DatasetVector)中。 |
boolean |
append(Recordset recordset,
java.lang.String tileName)
用于将记录集(
Recordset)按图幅名字追加到矢量数据集(DatasetVector)中,要求该矢量数据集的空间索引为图库索引,追加后记录集中的所有记录将作为图库索引的一幅。 |
boolean |
buildSpatialIndex(SpatialIndexInfo spatialIndexInfo)
根据指定的空间索引信息为矢量数据集创建空间索引。
|
boolean |
buildSpatialIndex(SpatialIndexType spatialIndexType)
根据给定的空间索引类型来为矢量数据集创建空间索引。
|
Rectangle2D |
computeBounds()
计算数据集的空间范围
|
GeoLine |
convertToLine()
将点数据集中的所有点转换成线对象,仅支持点数据集
若不是点数据集,会抛出异常。
|
GeoLine |
convertToLine(java.lang.String fieldName,
java.lang.String fieldValue)
将点数据集中的有相同字段值的点转换成线对象,仅支持点数据集
若不是点数据集,会抛出异常。
|
boolean |
deleteRecords(int[] id)
通过 ID 数组删除数据集中的记录。
|
boolean |
dropSpatialIndex()
删除空间索引
|
int |
fromGeoJSON(java.io.File file)
从指定文件(txt)中读取dataset的GeoJSON数据,并导入到当前dataset中.导入时,导入一条记录的SmID已经存在,那么就修改这条记录,否则增加记录。
|
boolean |
fromGeoJSON(java.lang.String geoJSON)
从GeoJSON字符串中获取几何对象,并将其存入数据集中
仅支持点、线、面和CAD数据集,获取点、线、面对象
|
DatasetVector |
getChildDataset()
获取矢量数据集的子数据集。
|
int |
getFieldCount()
返回矢量数据集中字段的数目。
|
FieldInfos |
getFieldInfos()
返回字段信息集合的对象。
|
Recordset |
getRecordset(boolean isEmptyRecordset,
CursorType cursorType)
根据给定的参数来返回空的记录集或者返回包括所有记录的记录集对象。
|
SpatialIndexType |
getSpatialIndexType()
返回当前的空间索引类型
|
boolean |
isSpatialIndexDirty()
返回矢量数据集中空间索引是否需要重建。
|
boolean |
isSpatialIndexTypeSupported(SpatialIndexType spatialIndexType)
判断当前数据集是否支持指定的类型的空间索引
|
Recordset |
query(Geometry geometry,
double bufferDistance,
CursorType cursorType)
用于查询数据集中落在指定空间对象的缓冲区内的记录。
|
Recordset |
query(Geometry geometry,
double bufferDistance,
java.lang.String attributeFilter,
CursorType cursorType)
用于查询数据集中落在指定空间对象的缓冲区内,并且满足一定条件的记录。
|
Recordset |
query(int[] id,
CursorType cursorType)
根据 ID 进行查询。
|
Recordset |
query(QueryParameter queryParameter)
通过设置查询条件对矢量数据集进行查询,该方法默认查询空间信息与属性信息。
|
Recordset |
query(Rectangle2D bounds,
CursorType cursorType)
用于查询落在已知空间范围内的记录。
|
Recordset |
query(Rectangle2D bounds,
java.lang.String attributeFilter,
CursorType cursorType)
用于查询落在已知空间范围内,并且满足一定条件的记录。
|
Recordset |
query(java.lang.String attributeFilter,
CursorType cursorType)
利用查询条件查询数据。
|
void |
queryByFilter(java.lang.String attributeFilter,
Geometry geoRegion,
int count)
空间查询,查询指定空间范围内符合字段条件的记录;
获取结果的方式:
setQueryListener(QueryListener listener) |
void |
queryByKeyword(java.lang.String fieldName,
java.lang.String keywords,
Geometry geoRegion,
int count)
属性查询,查询指定字段之中包含关键字的记录;
获取结果的方式:
setQueryListener(QueryListener listener) |
boolean |
reBuildSpatialIndex()
在原有的空间索引基础上进行重建,如果原来的空间索引被破坏,那么重建成功后还可以继续使用。
|
void |
setQueryListener(QueryListener listener)
|
java.lang.String |
toGeoJSON(boolean hasAttributte,
int startID,
int endID)
将数据集中指定起止SmID的对象,转换成GeoJSON格式的字符串
仅支持点、线、面和CAD数据集,转换点、线、面对象.hasAtrributte为true时,结果中包含属性值;hasAtrribute为false时,只有几何对象。
|
int |
toGeoJSON(java.io.File file)
将当前数据集中的所有记录都转成GeoJSON字符串,并存入指定的文件(txt)中,并且每一行为一条记录,以"\n"结尾。
|
close, getBounds, getDatasource, getDescription, getEncodeType, getName, getPrjCoordSys, getType, isOpen, isReadOnly, open, setDescription, setName, setPrjCoordSys, setReadOnlypublic int getFieldCount()
该方法是线程安全的,线程安全级别为 level2。有关线程安全的详细说明请参考《多线程技术文档》。
public FieldInfos getFieldInfos()
该方法是线程安全的,线程安全级别为 level2。有关线程安全的详细说明请参考《多线程技术文档》。
public Recordset getRecordset(boolean isEmptyRecordset, CursorType cursorType)
isEmptyRecordset - 给定的判断是否返回空的记录集参数。为 true 时返回空记录集。为 false 时返回包含所有记录的记录集合对象。cursorType - 指定的游标类型,以便用户控制查询出来的记录集的属性。当游标类型为动态时,记录集可以被修改,当游标类型为静态时,记录集为只读。详细信息请参见
CursorType 类型。public Recordset query(QueryParameter queryParameter)
该方法是线程安全的,线程安全级别为 level2。有关线程安全的详细说明请参考《多线程技术文档》。
queryParameter - 定义的查询条件。public boolean append(Recordset recordset)
Recordset)追加到矢量数据集(DatasetVector)中。追加时,记录集与矢量数据集中字段名相同的字段直接追加,矢量数据集中没有而记录集中有的字段将跳过不处理。
执行完追加后 recordset 会指向最后一条记录的后面,即 isEOF 方法为 true。
recordset - 添加的记录集对象。
public void appendTest() {
// 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
// 数据源包含两个矢量数据集,分别为“World”和“Ocean”
DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().
get("World");
DatasetVector datasetVector1 = (DatasetVector) datasource.getDatasets().
get("Ocean");
// 返回名为“Ocean”的数据集的所有记录,将其追加到名为“World”的数据集中
Recordset recordset = datasetVector1.getRecordset(false,
CursorType.DYNAMIC);
if (datasetVector.append(recordset)) {
System.out.println("追加数据集成功");
}
// 释放资源
recordset.dispose();
datasetVector.close();
datasetVector1.close();
}
public boolean append(Recordset recordset, java.lang.String tileName)
Recordset)按图幅名字追加到矢量数据集(DatasetVector)中,要求该矢量数据集的空间索引为图库索引,追加后记录集中的所有记录将作为图库索引的一幅。追加时,记录集与矢量数据集中字段名相同的字段直接追加,矢量数据集中没有而记录集中有的字段将跳过不处理。该方法一般用于标准图幅数据入库过程。
执行完追加后 recordset 会指向最后一条记录的后面,即 isEOF 方法为 true。
注:目前,仅有 EngineType中的 ORACLEPLUS 引擎,支持矢量数据集按图幅追加数据。
recordset - 添加的记录集对象。tileName - 新增的图幅名称标记。public boolean deleteRecords(int[] id)
id - 待删除记录的 ID 数组。public Recordset query(int[] id, CursorType cursorType)
id - ID 数组。cursorType - 指定的游标类型,以便用户控制查询出来的记录集的属性。当游标类型为动态时,记录集可以被修改,当游标类型为静态时,记录集为只读。详细信息请参见 CursorType 类型。public Recordset query(Rectangle2D bounds, java.lang.String attributeFilter, CursorType cursorType)
bounds - 已知的空间范围。attributeFilter - 查询过滤条件,相当于 SQL 语句中的 Where 子句部分。cursorType - 指定的游标类型,以便用户控制查询出来的记录集的属性。当游标类型为动态时,记录集可以被修改,当游标类型为静态时,记录集为只读。详细信息请参见 CursorType 类型。public Recordset query(Rectangle2D bounds, CursorType cursorType)
bounds - 已知的空间范围。cursorType - 指定的游标类型,以便用户控制查询出来的记录集的属性。当游标类型为动态时,记录集可以被修改,当游标类型为静态时,记录集为只读。详细信息请参见 CursorType 类型。public Recordset query(java.lang.String attributeFilter, CursorType cursorType)
对于 UDB 引擎,当用户传入字符串型时间字段并用此时间值构造查询条件时,需遵循以下规则:将时间值格式化到 ”to_data()” 字符串的括号中,例如,时间值 "2008-5-12 14:28:00",写为 "to_date(2008-5-12 14:28:00)",注意括号中时间值无需引号。
attributeFilter - 查询条件,相当于 SQL 语句中的 Where 子句。cursorType - 指定的游标类型,以便用户控制查询出来的记录集的属性。当游标类型为动态时,记录集可以被修改,当游标类型为静态时,记录集为只读属性。详细信息请参见 CursorType 类型。
public void queryTest(){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//构造一个时间对象
Date dateOld=new Date(2010,1,10,11,12,13);
//构造一个当前时间的对象
Date dateNow = new Date();
//格式化成字符串
String dtStrOld = format.format(dateOld);
String dtStrNow = format.format(dateNow);
//用两个时间字符串构造查询条件
String filter = "TimeField between to_date(" + dtStrOld + ") and to_date(" + dtStrNow + ")";
//将查询条件传入到Query方法,查询记录集
Recordset recordset = vector.Query(filter,CursorType.Static);
}
public Recordset query(Geometry geometry, double bufferDistance, CursorType cursorType)
geometry - 用于查询的空间对象。bufferDistance - 缓冲区的半径。cursorType - 指定的游标类型,以便用户控制查询出来的记录集的属性。当游标类型为动态时,记录集可以被修改,当游标类型为静态时,记录集为只读属性。详细信息请参见 CursorType 类型。public Recordset query(Geometry geometry, double bufferDistance, java.lang.String attributeFilter, CursorType cursorType)
geometry - 用于查询的空间对象。bufferDistance - 缓冲区的半径。attributeFilter - 查询条件,通常是一个 SQL 语句。cursorType - 指定的游标类型,以便用户控制查询出来的记录集的属性。当游标类型为动态时,记录集可以被修改,当游标类型为静态时,记录集为只读。详细信息请参见 CursorType 类型。public DatasetVector getChildDataset()
public boolean fromGeoJSON(java.lang.String geoJSON)
仅支持点、线、面和CAD数据集,获取点、线、面对象
geoJSON - GeoJSON格式的字符串public java.lang.String toGeoJSON(boolean hasAttributte,
int startID,
int endID)
仅支持点、线、面和CAD数据集,转换点、线、面对象.hasAtrributte为true时,结果中包含属性值;hasAtrribute为false时,只有几何对象。
hasAttributte - 是否包含属性值startID - 起始SmIDendID - 结束SmIDpublic void queryByKeyword(java.lang.String fieldName,
java.lang.String keywords,
Geometry geoRegion,
int count)
setQueryListener(QueryListener listener)fieldName - 查询的字段名,如Name, Name_PY, Name_PYSZM,即名称字段,名称拼音字段,名称拼音首字母字段keywords - 对查询字段做查询的关键字geoRegion - 可以指定范围,如果为NULL,则表示全范围查询count - 返回的查询结果个数,默认10个,超过100按100算public void queryByFilter(java.lang.String attributeFilter,
Geometry geoRegion,
int count)
setQueryListener(QueryListener listener)attributeFilter - 查询的条件,比如说 Kind=2008geoRegion - 查询的区域count - 返回的查询结果个数,默认10个,超过100按100算public void setQueryListener(QueryListener listener)
queryByFilter(String, Geometry, int)和queryByKeyword(String, String, Geometry, int)查询结果的监听listener - 查询结果监听器QueryListenerpublic int fromGeoJSON(java.io.File file)
toGeoJSON(File)配合使用,读取文件也是根据toGeoJSON(File)而设定的,
若是使用的文件与toGeoJSON(File)导出文件的格式不一致,很可能会导入失败。file - 存储dataset的GeoJSON数据,通常为txt文件public int toGeoJSON(java.io.File file)
file - 用于存储GeoJSON字符串的文件,如果文件存在,则在其后追加,如果不存在,会新建一个文件。public GeoLine convertToLine()
若不是点数据集,会抛出异常。若点数据集中少于两个点,则返回null
public GeoLine convertToLine(java.lang.String fieldName, java.lang.String fieldValue)
若不是点数据集,会抛出异常。若点数据集中不存在指定的字段或没有包含该字段值的点,以及匹配结果少于两个点,则返回null
fieldName - 字段名fieldValue - 字段值public SpatialIndexType getSpatialIndexType()
public boolean isSpatialIndexDirty()
public boolean isSpatialIndexTypeSupported(SpatialIndexType spatialIndexType)
spatialIndexType - 指定的空间索引的类型public boolean buildSpatialIndex(SpatialIndexInfo spatialIndexInfo)
根据指定的空间索引信息为矢量数据集创建空间索引。
注意:
spatialIndexInfo - 指定的空间索引信息对象public boolean buildSpatialIndex(SpatialIndexType spatialIndexType)
根据给定的空间索引类型来为矢量数据集创建空间索引。有关空间索引类型请参见 SpatialIndexType 枚举类型说明。
注意:
spatialIndexType - 指定的需要创建空间索引的类型
public void buildSpatialIndexTest() {
// 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
// 取出数据源中名为 "World" 的矢量数据集(datasetVector)
// 判断此数据集的空间索引是否需要重建,如果需要重建,建立一个 R 树索引,如果不需重建,则判断现有数据集是否支持多级网格索引
DatasetVector datasetVector = (DatasetVector)
datasource.getDatasets(). get("World");
if (datasetVector.isSpatialIndexDirty()) {
// 删除已存在的索引
datasetVector.dropSpatialIndex();
// 关闭数据集
datasetVector.close();
// 重建 R 树索引
if(datasetVector.buildSpatialIndex(SpatialIndexType.RTREE)) {
SpatialIndexType spatialindextype = datasetVector.
getSpatialIndexType();
System.out.println("新建空间索引的类型为:" + spatialindextype);
}
} else {
// 如果不需要重建,判断现有数据集是否支持多级网格索引
if(datasetVector.isSpatialIndexTypeSupported(SpatialIndexType.MULTI_LEVEL_GRID)) {
System.out.println("该数据集支持多级网格索引");
} else {
System.out.println("该数据集不支持多级网格索引");
}
}
}
public boolean reBuildSpatialIndex()
public boolean dropSpatialIndex()
public Rectangle2D computeBounds()