此Demo实现的功能有:
1,根据已知的工作空间路径去打开对应的数据源及数据集
2,解析json数据
3,新建数据集
4,添加字段,并给记录的字段赋值
5,String.Split()的使用
注意:下面的“PointDatasets.smwu”工作空间是自己新建的,并不是用代码生成的。
//创建原始点数据集
public static void BuildPoint_Original(String paramsStr){
double z0=0;
double z1=0;
double z2=0;
JSONObject jsonObject=JSONObject.parseObject(paramsStr);
System.out.println(jsonObject);
// 根据获取的工作空间路径去打开对应的数据源及数据集
WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
//E:\LiJiangSuperMapPractice\2019_8_7\PointDatasets\PointDatasets.smwu
workspaceConnectionInfo.server = "E://LiJiangSuperMapPractice//2019_8_7//PointDatasets//PointDatasets.smwu";
workspaceConnectionInfo.type = String.valueOf(WorkspaceType.SMWU);
Object obj = new Object();
Workspace ds = WorkspaceContainer.get(workspaceConnectionInfo, obj);
Datasource mDatasource = ds.getDatasources().get("Points");
// 起点
JSONObject startjson = jsonObject.getJSONObject("startPoint");
System.out.println("startjson:"+startjson);
double startPointX =Double.parseDouble(startjson.getString("x")) ;
double startPointY =Double.parseDouble(startjson.getString("y")) ;
String startPointF = startjson.getString("floorid");
String startPointB = startjson.getString("buildingid");
System.out.println(startPointX+" "+startPointY+" "+startPointF+" "+startPointB);
Point3Ds startEndPoint3Ds = new Point3Ds();
PathAnalysisTools pathAnalysisTools=new PathAnalysisTools();
if (startPointF == "" || startPointB == "") {
z0 = 0;
}
// else {
// // 获取floorid对应的高度
// z0 =pathAnalysisTools. getPointHeight(mDatasource, startPointF,startPointB);
// }
startEndPoint3Ds.add(new Point3D(startPointX,startPointY,z0));
// 途经点
com.alibaba.fastjson.JSONArray wayPoints=jsonObject .getJSONArray("wayPoints");
if (wayPoints.size() > 0) {
for (int i = 0; i < wayPoints.size(); i++) {
JSONObject wayPoint = wayPoints.getJSONObject(i);
double wayPointX =Double.parseDouble( wayPoint.getString("x"));
double wayPointY =Double.parseDouble( wayPoint.getString("y"));
String wayPointF = wayPoint.getString("floorid");
String wayPointB = wayPoint.getString("buildingid");
if (wayPointF == "" || wayPointB == "") {
z2=0;
}
// else {
// z2 =pathAnalysisTools. getPointHeight(mDatasource, wayPointF, wayPointB);
// }
startEndPoint3Ds.add(new Point3D(wayPointX, wayPointY, z2));
}
} else {
System.out.println("没有途径点");
}
// 终点
JSONObject endjson = jsonObject.getJSONObject("endPoint");
System.out.println("startjson:"+endjson);
double endPointX = Double.parseDouble(endjson.getString("x"));
double endPointY =Double.parseDouble( endjson.getString("y"));
String endPointF = endjson.getString("floorid");
String endPointB = endjson.getString("buildingid");
Point2D endpoint = null;
if (endPointF == "" || endPointB == "") {
z1=0;
}
// else {
// z1 =pathAnalysisTools. getPointHeight(mDatasource, endPointF, endPointB);
//
// }
startEndPoint3Ds.add(new Point3D(endPointX,endPointY, z1));
//创建原始点数据集
Datasets datasetspoint = mDatasource.getDatasets();
String namepoint = datasetspoint.getAvailableDatasetName("0807原始点");
DatasetVectorInfo datasetVectorInfopoint = new DatasetVectorInfo();
datasetVectorInfopoint.setType(DatasetType.POINT);
datasetVectorInfopoint.setEncodeType(EncodeType.NONE);
datasetVectorInfopoint.setFileCache(true);
datasetVectorInfopoint.setName(namepoint);
System.out.println("点数据集的信息为:" + datasetVectorInfopoint.toString());
DatasetVector datasetVectorpoint = datasetspoint.create(datasetVectorInfopoint);
if (datasetVectorpoint != null) {
System.out.println(datasetVectorpoint.getName() + "数据集创建成功!");
}
//添加字段“Name”
FieldInfos fieldInfos= datasetVectorpoint.getFieldInfos();
FieldInfo fieldInfo=new FieldInfo();
fieldInfo.setType(FieldType.TEXT);
fieldInfo.setName("Name");
fieldInfo.setCaption("Name");
fieldInfo.setRequired(false);
fieldInfos.add(fieldInfo);
//这里写入的都是原始点
Recordset rspoint=datasetVectorpoint.getRecordset(false, CursorType.DYNAMIC);
for(int i=0;i<startEndPoint3Ds.getCount();i++){
GeoPoint geoPoint=new GeoPoint(startEndPoint3Ds.getItem(i).getX(),startEndPoint3Ds.getItem(i).getY());
rspoint.addNew(geoPoint);
if(geoPoint.getX()==114.058411717415&&geoPoint.getY()==22.6556003093719){
rspoint.setString("Name", "起点");
}else if(geoPoint.getX()==114.058422446251&&geoPoint.getY()==22.658674120903){
rspoint.setString("Name", "终点");
}else{
rspoint.setString("Name", "途经点"+i);
}
rspoint.update();
}
}
//创建邻近点数据集
public static void BuildPoint_LinJin(String paramsStr){
// 根据获取的工作空间路径去打开对应的数据源及数据集
WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
workspaceConnectionInfo.server = "E://LiJiangSuperMapPractice//2019_8_7//PointDatasets//PointDatasets.smwu";
workspaceConnectionInfo.type = String.valueOf(WorkspaceType.SMWU);
Object obj = new Object();
Workspace ds = WorkspaceContainer.get(workspaceConnectionInfo, obj);
Datasource mDatasource = ds.getDatasources().get("Points");
//分割字符串
String[] strs =paramsStr.split(";");
for(String s:strs){
System.out.println(s);
}
//获取三维点数组
Point3Ds startEndPoint3Ds = new Point3Ds();
Point3D point3D=null;
for(int i=0;i<strs.length/4;i++){
double x=Double.parseDouble(strs[4*i+1]);
double y=Double.parseDouble(strs[4*i+2]);
double z=Double.parseDouble(strs[4*i+3]);
System.out.println(x+" "+y+" "+z);
point3D=new Point3D(x,y,z);
startEndPoint3Ds.add(point3D);
}
//创建邻近点数据集
Datasets datasetspoint = mDatasource.getDatasets();
String namepoint = datasetspoint.getAvailableDatasetName("0807邻近点");
DatasetVectorInfo datasetVectorInfopoint = new DatasetVectorInfo();
datasetVectorInfopoint.setType(DatasetType.POINT);
datasetVectorInfopoint.setEncodeType(EncodeType.NONE);
datasetVectorInfopoint.setFileCache(true);
datasetVectorInfopoint.setName(namepoint);
System.out.println("点数据集的信息为:" + datasetVectorInfopoint.toString());
DatasetVector datasetVectorpoint = datasetspoint.create(datasetVectorInfopoint);
if (datasetVectorpoint != null) {
System.out.println(datasetVectorpoint.getName() + "数据集创建成功!");
}
//添加字段“Name”
FieldInfos fieldInfos= datasetVectorpoint.getFieldInfos();
FieldInfo fieldInfo=new FieldInfo();
fieldInfo.setType(FieldType.TEXT);
fieldInfo.setName("Name");
fieldInfo.setCaption("Name");
fieldInfo.setRequired(false);
fieldInfos.add(fieldInfo);
//这里写入的都是邻近点
Recordset rspoint=datasetVectorpoint.getRecordset(false, CursorType.DYNAMIC);
for(int i=0;i<startEndPoint3Ds.getCount();i++){
GeoPoint geoPoint=new GeoPoint(startEndPoint3Ds.getItem(i).getX(),startEndPoint3Ds.getItem(i).getY());
rspoint.addNew(geoPoint);
if(geoPoint.getX()==114.05761805009169&&geoPoint.getY()==22.656038753692822){
rspoint.setString("Name", "起点");
}else if(geoPoint.getX()==114.0572506277959&&geoPoint.getY()==22.65657172715043){
rspoint.setString("Name", "终点");
}else{
rspoint.setString("Name", "途经点"+i);
}
rspoint.update();
}
}
测试:
public static void main(String[] args) throws Exception {
String str_original="{\"startPoint\": { \"x\": 114.058422446251, \"y\": 22.658674120903, \"floorid\": \"\", \"buildingid\": \"\" }, \"endPoint\": { \"x\": 114.058411717415, \"y\": 22.6556003093719, \"floorid\": \"\", \"buildingid\": \"\" }, \"wayPoints\": [{ \"x\": 114.05873866980714, \"y\": 22.656075998129975, \"floorid\": \"\", \"buildingid\": \"\" }, { \"x\": 114.05775866980713, \"y\": 22.655075998129973, \"floorid\": \"\", \"buildingid\": \"\" }, { \"x\": 114.05871846980715, \"y\": 22.657475998129975, \"floorid\": \"\", \"buildingid\": \"\" }, { \"x\": 114.05671846980714, \"y\": 22.656455972129972, \"floorid\": \"\", \"buildingid\": \"\" }, { \"x\": 114.05891846980714, \"y\": 22.655067998129972, \"floorid\": \"\", \"buildingid\": \"\" }, { \"x\": 114.05771866980714, \"y\": 22.657455992129975, \"floorid\": \"\", \"buildingid\": \"\" }], \"Data_ServiceName\": { \"Data_ServiceName\": \"data-areaJ\" } }";
JsonToOriginalPointDataset.BuildPoint_Original(str_original);
String str_linjin="起点的邻近点坐标为;114.05761805009169;22.656038753692822;0.0;终点的邻近点坐标为;114.0572506277959;22.65657172715043;0.0";
JsonToOriginalPointDataset.BuildPoint_LinJin(str_linjin);
}
运行结果: