/// <summary> /// 获取投影坐标系的描述信息 /// Get the description information of the projected coordinate system /// </summary> private String GetEarthPrjStr(PrjCoordSys crtPrj) { StringBuilder prjStrBuilder = new StringBuilder(); try { PrjParameter crtPrjParm = crtPrj.PrjParameter; prjStrBuilder.AppendLine(m_type + crtPrj.Name); prjStrBuilder.AppendLine(m_name + crtPrj.Projection.Name); prjStrBuilder.AppendLine(m_longitude + crtPrjParm.CentralMeridian.ToString("0.000000")); prjStrBuilder.AppendLine(m_latitude + crtPrjParm.CentralParallel.ToString()); prjStrBuilder.AppendLine(m_firparallel + crtPrjParm.StandardParallel1.ToString()); prjStrBuilder.AppendLine(m_secparallel + crtPrjParm.StandardParallel2.ToString()); prjStrBuilder.AppendLine(m_offsetX + crtPrjParm.FalseEasting.ToString(".0000")); prjStrBuilder.AppendLine(m_offsetY + crtPrjParm.FalseNorthing.ToString(".0000")); prjStrBuilder.AppendLine(m_scalefactor + crtPrjParm.ScaleFactor.ToString()); prjStrBuilder.AppendLine(m_azimuth + crtPrjParm.Azimuth.ToString(".0000")); prjStrBuilder.AppendLine(m_firlongitude + crtPrjParm.FirstPointLongitude.ToString()); prjStrBuilder.AppendLine(m_seclongitude + crtPrjParm.SecondPointLongitude.ToString()); prjStrBuilder.AppendLine(m_geocoordsys + crtPrj.GeoCoordSys.Name); prjStrBuilder.AppendLine(m_geodatum + crtPrj.GeoCoordSys.GeoDatum.Name); prjStrBuilder.AppendLine(m_datumspheroid + crtPrj.GeoCoordSys.GeoDatum.GeoSpheroid.Name); prjStrBuilder.AppendLine(m_majorradius + crtPrj.GeoCoordSys.GeoDatum.GeoSpheroid.Axis.ToString(".00")); prjStrBuilder.AppendLine(m_flattening + crtPrj.GeoCoordSys.GeoDatum.GeoSpheroid.Flatten.ToString()); prjStrBuilder.AppendLine(m_centralmeridian + crtPrj.GeoCoordSys.GeoPrimeMeridian.LongitudeValue.ToString("0.000000")); } catch (Exception ex) { Trace.WriteLine(ex.Message); } return(prjStrBuilder.ToString()); }
// 按照不同的投影类型,初始化投影坐标系 // Initialize the projection coordinates by the different projection type. private PrjCoordSys GetTargetPrjCoordSys(int type) { PrjCoordSys targetPrjCoordSys = null; PrjParameter parameter = null; Projection projection = null; switch (type) { case 1: { targetPrjCoordSys = new PrjCoordSys(PrjCoordSysType.UserDefined); projection = new Projection(ProjectionType.GaussKruger); targetPrjCoordSys.Projection = projection; parameter = new PrjParameter(); parameter.CentralMeridian = 110; parameter.StandardParallel1 = 20; parameter.StandardParallel2 = 40; targetPrjCoordSys.PrjParameter = parameter; } break; case 2: { targetPrjCoordSys = new PrjCoordSys(PrjCoordSysType.UserDefined); projection = new Projection(ProjectionType.TransverseMercator); targetPrjCoordSys.Projection = projection; parameter = new PrjParameter(); parameter.CentralMeridian = 110; parameter.StandardParallel1 = 0; targetPrjCoordSys.PrjParameter = parameter; } break; case 3: { targetPrjCoordSys = new PrjCoordSys(PrjCoordSysType.UserDefined); projection = new Projection(ProjectionType.LambertConformalConic); targetPrjCoordSys.Projection = projection; parameter = new PrjParameter(); parameter.CentralMeridian = 110; parameter.StandardParallel1 = 30; targetPrjCoordSys.PrjParameter = parameter; } break; default: break; } return(targetPrjCoordSys); }
/// <summary> /// 拷贝构造函数。 /// </summary> /// <param name="prjCoordSys">投影坐标系对象。</param> /// <exception cref="ArgumentNullException">投影坐标系对象为 Null 时抛出异常。</exception> public PrjCoordSys(PrjCoordSys prjCoordSys) { if (prjCoordSys == null) throw new ArgumentNullException(); if (prjCoordSys.CoordSystem != null) this.CoordSystem = new CoordSys(prjCoordSys.CoordSystem); this.CoordUnit = prjCoordSys.CoordUnit; this.DistanceUnit = prjCoordSys.DistanceUnit; this.EpsgCode = prjCoordSys.EpsgCode; this.Name = prjCoordSys.Name; if (prjCoordSys.Projection != null) this.Projection = new Projection(prjCoordSys.Projection); if (prjCoordSys.ProjectionParam != null) this.ProjectionParam = new PrjParameter(prjCoordSys.ProjectionParam); this.Type = prjCoordSys.Type; }
/// <summary> /// 获得srid /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GetSrid_Click(object sender, RoutedEventArgs e) { if (memDatasource != null) { var dataset = memDatasource.Datasets[targetDatasetName]; if (dataset != null) { PrjCoordSys crtPrjSys = dataset.PrjCoordSys; //https://www.cnblogs.com/arxive/p/5082761.html //EPSGCode=srid var srid = crtPrjSys.EPSGCode; MessageBox.Show($"srid:{srid}"); } } }
/// <summary> /// 获取指定数据集的投影描述信息 /// </summary> public String GetPrjStr(Dataset dataset) { StringBuilder prjStrBuilder = new StringBuilder(); if (dataset == null) { MessageBox.Show(m_openfa); } PrjCoordSys crtPrjSys = dataset.PrjCoordSys; prjStrBuilder.AppendLine(m_currentprojectioninfo); prjStrBuilder.Append(this.GetEarthPrjStr(crtPrjSys)); return(prjStrBuilder.ToString()); }
/// <summary> /// 地理坐标向投影坐标转换 /// </summary> /// <param name="point3Ds"></param> /// <returns></returns> private Point3Ds coordinateTrans3D(Point3Ds point3Ds) { Point2Ds point2Ds = new Point2Ds(); foreach (Point3D p3d in point3Ds) { Point2D point2D = new Point2D(p3d.X, p3d.Y); point2Ds.Add(point2D); } //Assume Wgs1984WorldMercator as target project coordinate system PrjCoordSys prjTarget = new PrjCoordSys(PrjCoordSysType.Wgs1984Utm50N); bool b = CoordSysTranslator.Forward(point2Ds, prjTarget); Point3Ds result = new Point3Ds(); for (int i = 0; i < point2Ds.Count; i++) { Point3D point3D = new Point3D(point2Ds[i].X, point2Ds[i].Y, point3Ds[i].Z); result.Add(point3D); } return(result); }
/// <summary> /// 转换主函数 /// Main function of transformation /// </summary> /// <param name="type">对应不同的投影类型 Projection type</param> /// <returns>转换后投影的描述信息 The description information of projection after transformed</returns> public String TransformPrj(int type) { try { m_srcMapControl.Map.Layers.Clear(); this.CopyDataset(m_bufPrjDataName); PrjCoordSys gaussPrjSys = this.GetTargetPrjCoordSys(type); Boolean result = CoordSysTranslator.Convert(m_processDataset, gaussPrjSys, new CoordSysTransParameter(), CoordSysTransMethod.GeocentricTranslation); m_srcMapControl.Map.Layers.Add(m_processDataset, true); m_srcMapControl.Map.Center = m_srcMapControl.Map.Bounds.Center; m_srcMapControl.Map.Scale = m_srcMapControl.Map.Scale; m_srcMapControl.Map.Refresh(); return(this.GetPrjStr(m_processDataset)); } catch (Exception ex) { Trace.WriteLine(ex.Message); } return(null); }
public void ProjectConverTest(string prjRef, Datasource dc) { try { System.Windows.Forms. Application.DoEvents(); string name = ""; //Datasource dc = wps.Datasources[UDBname]; PrjCoordSys prj = new PrjCoordSys(); prj.FromFile(prjRef, PrjFileType.SuperMap); for (int i = 1; i <= dc.Datasets.Count; i++) { name = "time" + i.ToString(); try { Dataset dset = dc.Datasets[name]; dset = CoordSysTranslator.Convert(dset, prj, dset.Datasource, name + "_", new CoordSysTransParameter(), CoordSysTransMethod.GeocentricTranslation); dset.Datasource.Datasets.Delete(name); dset.Datasource.CopyDataset(dset, name, dset.EncodeType); dset.Datasource.Datasets.Delete(name + "_"); //wps.Save(); } catch { continue; } } //wps.Dispose(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void ProjectConver(string wpsPath, string prjRef, string name) { try { SuperMap.Data.Workspace wps = new SuperMap.Data.Workspace(); WorkspaceConnectionInfo info = new WorkspaceConnectionInfo(wpsPath); wps.Open(info); Datasource dc = wps.Datasources["ymgc3"]; //Dataset dset = wps.Datasources["ymgc1"].Datasets[name];// dsets["time1"]; //dset.Datasource.Datasets.Delete("time2"); //Dataset dst = dset.Datasource.CopyDataset(dset, "time2", dset.EncodeType); PrjCoordSys prj = new PrjCoordSys(); prj.FromFile(prjRef, PrjFileType.SuperMap); for (int i = 1; i <= dc.Datasets.Count; i++) { name = "time" + i.ToString(); try { Dataset dset = dc.Datasets[name]; //bool ok = CoordSysTranslator.Convert(dset, prj, new CoordSysTransParameter(), CoordSysTransMethod.GeocentricTranslation); dset = CoordSysTranslator.Convert(dset, prj, dset.Datasource, name + "_", new CoordSysTransParameter(), CoordSysTransMethod.GeocentricTranslation); dset.Datasource.Datasets.Delete(name); dset.Datasource.CopyDataset(dset, name, dset.EncodeType); dset.Datasource.Datasets.Delete(name + "_"); wps.Save(); } catch { continue; } } wps.Dispose(); MessageBox.Show("OVER"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void ImportTIFFTest(string importPath, string sourceUDB) { try { // 1. 构建数据源连接对象。 DatasourceConnectionInfo info = new DatasourceConnectionInfo(); info.Server = sourceUDB; WorkspaceConnectionInfo ConnectionInfo = new WorkspaceConnectionInfo(sourceUDB); SuperMap.Data.Workspace wps = new SuperMap.Data.Workspace(); wps.Create(ConnectionInfo); Datasources ds = wps.Datasources; //ds.Open(info); Datasource dss = ds.Create(info); // new Datasource(); //dss.Connect(); // 2. 构建SHP导入设置对象(ImportSettingSHP),设置数据源,设置导入数据路径。 ImportSettingTIF importSettingTIF = new ImportSettingTIF(); importSettingTIF.ImportMode = ImportMode.Overwrite;//可复写 importSettingTIF.SourceFilePath = importPath; importSettingTIF.TargetDatasourceConnectionInfo = info; importSettingTIF.ImportingAsGrid = true;//栅格数据集形式 // 3. 获取导入设置对象的导入信息集合(ImportDataInfos),设置目标数据集的名字。 // ImportDataInfo dataInfos = importSettingSHP.GetTargetDataInfos(""); //importSettingSHP.SetTargetDataInfos(dataInfos); // 4. 构建数据导入类对象(DataImport),构建并设置导入设置对象集合。 PrjCoordSys prj = new PrjCoordSys(); prj.Type = PrjCoordSysType.SphereMercator; importSettingTIF.TargetPrjCoordSys = prj;//设置了参考投影,还需改变其投影转换 //prj.GeoCoordSys.FromXML(readXML()) DataImport import1 = new DataImport(); ImportSettings settings = import1.ImportSettings; settings.Add(importSettingTIF); import1.Run(); try { int m = importPath.LastIndexOf('\\'); string dsName = importPath.Substring(m + 1); int n = dsName.LastIndexOf('.'); string dsname = dsName.Substring(0, n); Datasets datasets = dss.Datasets; Dataset m_processDataset = datasets[dsname]; PrjCoordSys prj1 = new PrjCoordSys(); prj1.FromXML(readXML(@"G:\移动风险监测\参考坐标\CGCS_2000.xml")); Boolean result = CoordSysTranslator.Convert(m_processDataset, prj1, new CoordSysTransParameter(), CoordSysTransMethod.GeocentricTranslation); } catch (Exception ex) { MessageBox.Show(ex.Message); } i++; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// udb中导入tiff /// </summary> /// <param name="importPath"></param> public string ImportTIFF(string importPath, DatasourceConnectionInfo info) { try { string name = importPath.Substring(importPath.LastIndexOf("\\") + 1); // 1. 构建数据源连接对象。 //DatasourceConnectionInfo info = new DatasourceConnectionInfo(); //info.Server = sourceUDB; // 2. 构建SHP导入设置对象(ImportSettingSHP),设置数据源,设置导入数据路径。 //info.Password = "******"; ImportSettingTIF importSettingTIF = new ImportSettingTIF(); //m_workspace.Datasources.Open(info); importSettingTIF.ImportMode = ImportMode.Overwrite;//可复写 importSettingTIF.SourceFilePath = importPath; importSettingTIF.TargetDatasourceConnectionInfo = info; importSettingTIF.ImportingAsGrid = true;//栅格数据集形式 // 3. 获取导入设置对象的导入信息集合(ImportDataInfos),设置目标数据集的名字。 // ImportDataInfo dataInfos = importSettingSHP.GetTargetDataInfos(""); //importSettingSHP.SetTargetDataInfos(dataInfos); // 4. 构建数据导入类对象(DataImport),构建并设置导入设置对象集合。 //string prjRef = @"G:\移动风险监测\参考坐标\CGCS_2000.xml"; PrjCoordSys prj = new PrjCoordSys(); // prj.FromFile(prjRef, PrjFileType.SuperMap); prj.Type = PrjCoordSysType.SphereMercator; importSettingTIF.TargetPrjCoordSys = prj;//设置了参考投影,还需改变其投影转换 DataImport import1 = new DataImport(); ImportSettings settings = import1.ImportSettings; settings.Add(importSettingTIF); ImportResult dd= import1.Run(); i++; if (dd.FailedSettings.Length != 0) return "【tif数据导入】" + name + "导入失败!请检查数据是否有效。\t\n"; return null; } catch (Exception ex) { MessageBox.Show(ex.Message); return null; } }
private void CreateDatasets() { if (m_bAddedPointLayer) { return; } try { //创建点数据集 Datasource datasource = m_workspace.Datasources[0]; PrjCoordSys crtPrjSys; //if (m_workspace.Maps.Count == 0) { crtPrjSys = new PrjCoordSys(); crtPrjSys.Type = PrjCoordSysType.EarthLongitudeLatitude; } //else //{ //crtPrjSys = m_MapControl.Map.Layers[UserHelper.MapLayerName].Dataset.PrjCoordSys; // } for (int iDeviceIndex = 0; iDeviceIndex < UserHelper.nDeviceNum; iDeviceIndex++) { datasource.Datasets.Delete(UserHelper.sDeviceName[iDeviceIndex]); DatasetVectorInfo pointLayerInfo = new DatasetVectorInfo(UserHelper.sDeviceName[iDeviceIndex], DatasetType.Point); DatasetVector pointDataset = datasource.Datasets.Create(pointLayerInfo); // 添加使用的字段 FieldInfo fieldInfo = new FieldInfo(); fieldInfo.Type = FieldType.Char; fieldInfo.Name = m_filedName; pointDataset.FieldInfos.Add(fieldInfo); pointDataset.PrjCoordSys = crtPrjSys; //将点数据集加入到地图中 LayerSettingVector setting = new LayerSettingVector(); setting.Style.LineColor = Color.SeaGreen; setting.Style.MarkerSize = new Size2D(8, 8); setting.Style.MarkerSymbolID = UserHelper.MarkerSymbolID[iDeviceIndex]; m_MapControl.Map.Layers.Add(pointDataset, setting, true); m_MapControl.Map.Refresh(); } datasource.Datasets.Delete(UserHelper.sTextName); DatasetVectorInfo textLayerInfo = new DatasetVectorInfo(UserHelper.sTextName, DatasetType.Text); DatasetVector textDataset = datasource.Datasets.Create(textLayerInfo); textDataset.PrjCoordSys = crtPrjSys; m_MapControl.Map.Layers.Add(textDataset, true); m_MapControl.Map.Refresh(); //定义新数据集 { datasource.Datasets.Delete("Point3D"); DatasetVectorInfo Datasetinfo = new DatasetVectorInfo(); Datasetinfo.Type = DatasetType.CAD; Datasetinfo.Name = "Point3D"; DatasetVector datset = datasource.Datasets.Create(Datasetinfo); FieldInfo fieldInfo = new FieldInfo(); fieldInfo.Type = FieldType.Char; fieldInfo.Name = m_filedName; datset.FieldInfos.Add(fieldInfo); datset.PrjCoordSys = crtPrjSys; DatasetVector datasetPoint3D = datasource.Datasets["Point3D"] as DatasetVector; if (m_SceneControl.Scene.Layers.Contains("stylePoint3D")) { m_layer3DPoint = m_SceneControl.Scene.Layers["stylePoint3D"] as Layer3DDataset; } else { m_layer3DPoint = m_SceneControl.Scene.Layers.Add(datasetPoint3D, new Layer3DSettingVector(), true, "stylePoint3D"); } m_SceneControl.Scene.Refresh(); } // 新建数据集 { datasource.Datasets.Delete("Region3D"); DatasetVectorInfo Datasetinfo = new DatasetVectorInfo(); Datasetinfo.Type = DatasetType.Region3D; Datasetinfo.Name = "Region3D"; DatasetVector datset = datasource.Datasets.Create(Datasetinfo); datset.PrjCoordSys = crtPrjSys; DatasetVector m_datasetRegion3D = datasource.Datasets["Region3D"] as DatasetVector; if (m_SceneControl.Scene.Layers.Contains("styleRegion3D")) { m_layer3DRegion = m_SceneControl.Scene.Layers["styleRegion3D"] as Layer3DDataset; } else { m_layer3DRegion = m_SceneControl.Scene.Layers.Add(m_datasetRegion3D, new Layer3DSettingVector(), true, "styleRegion3D"); } } } catch (Exception e) { MessageBox.Show(e.Message); } m_bAddedPointLayer = true; }
public override void Run() { try { //// WorkspaceConnectionInfo conInfo = new WorkspaceConnectionInfo(@"D:\Program Files (x86)\SuperMap\SuperMap iDesktop 7C\SampleData\World\World.smwu"); // WorkspaceControl workspaceControl // = SuperMap.Desktop.Application.ActiveApplication.MainForm.DockBarManager[typeof(WorkspaceControlManager)].Control as WorkspaceControl; // if (workspaceControl != null) // { // workspaceControl.ResourcesNodeVisible = false; // workspaceControl.LayoutsNodeVisible = false; // //workspaceControl.WorkspaceTree.Workspace.Open(conInfo); // WorkspaceConnectionInfo conInfo1 = new WorkspaceConnectionInfo(@"..\..\Default.smwu"); // //workspaceControl.WorkspaceTree.Workspace.Create(conInfo1); // //workspaceControl.WorkspaceTree.Workspace.Close(); // //workspaceControl.WorkspaceTree.Workspace.Dispose(); // bool dd= workspaceControl.WorkspaceTree.Workspace.Open(conInfo1); // workspaceControl.WorkspaceTree.Workspace.Datasources.Create() // //workspaceControl.Update(); // //workspaceControl.WorkspaceTree.WorkspaceNode.Nodes.Add("dafsaf"); // // workspaceControl.WorkspaceTree.Update(); // } // System.Windows.Forms.MessageBox.Show("LoadImageCtrlAction"); //IFormMap activeMapForm = Application.ActiveForm as IFormMap; //MapControl activeMap = activeMapForm.MapControl; //IFormManager dd= Application.ActiveApplication.MainForm.FormManager; //for (int i = 0; i < dd.Count; i++) //{ //} WorkspaceControl workspaceControl = SuperMap.Desktop.Application.ActiveApplication.MainForm.DockBarManager[typeof(WorkspaceControlManager)].Control as WorkspaceControl; Datasource targetDatasource; DatasourceConnectionInfo dataSourceConnectionInfo = new DatasourceConnectionInfo(); dataSourceConnectionInfo.Server = @"..\..\Default"; if (workspaceControl != null) { workspaceControl.ResourcesNodeVisible = false; workspaceControl.LayoutsNodeVisible = false; Form1 form1 = new Form1(); form1.Show(); try { bool isExist = workspaceControl.WorkspaceTree.Workspace.Datasources.Contains(dataSourceConnectionInfo.Alias); if (isExist) { targetDatasource = workspaceControl.WorkspaceTree.Workspace.Datasources[dataSourceConnectionInfo.Alias]; } else { targetDatasource = workspaceControl.WorkspaceTree.Workspace.Datasources.Open(dataSourceConnectionInfo); } } catch (Exception ex1) { targetDatasource = workspaceControl.WorkspaceTree.Workspace.Datasources.Create(dataSourceConnectionInfo); } OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "影像文件(*.tif)|*.*"; ofd.ValidateNames = true; ofd.CheckPathExists = true; ofd.CheckFileExists = true; ofd.ShowHelp = true; //ofd.HelpRequest += ofd_HelpRequest; if (ofd.ShowDialog() == DialogResult.OK) { string strFileName = ofd.FileName; //其他代码 DataImport m_dataImport = new DataImport(); m_dataImport.ImportSettings.Clear(); //ImportSettingIMG imgSetting = new ImportSettingIMG(); //imgSetting.ImportMode = ImportMode.Overwrite; //imgSetting.SourceFilePath = @"..\..\SampleData\DataExchange\ImgImport\Multibands.img"; //imgSetting.TargetDatasource = m_desDatasource; //imgSetting.MultiBandImportMode = MultiBandImportMode.MultiBand; //m_dataImport.ImportSettings.Add(imgSetting); //m_dataImport.Run(); //DatasetImage importResult = m_desDatasource.Datasets["Multibands"] as DatasetImage; //LayerSettingImage layerSetting = new LayerSettingImage(); //layerSetting.DisplayBandIndexes = new Int32[] { 3, 2, 1 }; //layerSetting.DisplayColorSpace = ColorSpaceType.RGB; ImportSettingTIF importSetingTif = new ImportSettingTIF(); importSetingTif.ImportMode = ImportMode.Overwrite; importSetingTif.SourceFilePath = strFileName; PrjCoordSys prgCoord = importSetingTif.GetSourcePrjCoordSys(); Charset pCharset = importSetingTif.SourceFileCharset; ImportDataInfos importDataInfoTif = importSetingTif.GetTargetDataInfos(""); importSetingTif.SetTargetDataInfos(importDataInfoTif); //ImportDataInfoTIF importDataInfoTif1 = null; importSetingTif.TargetDatasource = targetDatasource; m_dataImport.ImportSettings.Add(importSetingTif); m_dataImport.Run(); } } } catch (Exception ex) { SuperMap.Desktop.Application.ActiveApplication.Output.Output(ex.StackTrace); } }
private DatasourceInfo(SerializationInfo info, StreamingContext context) { this.CoordUnit = (Unit)info.GetValue("CoordUnit", typeof(Unit)); this.Description = info.GetString("Description"); this.DistanceUnit = (Unit)info.GetValue("DistanceUnit", typeof(Unit)); this.EngineType = (Utility.EngineType)info.GetValue("EngineType", typeof(EngineType)); this.Name = info.GetString("Name"); this.PrjCoordSys = (PrjCoordSys)info.GetValue("PrjCoordSys", typeof(PrjCoordSys)); }