SuperMap iObjects Java中用json数据或字符串数据生成点数据集

此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);
		
	}

运行结果:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值