package com.createw.web.modules.superMap.util;
import java.io.File;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.supermap.data.*;
import com.supermap.data.conversion.DataExport;
import com.supermap.data.conversion.ExportSetting;
import com.supermap.data.conversion.ExportSettings;
import com.supermap.data.conversion.FileType;
/**
-
- Title:拆分数据集,生成shp文件
*/
public class SampleRun {
public static void main(String[] args) {
// 打开工作空间,得到数据源
Workspace workspace = new Workspace();
Datasources datasources = workspace.getDatasources();
DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo(
"D://supermapDemo/demo.udb", "sqlquery", "");
Datasource datasource = datasources.open(datasourceConnectionInfo);
// 得到数据集集合类,得到面数据集,通过数据源复制数据集
Datasets datasets = datasource.getDatasets();
String datasetVectorName = "数据源名称";
if (datasets.contains(datasetVectorName))
datasets.delete(datasetVectorName);
//快速拆分数据集
Dataset dataset = datasets.get("数据集名称");
DatasetVector datasetVector = (DatasetVector) datasource.copyDataset(
dataset, datasetVectorName, EncodeType.NONE);
queryParameterTest(datasetVector, datasets);//快速拆分数据集
//批量生成shp文件
//toShp(datasource,datasets);
// 释放相关资源
datasources.closeAll();
datasourceConnectionInfo.dispose();
workspace.close();
workspace.dispose();
printWithStar("程序退出");
}
/**
* 生成shp文件
*/
private static void toShp(Datasource datasource, Datasets datasets) {
int count = datasets.getCount();
ExportSettings exportSettings=new ExportSettings();
for (int i = 0; i < count; i++) {
Dataset dataset = datasets.get(i);
System.out.println(String.format("%-25s", dataset.getName()));
DatasetVector datasetVector = (DatasetVector) datasource.copyDataset(
dataset,dataset.getName()+"_"+System.currentTimeMillis() , EncodeType.NONE);
//生成文件夹
File f = new File("D:\\aa"+"\\"+dataset.getName());
f.mkdirs();
ExportSetting exportSetting = new
ExportSetting(datasetVector, "D:\\aa\\"+dataset.getName()+"\\"+dataset.getName()+".shp", FileType.SHP);
exportSettings.add(exportSetting);
}
DataExport dataExport = new DataExport();
dataExport.setExportSettings(exportSettings);
dataExport.run();
dataExport.dispose();
}
/**
* 拆分数据集
* @param dataset_world
* @param datasets
*/
public static void queryParameterTest(DatasetVector dataset_world,Datasets datasets)
{
List<Map<String, String>> maps = executeSql();
int index=0;
for(int i=0;i<maps.size();i++){
System.out.println(index++);
String code = maps.get(i).get("编码");
String name = maps.get(i).get("名称");
System.out.println(code+":::"+name);
// 设置查询参数
QueryParameter parameter = new QueryParameter();
parameter.setAttributeFilter("GBCODE = '"+code+"'");
parameter.setCursorType(CursorType.STATIC);
// 进行查询
Recordset recordset = dataset_world.query(parameter);
// 以 dataset_world 为模板创建数据集
DatasetVector dataset_result = (DatasetVector) datasets.
createFromTemplate(datasets.getAvailableDatasetName("文件名称"), dataset_world);
// 将空间查询结果追加到新建的数据集中
dataset_result.append(recordset);
// 依次关闭所有对象
dataset_result.close();
recordset.dispose();
}
dataset_world.close();
}
/**
* 连接数据库 省略
*/
public static List<Map<String, String>> executeSql() {
// 定义一个list用于接受数据库查询到的内容
List<Map<String, String>> list = new ArrayList();
Map<String, String> map = new HashMap<>();
map.put("编码",rs.getString("dm"));
map.put("名称",rs.getString("mc"));
list.add(map);
return list;
}
/**
* 输出数据集全部记录
*
* @param datasetVector 目标数据集
*/
private static void listAll(DatasetVector datasetVector) {
// 获得数据集全部记录
Recordset recordset = datasetVector.getRecordset(false,
CursorType.DYNAMIC);
// 输出记录集记录
printWithStar("输出数据集全部记录");
listAll(recordset);
// 以 dataset_world 为模板创建数据集
printWithStar("输出数据集全部记录");
// 释放记录集
recordset.dispose();
}
/**
* 遍历记录集,输出记录集的记录信息
*
* @param recordset 遍历的记录集对象
*/
private static void listAll(Recordset recordset) {
// 输出字段名称
FieldInfos fieldInfos = recordset.getFieldInfos();
int count = fieldInfos.getCount();
for (int i = 0; i < count; i++) {
String fieldname = fieldInfos.get(i).getName();
System.out.print(String.format("%-25s", fieldname));
}
System.out.println();
// 输出字段值
for (recordset.moveFirst(); !recordset.isEOF(); recordset.moveNext()) {
for (int i = 0; i < count; i++) {
String value = recordset.getFieldValue(i).toString();
System.out.print(String.format("%-25s", value));
}
System.out.println();
}
}
/**
* 以星星的修饰方式输出字符串
*
* @param content 原字符串
*/
private static void printWithStar(String content) {
String star = "****************************";
content = star + content + star;
System.out.println(content);
}
}