private void btnSetCoorSys_Click(object sender, EventArgs e) { try { csDiag = new CoordSysDialog(); string strCrs = csDiag.ShowDialog(gviLanguage.gviLanguageChineseSimple); if (strCrs != "") { coorSys = coorFactory.CreateFromWKT(strCrs); if (coorSys == null) { MessageBox.Show("无效的空间坐标系"); this.txtCoorSys.Text = @"UNKNOWNCS[\""unnamed\""]";; this.txtCoorSys.Focus(); } else { this.txtCoorSys.Text = strCrs; } } } catch (System.Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } }
/// <summary> /// 离散Polygon /// </summary> /// <param name="polygon"></param> /// <param name="distance"></param> private IPolygon DiscretePolygon(IPolygon polygon, double distance) { string wkt = "PROJCS[\"<Custom Coordinate>\",GEOGCS[\"GCS_Beijing_1954\",DATUM[\"D_Beijing_1954\",SPHEROID[\"Krasovsky_1940\",6378245.0,298.3]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"false_easting\",64685.26],PARAMETER[\"false_northing\",-3267460.1405],PARAMETER[\"central_meridian\",120.0],PARAMETER[\"scale_factor\",1.0],PARAMETER[\"latitude_of_origin\",0.0],UNIT[\"Meter\",1.0]]"; ICoordinateReferenceSystem tempcrs = crsFactory.CreateFromWKT(wkt); IRing ring = polygon.ExteriorRing; IPolygon resPolygon = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; resPolygon.SpatialCRS = crs as ISpatialCRS; for (int i = 0; i < ring.PointCount - 1; i++) { IPoint point1 = ring.GetPoint(i); IPoint point2 = ring.GetPoint(i + 1); resPolygon.ExteriorRing.AppendPoint(point1); point1.Project(tempcrs as ISpatialCRS); point2.Project(tempcrs as ISpatialCRS); IVector3 p1 = point1.Position; IVector3 p2 = point2.Position; IEulerAngle angle = this.axRenderControl1.Camera.GetAimingAngles(p1, p2); p2.MultiplyByScalar(-1); double length = p1.Add(p2).Length; for (int j = 0; j < (int)(length / distance); j++) { IVector3 tempv3 = this.axRenderControl1.Camera.GetAimingPoint(p1, angle, (distance * (j + 1))); IPoint tempPoint = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); tempPoint.Position = tempv3; tempPoint.SpatialCRS = tempcrs as ISpatialCRS; tempPoint.Project(crs as ISpatialCRS); resPolygon.ExteriorRing.AppendPoint(tempPoint); } } resPolygon.Close(); return(resPolygon); }
private void toolStripButtonLoadTerrain_Click(object sender, System.EventArgs e) { OpenFileDialog od = new OpenFileDialog(); od.Filter = "地形文件(*.ted)|*.ted"; if (System.IO.Directory.Exists(strMediaPath)) { od.InitialDirectory = strMediaPath + @"\terrain"; } od.RestoreDirectory = true; if (DialogResult.OK == od.ShowDialog()) { string wkt = this.axRenderControl1.GetTerrainCrsWKT(od.FileName, ""); this.axRenderControl1.Reset2(wkt); this.axRenderControl1.Terrain.RegisterTerrain(od.FileName, ""); if (this.axRenderControl1.Terrain.IsPlanarTerrain) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } crs = crsFactory.CreateFromWKT(wkt); this.axRenderControl1.Terrain.FlyTo(gviTerrainActionCode.gviFlyToTerrain); } }
/// <summary> /// 由参考系统实例化坐标。 /// </summary> /// <param name="referenceSystem">参考系统</param> public GeodeticCoord(ICoordinateReferenceSystem referenceSystem, double lon = 0, double lat = 0, double height = 0, double weight = 0) : base(referenceSystem, lon, lat, weight) { if (!ReferenceSystem.CoordinateSystem.Contains(Ordinate.Height)) { throw new ArgumentException("参考系中没有 Height 轴", "referenceSystem"); } this.Height = height; }
/// <summary> /// 由参考系统实例化坐标。 /// </summary> /// <param name="referenceSystem">参考系统</param> public XyzCoord(ICoordinateReferenceSystem referenceSystem, double x = 0, double y = 0, double z = 0, double weight = 0) : base(referenceSystem, x, y, weight) { if (!ReferenceSystem.CoordinateSystem.Contains(Ordinate.Z)) { throw new ArgumentException("参考系中没有 Z 轴", "referenceSystem"); } this.Z = z; }
/// <summary> /// 由参考系统实例化坐标。 /// </summary> /// <param name="referenceSystem">参考系统</param> public XyCoord(ICoordinateReferenceSystem referenceSystem, double x = 0, double y = 0, double weight = 0) : base(referenceSystem, weight) { if (!ReferenceSystem.CoordinateSystem.Contains(Ordinate.X) || !ReferenceSystem.CoordinateSystem.Contains(Ordinate.Y)) { throw new ArgumentException("参考系中没有 X Y 轴", "referenceSystem"); } this.X = x; this.Y = y; }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 注册地形 string tmpTedPath = (strMediaPath + @"\terrain\terrain.ted"); this.axRenderControl1.Terrain.RegisterTerrain(tmpTedPath, ""); crs = crsFactory.CreateFromWKT(this.axRenderControl1.GetTerrainCrsWKT(tmpTedPath, "")); this.axRenderControl1.Terrain.FlyTo(gviTerrainActionCode.gviFlyToTerrain); enableOceanEffect.Checked = this.axRenderControl1.Terrain.EnableOceanEffect; // 注册事件 this.axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing); this.axRenderControl1.RcObjectEditFinish += new _IRenderControlEvents_RcObjectEditFinishEventHandler(axRenderControl1_RcObjectEditFinish); this.toolStripTextBoxWindSpeed.Text = this.axRenderControl1.Terrain.OceanWindSpeed.ToString(); this.toolStripTextBoxWindDirection.Text = this.axRenderControl1.Terrain.OceanWindDirection.ToString(); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "Ocean.html"; } }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 注册地形 string tmpTedPath = (strMediaPath + @"\terrain\terrain.ted"); this.axRenderControl1.Terrain.RegisterTerrain(tmpTedPath, ""); crs = crsFactory.CreateFromWKT(this.axRenderControl1.GetTerrainCrsWKT(tmpTedPath, "")); this.axRenderControl1.Terrain.FlyTo(gviTerrainActionCode.gviFlyToTerrain); // 添加节点到界面控件上 myListNode item = new myListNode("terrain", TreeNodeType.NT_TERRAINLAYER, this.axRenderControl1.Terrain); item.Checked = true; listView1.Items.Add(item); // 注册事件 this.axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing); this.axRenderControl1.RcObjectEditFinish += new Gvitech.CityMaker.Controls._IRenderControlEvents_RcObjectEditFinishEventHandler(axRenderControl1_RcObjectEditFinish); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "TerrainModifier.html"; } }
/// <summary> /// 由参考系统实例化坐标。 /// </summary> /// <param name="referenceSystem">参考系统</param> public LonLatCoord(ICoordinateReferenceSystem referenceSystem, double lon = 0, double lat = 0, double weight = 0) : base(referenceSystem, weight) { if (!ReferenceSystem.CoordinateSystem.Contains(Ordinate.Lon) || !ReferenceSystem.CoordinateSystem.Contains(Ordinate.Lat)) { throw new ArgumentException("参考系中没有 Lon Lat 轴", "referenceSystem"); } this.Lon = lon; this.Lat = lat; }
/// <summary> /// 默认构造函数。初始化为 Empty。 /// </summary> //public Coordinate():this(null) {} /// <summary> /// 由参考系统实例化坐标。 /// </summary> /// <param name="referenceSystem">参考系统</param> public Coordinate(ICoordinateReferenceSystem referenceSystem, double weight = 0, CoordinateType CoordinateType = CoordinateType.Other) { this.ReferenceSystem = referenceSystem; this.Weight = weight; this.CoordDic = new Dictionary <Ordinate, double>(); foreach (var item in ReferenceSystem.CoordinateSystem.Axes) { this.CoordDic.Add(item.Ordinate, 0); } }
/// <summary> /// 构造函数 /// </summary> /// <param name="geodeticCrs">待转换坐标系统,类型必须是GeodeticCs</param> /// <param name="xyzCrs">目标坐标系统,类型必须是XyzCs</param> public GeodeticToXyzCsTranformOnDifferDatum(ICoordinateReferenceSystem geodeticCrs, ICoordinateReferenceSystem xyzCrs) : base(geodeticCrs, xyzCrs) { //第一个节点,统一坐标到XYZ ICoordinateReferenceSystem middleCrs = new CrsFactory().Create(CoordinateSystem.XyzCs, this.SourceCrs.Datum); TransformChain = new GeodeticToXyzCsTranform(this.SourceCrs, middleCrs); //第二个节点 AbstractCoordTranform datumTrans = new GeodeticDatumTranform(middleCrs, this.TargetCrs); //设置链条 TransformChain.Successor = (datumTrans); }
/// <summary> /// 构造函数 /// </summary> /// <param name="sourceCrs">待转换坐标系统,类型是XyzCs才符合</param> /// <param name="targetCrs">目标坐标系统,类型是GeodeticCs才符合</param> public XyzToGeodeticCsTranformOnDifferDatum(ICoordinateReferenceSystem sourceCrs, ICoordinateReferenceSystem targetCrs) : base(sourceCrs, targetCrs) { //第一个节点,统一基准 ICoordinateReferenceSystem middleCrs = new CrsFactory().Create(CoordinateSystem.XyzCs, this.TargetCrs.Datum); this.TransformChain = new GeodeticDatumTranform(this.SourceCrs, middleCrs); //第二个节点,转换到大地坐标 AbstractCoordTranform xyzToGeo = new XyzToGeodeticCsTranform(middleCrs, this.TargetCrs); //设置链条 this.TransformChain.Successor = (xyzToGeo); }
/// <summary> /// 椭球基准的变换. /// </summary> /// <param name="sourceCrs">待转参考系</param> /// <param name="targetCrs">目标参考系</param> /// <returns></returns> public AbstractCoordTranform CreateGeodeticDatumTranform( ICoordinateReferenceSystem sourceCrs = null, ICoordinateReferenceSystem targetCrs = null) { if (sourceCrs == null) { sourceCrs = SourceCrs; } if (targetCrs == null) { targetCrs = TargetCrs; } return(new GeodeticDatumTranform(sourceCrs, targetCrs)); }
private void MainForm_Load(object sender, System.EventArgs e) { this.btnOnProcess.Enabled = false; this.btnSimulate.Enabled = false; // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 注册地形 string tmpTedPath = (strMediaPath + @"\terrain\terrain.ted"); this.axRenderControl1.Terrain.RegisterTerrain(tmpTedPath, ""); crs = crsFactory.CreateFromWKT(this.axRenderControl1.GetTerrainCrsWKT(tmpTedPath, "")); this.axRenderControl1.Terrain.FlyTo(gviTerrainActionCode.gviFlyToTerrain); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "Flood.html"; } }
/// <summary> /// 大地基准不同,坐标系统也不同,源为大地坐标系,目标为空间直角坐标系。 // 应该首先统一坐标系,然后统一大地基准 /// </summary> /// <returns></returns> public ICrsTranform CreateGeodeticToXyzCsTransformOnDifferDatum( ICoordinateReferenceSystem sourceCrs = null, ICoordinateReferenceSystem targetCrs = null) { if (sourceCrs == null) { sourceCrs = SourceCrs; } if (targetCrs == null) { targetCrs = TargetCrs; } return(new GeodeticToXyzCsTranformOnDifferDatum(sourceCrs, targetCrs)); //ICrsFactory crsFac = new CrsFactory(); ////第一个节点,统一坐标到XYZ //ICoordinateReferenceSystem middleCrs = crsFac.Create(CoordinateSystem.XyzCs, this.SourceCrs.Datum); //AbstractCoordTranform geoToXyz = CreateGeodeticToXyzCsTranform(this.SourceCrs, middleCrs); ////第二个节点 //AbstractCoordTranform datumTrans = CreateGeodeticDatumTranform(middleCrs, this.TargetCrs); ////设置链条 //geoToXyz.Successor = (datumTrans); //return geoToXyz; }
/// <summary> /// 大地基准不同,坐标系统也不同。源为空间直角坐标系,目标为大地坐标系。 /// </summary> /// <returns></returns> public ICrsTranform CreateXyzToGeodeticCsTransformOnDifferDatum( ICoordinateReferenceSystem sourceCrs = null, ICoordinateReferenceSystem targetCrs = null) { if (sourceCrs == null) { sourceCrs = SourceCrs; } if (targetCrs == null) { targetCrs = TargetCrs; } return(new XyzToGeodeticCsTranformOnDifferDatum(sourceCrs, targetCrs)); //ICrsFactory crsFac = new CrsFactory(); ////第一个节点,统一基准 //ICoordinateReferenceSystem middleCrs = crsFac.Create(CoordinateSystem.XyzCs, this.TargetCrs.Datum); //AbstractCoordTranform datumTrans = CreateGeodeticDatumTranform(this.SourceCrs, middleCrs); ////第二个节点,转换到大地坐标 //AbstractCoordTranform xyzToGeo = CreateXyzToGeodeticCsTranform(middleCrs, this.TargetCrs); ////设置链条 //datumTrans.Successor = (xyzToGeo); //return datumTrans; }
/// <summary> /// 实例化一个通用坐标转换器,自动判断参考系的类型,组成责任链。 /// </summary> /// <param name="sourceCrs">待转参考系</param> /// <param name="targetCrs">目标参考系</param> public CoordinateTransformFactory(ICoordinateReferenceSystem sourceCrs, ICoordinateReferenceSystem targetCrs) { this.SourceCrs = sourceCrs; this.TargetCrs = targetCrs; }
/// <summary> /// 大地基准转换实例 /// </summary> /// <param name="sourceDatum">原大地基准</param> /// <param name="targetCrs">目标大地基准</param> public GeodeticDatumTranform(ICoordinateReferenceSystem sourceCrs, ICoordinateReferenceSystem targetCrs) : base(sourceCrs, targetCrs) { }
/// <summary> /// 判断坐标系类型 /// </summary> /// <param name="srs"></param> /// <returns></returns> bool isENU(ICoordinateReferenceSystem srs) { return(srs.IsENU()); }
/// <summary> /// 实例化一个坐标工厂。 /// </summary> /// <param name="reference">坐标参考系</param> public CoordinateFactory(ICoordinateReferenceSystem reference) { this.ReferenceSystem = reference; }
/// <summary> /// 由输入输出的参考系类型,自动选择合适的转换器,并可以组成责任链。 /// </summary> /// <returns></returns> public ICrsTranform Create( ICoordinateReferenceSystem sourceCrs = null, ICoordinateReferenceSystem targetCrs = null) { if (sourceCrs == null) { sourceCrs = SourceCrs; } if (targetCrs == null) { targetCrs = TargetCrs; } //判断并设置转换器 //现在只支持几种情况: //1.椭球基准不变,大地坐标与空间直角坐标的转换; //2.在空间直角坐标下,转换椭球基准; //3.以上两种转换的组合。 if (sourceCrs.Datum is IGeodeticDatum && targetCrs.Datum is IGeodeticDatum) //1.大地基准下。 { if (sourceCrs.Datum.Equals(targetCrs.Datum)) //1.1 大地基准相同 { //1.1.1 LonLatHeight -> XYZ if (sourceCrs.CoordinateSystem.CoordinateType == CoordinateType.LonLatHeight && targetCrs.CoordinateSystem.CoordinateType == CoordinateType.XYZ) { return(CreateGeodeticToXyzCsTranform()); } //1.1.2 XYZ -> LonLatHeight if (sourceCrs.CoordinateSystem.CoordinateType == CoordinateType.XYZ && targetCrs.CoordinateSystem.CoordinateType == CoordinateType.LonLatHeight) { return(CreateXyzToGeodeticCsTranform()); } } else//1.2 大地基准不同 { //1.2.1 坐标系相同,则基准(椭球)转换 XYZ -> XYZ if (sourceCrs.CoordinateSystem.CoordinateType == CoordinateType.XYZ && targetCrs.CoordinateSystem.CoordinateType == CoordinateType.XYZ) { return(CreateGeodeticDatumTranform()); } //1.2.2 大地基准不同,坐标系统也不同,源为大地坐标系,目标为空间直角坐标系。 // 应该首先统一坐标系,然后统一大地基准 if (sourceCrs.CoordinateSystem.CoordinateType == CoordinateType.LonLatHeight && targetCrs.CoordinateSystem.CoordinateType == CoordinateType.XYZ) { return(CreateGeodeticToXyzCsTransformOnDifferDatum()); } //1.2.3 大地基准不同,坐标系统也不同。源为空间直角坐标系,目标为大地坐标系。 if (sourceCrs.CoordinateSystem.CoordinateType == CoordinateType.XYZ && targetCrs.CoordinateSystem.CoordinateType == CoordinateType.LonLatHeight) { return(CreateXyzToGeodeticCsTransformOnDifferDatum()); } } } //兜底条款 throw new ArgumentException("我们很遗憾的告诉你:当前本程序,还不支持您所输入参考系之间的转换。进一步信息请联系我们。"); }
/// <summary> /// 创建一个实例。 /// </summary> /// <param name="sourceCrs">待转换参考系统</param> /// <param name="targetCrs">目标参考系统</param> public AbstractCompositCoordTranform(ICoordinateReferenceSystem sourceCrs, ICoordinateReferenceSystem targetCrs) : base(sourceCrs, targetCrs) { }
/// <summary> /// 构造函数 /// </summary> /// <param name="sourceCrs">待转换坐标系统,类型是XyzCs才符合</param> /// <param name="targetCrs">目标坐标系统,类型是GeodeticCs才符合</param> public XyzToGeodeticCsTranform(ICoordinateReferenceSystem sourceCrs, ICoordinateReferenceSystem targetCrs) : base(sourceCrs, targetCrs) { }
/// <summary> /// 创建一个实例。 /// </summary> /// <param name="sourceCrs">待转换参考系统</param> /// <param name="targetCrs">目标参考系统</param> public AbstractCoordTranform(ICoordinateReferenceSystem sourceCrs, ICoordinateReferenceSystem targetCrs) { this.SourceCrs = sourceCrs; this.TargetCrs = targetCrs; this.CoordinateFactory = new CoordinateFactory(targetCrs); }
private void MainForm_Load(object sender, EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; this.axRenderControl1.Camera.FlyTime = 1; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } #region 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\ClosedTrimesh.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); crs = dataset.SpatialReference; string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); __fc = fc; __fl = featureLayer; if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } angle.Set(0, -20, 0); IPoint p = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); p.SpatialCRS = fc.FeatureDataSet.SpatialReference; p.Position = env.Center; this.axRenderControl1.Camera.LookAt2(p, 1000, angle); } hasfly = true; } } #endregion // 注册事件 this.axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing); this.axRenderControl1.RcObjectEditFinish += new _IRenderControlEvents_RcObjectEditFinishEventHandler(axRenderControl1_RcObjectEditFinish); this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "GetSolidProfile.html"; } }
/// <summary> /// 构造函数 /// </summary> /// <param name="geodeticCrs">待转换坐标系统,类型必须是GeodeticCs</param> /// <param name="xyzCrs">目标坐标系统,类型必须是XyzCs</param> public GeodeticToXyzCsTranform(ICoordinateReferenceSystem geodeticCrs, ICoordinateReferenceSystem xyzCrs) : base(geodeticCrs, xyzCrs) { }
private void createDataSetToolStripMenuItem_Click(object sender, EventArgs e) { DataSetForm setForm = new DataSetForm(); if (setForm.ShowDialog() != DialogResult.OK) { return; } IDataSource ds = null; IFeatureDataSet dset = null; try { myTreeNode node = (myTreeNode)selectNode; IConnectionInfo ci = node.con; ds = dsFactory.OpenDataSource(ci); ICoordinateReferenceSystem coorSys = coorFactory.CreateFromWKT(setForm.CoordString); dset = ds.CreateFeatureDataset(setForm.DatasetName, coorSys as SpatialCRS); //开起事务:往普通表里插入记录 ds.StartEditing(); bool saveEditing = false; if (CreateLCRecordOfFDS(ds, dset.Name)) { saveEditing = true; } else { saveEditing = false; } ds.StopEditing(saveEditing); // 如果事务失败,则回退创建dataset动作 if (saveEditing == false) { ds.DeleteFeatureDataset(dset.Name); MessageBox.Show("创建失败"); return; } // 往树上挂节点 TreeNode setNode = new TreeNode(setForm.DatasetName, 1, 1); node.Nodes.Add(setNode); setNode.ContextMenuStrip = this.contextMenuStrip2; } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } finally { if (ds != null) { //Marshal.ReleaseComObject(ds); ds = null; } if (dset != null) { //Marshal.ReleaseComObject(dset); dset = null; } } }