转载:我最近的研究成果(IGeometry.Project and IGeometry.SpatialReference)
2012-05-21 16:46
232 查看
查看C#代码
我最近的研究成果(IGeometry.Project and IGeometry.SpatialReference)
既然是别人的研究成果 先转来 看看把。
//我最近的研究成果(IGeometry.Project and IGeometry.SpatialReference) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.SystemUI; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.DataSourcesGDB; using ESRI.ArcGIS.DataSourcesFile; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.AnalysisTools; //使用GP工具 using ESRI.ArcGIS.Geoprocessing; using ESRI.ArcGIS.Geoprocessor; namespace SearchAndDisplay { public partial class Form1 : Form { //传递数据之用 private IFeatureClass pCommonPolygonClass; private IFeatureClass pCommonPolylineClass; private IFeatureClass pCommonPointClass; private IFeatureWorkspace pPublicFeatureWorkspace=null; private IArray pArray; private bool isFileExist; private bool isGDBExist; //传递数据库中的数据 private string XY; private string Globle; private double falseEasting; private double falseNorthing; private double centralMeridian; private double scaleFactor; private double latitudeOfOrigion; private string[] XandY; private IFeatureClass pPublicInMemoryClass; public Form1() { InitializeComponent(); } //Create GCS:Beijing54 private ISpatialReference GetGCSBeijing54() { ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass(); ISpatialReference pSR = pSRF.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_Beijing1954); pSR.SetDomain(-400,-400,400,400); return pSR; } //Create GCS:Xi'an80 private ISpatialReference GetGCSXian80() { ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass(); //pSRF.CreateProjectedCoordinateSystem(esriSRProjCS4Type.esriSRProjCS_Xian1980_GK_Zone_19); //pSRF.CreateGeographicCoordinateSystem((int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980); ISpatialReference pSR = pSRF.CreateGeographicCoordinateSystem((int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980); pSR.SetDomain(-400, -400, 400, 400); return pSR; } //Create GCS:WGS1984 private ISpatialReference GetGCSWGS1984() { ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass(); ISpatialReference pSR = pSRF.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); pSR.SetDomain(-400, -400, 400, 400); return pSR; } //Create PCS:Xian80 zone19 private ISpatialReference GetPCSXian80() { ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass(); ISpatialReference pSR = pSRF.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_Xian1980_GK_Zone_19); pSR.SetDomain(13876800, -10002100, 900709923374.099, 900733802274.099); return pSR; } //Create PCS:Beijng54 zone19 private ISpatialReference GetPCSBeijing54() { ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass(); ISpatialReference pSR = pSRF.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_Beijing1954GK_19); pSR.SetDomain(14876700, -10002300, 900734802174.099, 900709923174.099); return pSR; } //Create PCS:WGS1984 zong49 private ISpatialReference GetPCSWGS1984() { ISpatialReferenceFactory pSRF = new SpatialReferenceEnvironmentClass(); ISpatialReference pSR = pSRF.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_WGS1984UTM_49N); pSR.SetDomain(-5120900, -9998100, 900714804574.099, 900709927374.099); return pSR; } //Load 3 featureClasses with different spatial reference private void Form1_Load(object sender, EventArgs e) { axMapControl1.Map.SpatialReference = GetPCSBeijing54(); axMapControl2.Map.SpatialReference = GetPCSXian80(); axMapControl3.Map.SpatialReference = GetPCSWGS1984(); } private void TabsChanged() { } //add 3 layers to 3 mapcontrols with the different spatial reference private void button8_Click(object sender, EventArgs e) { IPoint pPoint=null ; IPolyline pL = null; object _missing = Type.Missing; IWorkspaceFactory pSdeWorkspaceFactory = new SdeWorkspaceFactory(); IPropertySet pPropertySet= new PropertySetClass(); pPropertySet.SetProperty("Server","siwei-gr7bzmd3q"); pPropertySet.SetProperty("Instance","5008"); pPropertySet.SetProperty("Database","sdeTest"); pPropertySet.SetProperty("user","sa"); pPropertySet.SetProperty("password","zhangjun1130"); pPropertySet.SetProperty("version","sde.DEFAULT"); IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pSdeWorkspaceFactory.Open(pPropertySet, 0); pPublicFeatureWorkspace =pFeatureWorkspace; IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pFeatureWorkspace; IFeatureClass pFeatureClass; IFeatureLayer pFeatureLayer; pFeatureClass = pFeatureWorkspace.OpenFeatureClass("sdeTest.DBO.DomBeijing54"); pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureClass; axMapControl1.AddLayer(pFeatureLayer); pFeatureClass = pFeatureWorkspace.OpenFeatureClass("sdeTest.DBO.DomXian80"); pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureClass; axMapControl2.AddLayer(pFeatureLayer); pFeatureClass = pFeatureWorkspace.OpenFeatureClass("sdeTest.DBO.DomWGS84"); pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.FeatureClass = pFeatureClass; axMapControl3.AddLayer(pFeatureLayer); #region 暂时不用 //// 摄区 //#region 搞摄区 //pWorkspaceEdit.StartEditing(true); //pWorkspaceEdit.StartEditOperation(); // IFeatureClass pPolygonsClassOld = pFeatureWorkspace.OpenFeatureClass("polygons"); // ITable pTable = (ITable)pPolygonsClassOld; // if (pTable != null) // { // pTable.DeleteSearchedRows(null); // } //IFeatureClass pPolygonsClass = pFeatureWorkspace.OpenFeatureClass("polygons"); //isGDBExist = true; //IFeature pPolygonsFeaure; //pPolygonsFeaure= pPolygonsClass.CreateFeature(); //IPolygon pPolygon = new PolygonClass(); //IPointCollection pPointCollection = (IPointCollection)pPolygon; //pPoint = new PointClass(); //pPoint.PutCoords(10, 10); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(15, 10); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(15, 8); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(18, 8); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(18, 4); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(10, 4); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPolygonsFeaure.Shape = pPolygon; //pPolygon.Close(); //pPolygonsFeaure.Store(); //pPolygonsFeaure = pPolygonsClass.CreateFeature(); //pPolygon = new PolygonClass(); //pPointCollection = (IPointCollection)pPolygon; //pPoint = new PointClass(); //pPoint.PutCoords(20, 8); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(25, 8); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(25, 4); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(20, 4); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPolygonsFeaure.Shape = pPolygon; //pPolygon.Close(); //pPolygonsFeaure.Store(); //#endregion //// 航线 //#region 搞航线 //IFeatureClass pPolylineClass = pFeatureWorkspace.OpenFeatureClass("polylines"); //IFeature pPolylinesFeature = null; //pPolylinesFeature = pPolylineClass.CreateFeature(); //pL = new PolylineClass(); //pPointCollection = (IPointCollection)pL; //pPoint = new PointClass(); //pPoint.PutCoords(9.5, 9.5); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(15.5, 9.5); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPolylinesFeature.Shape = pL; //pPolylinesFeature.Store(); //pPolylinesFeature = pPolylineClass.CreateFeature(); //pL = new PolylineClass(); //pPointCollection = (IPointCollection)pL; //pPoint = new PointClass(); //pPoint.PutCoords(9.5, 6.5); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(15.5, 6.5); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPolylinesFeature.Shape = pL; //pPolylinesFeature.Store(); //pPolylinesFeature = pPolylineClass.CreateFeature(); //pL = new PolylineClass(); //pPointCollection = (IPointCollection)pL; //pPoint = new PointClass(); //pPoint.PutCoords(9.5, 4.5); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPoint.PutCoords(15.5, 4.5); //pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); //pPolylinesFeature.Shape = pL; //pPolylinesFeature.Store(); //#endregion //// 像点 //#region 搞像点 //IFeatureClass pPointClass = pFeatureWorkspace.OpenFeatureClass("points"); //IFeature pPointFeature = null; //pPointFeature = pPointClass.CreateFeature(); //pPoint = new PointClass(); //pPoint.PutCoords(9.7, 9.5); //pPointFeature.Shape = pPoint; //pPointFeature.Store(); //pPointFeature = pPointClass.CreateFeature(); //pPoint = new PointClass(); //pPoint.PutCoords(12.7, 9.5); //pPointFeature.Shape = pPoint; //pPointFeature.Store(); //pPointFeature = pPointClass.CreateFeature(); //pPoint = new PointClass(); //pPoint.PutCoords(14.7, 9.5); //pPointFeature.Shape = pPoint; //pPointFeature.Store(); //pPointFeature = pPointClass.CreateFeature(); //pPoint = new PointClass(); //pPoint.PutCoords(9.7, 6.5); //pPointFeature.Shape = pPoint; //pPointFeature.Store(); //pPointFeature = pPointClass.CreateFeature(); //pPoint = new PointClass(); //pPoint.PutCoords(12.7, 6.5); //pPointFeature.Shape = pPoint; //pPointFeature.Store(); //pPointFeature = pPointClass.CreateFeature(); //pPoint = new PointClass(); //pPoint.PutCoords(14.7, 6.5); //pPointFeature.Shape = pPoint; //pPointFeature.Store(); //pPointFeature = pPointClass.CreateFeature(); //pPoint = new PointClass(); //pPoint.PutCoords(9.7, 4.5); //pPointFeature.Shape = pPoint; //pPointFeature.Store(); //pPointFeature = pPointClass.CreateFeature(); //pPoint = new PointClass(); //pPoint.PutCoords(12.7, 4.5); //pPointFeature.Shape = pPoint; //pPointFeature.Store(); //pPointFeature = pPointClass.CreateFeature(); //pPoint = new PointClass(); //pPoint.PutCoords(14.7, 4.5); //pPointFeature.Shape = pPoint; //pPointFeature.Store(); //#endregion //pWorkspaceEdit.StopEditOperation(); //pWorkspaceEdit.StopEditing(true); //pCommonPolygonClass = pPolygonsClass; //pCommonPolylineClass = pPolylineClass; //pCommonPointClass = pPointClass; #endregion } private void button9_Click(object sender, EventArgs e) { IWorkspaceFactory pFeatureWorkspaceFactory = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pFeatureWorkspaceFactory.OpenFromFile("D:/Work", 0); IFields pFields = pCommonPolygonClass.Fields; if (isFileExist == true) { IFeatureClass pPolygonsFeatureClassOld = pFeatureWorkspace.OpenFeatureClass("Newpolygons"); ITable pTable = (ITable)pPolygonsFeatureClassOld; if (pTable != null) { pTable.DeleteSearchedRows(null); } } #region 摄区出库 IFeatureClass pPolygonsFeatureClass = pFeatureWorkspace.CreateFeatureClass("Newpolygons", pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); isFileExist = true; IFeature pPolygonFeaure; IFeature pConvertFeature; //IFeatureCursor pPolygonCursor = pCommonPolygonClass.Search(null, true); //IFeature pFeaure = pPolygonCursor.NextFeature(); for (int i = 0; i < pArray.Count;i++ ) { pPolygonFeaure = pPolygonsFeatureClass.CreateFeature(); pConvertFeature = (IFeature)pArray.get_Element(i); pPolygonFeaure.Shape = pConvertFeature.Shape; pPolygonFeaure.Store(); } #endregion #region 航线出库 //pFields = pCommonPolylineClass.Fields; //IFeatureClass pPolylineFeatureClass = pFeatureWorkspace.CreateFeatureClass("Newpolines", pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); //IFeature pPloylineFeature; //IFeatureCursor pPolylineCursor = pCommonPolylineClass.Search(null, true); //IFeature pFeature1 = pPolylineCursor.NextFeature(); //while (pFeature1!= null) //{ // pPloylineFeature = pPolylineFeatureClass.CreateFeature(); // pPloylineFeature.Shape = pFeature1.Shape; // pPloylineFeature.Store(); // pFeature1 = pPolylineCursor.NextFeature(); //} #endregion #region 像点 //pFields = pCommonPointClass.Fields; //IFeatureClass pPointsFeatureClass = pFeatureWorkspace.CreateFeatureClass("Newpoints", pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); //IFeature pPointFeaure; //IFeatureCursor pPointCursor = pCommonPointClass.Search(null, true); //IFeature pFeature2 = pPointCursor.NextFeature(); //while(pFeature2!=null) //{ // pPointFeaure=pPointsFeatureClass.CreateFeature(); // pPointFeaure.Shape = pFeature2.Shape; // pPointFeaure.Store(); // pFeature2 = pPointCursor.NextFeature(); //} #endregion } private void radioButton2_CheckedChanged(object sender, EventArgs e) { } private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { } private void button1_Click(object sender, EventArgs e) { IFeatureLayer pPolygonLayer=new FeatureLayerClass(); IFeatureLayer pPolylineLayer= new FeatureLayerClass(); IFeatureLayer pPointLayer= new FeatureLayerClass(); pPolygonLayer.FeatureClass=pCommonPolygonClass; pPolylineLayer.FeatureClass=pCommonPolylineClass; pPointLayer.FeatureClass=pCommonPointClass; axMapControl1.AddLayer(pPolygonLayer); axMapControl1.AddLayer(pPolylineLayer); axMapControl1.AddLayer(pPointLayer); } private void axMapControl1_OnMouseDown_1(object sender, IMapControlEvents2_OnMouseDownEvent e) { if (e.button == 2) { ISpatialReference pSR = axMapControl1.Map.SpatialReference; ILayer pLayer = axMapControl1.Map.get_Layer(0); IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer; int count = pFeatureLayer.FeatureClass.FeatureCount(null); MessageBox.Show("投影名字是:" + pSR.Name + " 图层Feature个数是:" + count); } } private void axMapControl2_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { if (e.button == 2) { ISpatialReference pSR = axMapControl2.Map.SpatialReference; ILayer pLayer = axMapControl2.Map.get_Layer(0); IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer; int count = pFeatureLayer.FeatureClass.FeatureCount(null); MessageBox.Show("投影名字是:" + pSR.Name + " 图层Feature个数是:" + count); } } private void axMapControl3_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { if (e.button == 2) { ISpatialReference pSR = axMapControl3.Map.SpatialReference; ILayer pLayer = axMapControl3.Map.get_Layer(0); IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer; int count = pFeatureLayer.FeatureClass.FeatureCount(null); MessageBox.Show("投影名字是:" + pSR.Name + " 图层Feature个数是:" + count); } } private void tabControl1_Selected(object sender, TabControlEventArgs e) { } private void tabControl1_Click(object sender, EventArgs e) { } private void axMapControl3_TabIndexChanged(object sender, EventArgs e) { } //切换Tabs使用的方法 private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { switch (tabControl1.SelectedIndex) { case 0: axToolbarControl1.SetBuddyControl(axMapControl1); Console.WriteLine("0"); break; case 1: axToolbarControl1.SetBuddyControl(axMapControl2); Console.WriteLine("1"); break; case 2: axToolbarControl1.SetBuddyControl(axMapControl3); Console.WriteLine("2"); break; default: break; } } private void button2_Click(object sender, EventArgs e) { IEnvelope pEnvelop = new EnvelopeClass(); ILayer pLayer=axMapControl1.Map.get_Layer(0); IFeatureLayer pFeatureLayer=(IFeatureLayer)pLayer; IFeatureClass pFeatureClass=pFeatureLayer.FeatureClass; IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false); IFeature pFeature = pFeatureCursor.NextFeature(); while (pFeature != null) { pEnvelop.Union(pFeature.Shape.Envelope); pFeature = pFeatureCursor.NextFeature(); } pEnvelop.Expand(1.2, 1.2, true); axMapControl1.ActiveView.Extent = pEnvelop.Envelope; axMapControl1.Refresh(); } private void axMapControl1_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { label2.Text = e.mapX.ToString(); label3.Text = e.mapY.ToString(); } private void axMapControl2_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { label2.Text = e.mapX.ToString(); label3.Text = e.mapY.ToString(); } private void axMapControl3_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { label2.Text = e.mapX.ToString(); label3.Text = e.mapY.ToString(); } private void button3_Click(object sender, EventArgs e) { ICommand command = new ControlsAddDataCommandClass(); command.OnCreate(axMapControl1.Object); command.OnClick(); } //新建类似西安80PCS private IProjectedCoordinateSystem CreatePCSBasedOnXianan80(IGeographicCoordinateSystem pGCS, double falseEasting, double fasleNorthing, double centralMeridian, double scaleFactor, double latitudeOfOrigion)// { ISpatialReferenceFactory2 pSpatialReferenceFactory2=new SpatialReferenceEnvironmentClass(); IProjectionGEN pProjectionGEN=(IProjectionGEN)pSpatialReferenceFactory2.CreateProjection((int)esriSRProjectionType.esriSRProjection_GaussKruger); IGeographicCoordinateSystem pGeographicCoordinateSystem = pSpatialReferenceFactory2.CreateGeographicCoordinateSystem((int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980); (pGeographicCoordinateSystem as ISpatialReference).SetDomain(-400, -400, 400, 400); ILinearUnit pLinearUnit=(ILinearUnit)pSpatialReferenceFactory2.CreateUnit((int)esriSRUnitType.esriSRUnit_Meter); IParameter[] pParameters=pProjectionGEN.GetDefaultParameters(); for( int i=0;i< pParameters.Length;i++) { IParameter currentParameter=pParameters[i]; } //修改parameters IParameter falseEastingParameter = pParameters[0]; falseEastingParameter.Value = falseEasting; IParameter fasleNorthingParameter = pParameters[1]; fasleNorthingParameter.Value = fasleNorthing; IParameter centralMeridianParameter = pParameters[2]; centralMeridianParameter.Value =centralMeridian; IParameter scaleFactorParameter = pParameters[3]; scaleFactorParameter.Value =scaleFactor; IParameter latitudeOfOrigionParameter = pParameters[4]; latitudeOfOrigionParameter.Value =latitudeOfOrigion; IProjectedCoordinateSystemEdit pPCSE = new ProjectedCoordinateSystemClass(); object name = "new Dom Project cooridinate system"; object alias="nDPos"; object abbreviation="NDPCS"; object remarks = "most eastern province in China"; object usage="when making maps of new Dom"; object gcsobject = pGeographicCoordinateSystem as object; object unitobject = pLinearUnit as object; object projection = pProjectionGEN as object; object parameters = pParameters as object; pPCSE.Define(ref name,ref alias,ref abbreviation,ref remarks,ref usage,ref gcsobject,ref unitobject,ref projection,ref parameters); IProjectedCoordinateSystem pPCS = (IProjectedCoordinateSystem)pPCSE; { (pPCS as ISpatialReferenceTolerance).XYTolerance = 0.000001; pPCS.SetDomain(-10002100, -10002100, 900709923374.099, 900733802274.099); } return pPCS; } //新建类似北京54PCS private IProjectedCoordinateSystem CreatePCSBasedOnBeijing54(IGeographicCoordinateSystem pGCS, double falseEasting, double fasleNorthing, double centralMeridian, double scaleFactor, double latitudeOfOrigion)// { ISpatialReferenceFactory2 pSpatialReferenceFactory2 = new SpatialReferenceEnvironmentClass(); IProjectionGEN pProjectionGEN = (IProjectionGEN)pSpatialReferenceFactory2.CreateProjection((int)esriSRProjectionType.esriSRProjection_GaussKruger); IGeographicCoordinateSystem pGeographicCoordinateSystem = pSpatialReferenceFactory2.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_Beijing1954); (pGeographicCoordinateSystem as ISpatialReference).SetDomain(-400, -400, 400, 400); ILinearUnit pLinearUnit = (ILinearUnit)pSpatialReferenceFactory2.CreateUnit((int)esriSRUnitType.esriSRUnit_Meter); IParameter[] pParameters = pProjectionGEN.GetDefaultParameters(); for (int i = 0; i < pParameters.Length; i++) { IParameter currentParameter = pParameters[i]; } //修改parameters IParameter falseEastingParameter = pParameters[0]; falseEastingParameter.Value = falseEasting; IParameter fasleNorthingParameter = pParameters[1]; fasleNorthingParameter.Value = fasleNorthing; IParameter centralMeridianParameter = pParameters[2]; centralMeridianParameter.Value = centralMeridian; IParameter scaleFactorParameter = pParameters[3]; scaleFactorParameter.Value = scaleFactor; IParameter latitudeOfOrigionParameter = pParameters[4]; latitudeOfOrigionParameter.Value = latitudeOfOrigion; IProjectedCoordinateSystemEdit pPCSE = new ProjectedCoordinateSystemClass(); object name = "new Dom Project cooridinate system"; object alias = "nDPos"; object abbreviation = "NDPCS"; object remarks = "most eastern province in China"; object usage = "when making maps of new Dom"; object gcsobject = pGeographicCoordinateSystem as object; object unitobject = pLinearUnit as object; object projection = pProjectionGEN as object; object parameters = pParameters as object; pPCSE.Define(ref name, ref alias, ref abbreviation, ref remarks, ref usage, ref gcsobject, ref unitobject, ref projection, ref parameters); IProjectedCoordinateSystem pPCS = (IProjectedCoordinateSystem)pPCSE; { (pPCS as ISpatialReferenceTolerance).XYTolerance = 0.000001; pPCS.SetDomain(-10002300, -10002300, 900734802174.099, 900709923174.099); } return pPCS; } //新建类似WGS1984PCS private IProjectedCoordinateSystem CreatePCSBasedOnWGS1984(IGeographicCoordinateSystem pGCS, double falseEasting, double fasleNorthing, double centralMeridian, double scaleFactor, double latitudeOfOrigion)// { ISpatialReferenceFactory2 pSpatialReferenceFactory2 = new SpatialReferenceEnvironmentClass(); IProjectionGEN pProjectionGEN = (IProjectionGEN)pSpatialReferenceFactory2.CreateProjection((int)esriSRProjectionType.esriSRProjection_GaussKruger); IGeographicCoordinateSystem pGeographicCoordinateSystem = pSpatialReferenceFactory2.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); (pGeographicCoordinateSystem as ISpatialReference).SetDomain(-400, -400, 400, 400); ILinearUnit pLinearUnit = (ILinearUnit)pSpatialReferenceFactory2.CreateUnit((int)esriSRUnitType.esriSRUnit_Meter); IParameter[] pParameters = pProjectionGEN.GetDefaultParameters(); for (int i = 0; i < pParameters.Length; i++) { IParameter currentParameter = pParameters[i]; } //修改parameters IParameter falseEastingParameter = pParameters[0]; falseEastingParameter.Value = falseEasting; IParameter fasleNorthingParameter = pParameters[1]; fasleNorthingParameter.Value = fasleNorthing; IParameter centralMeridianParameter = pParameters[2]; centralMeridianParameter.Value = centralMeridian; IParameter scaleFactorParameter = pParameters[3]; scaleFactorParameter.Value = scaleFactor; IParameter latitudeOfOrigionParameter = pParameters[4]; latitudeOfOrigionParameter.Value = latitudeOfOrigion; IProjectedCoordinateSystemEdit pPCSE = new ProjectedCoordinateSystemClass(); object name = "new Dom Project cooridinate system"; object alias = "ndpos"; object abbreviation = "NDPCS"; object remarks = "most eastern province in China"; object usage = "when making maps of new Dom"; object gcsobject = pGeographicCoordinateSystem as object; object unitobject = pLinearUnit as object; object projection = pProjectionGEN as object; object parameters = pParameters as object; pPCSE.Define(ref name, ref alias, ref abbreviation, ref remarks, ref usage, ref gcsobject, ref unitobject, ref projection, ref parameters); IProjectedCoordinateSystem pPCS = (IProjectedCoordinateSystem)pPCSE; { (pPCS as ISpatialReferenceTolerance).XYTolerance = 0.000001; pPCS.SetDomain(-9998100, -9998100, 900714804574.099, 900709927374.099); } return pPCS; } private void button1_Click_1(object sender, EventArgs e) { ITable pTable=pPublicFeatureWorkspace.OpenTable("DomDataTest"); int indexofArea=pTable.Fields.FindField("AreaDefinition2"); int indexofGCS = pTable.Fields.FindField("Globle"); int indexoffalseEasting = pTable.Fields.FindField("falseEasting"); int indexoffalseNorthing = pTable.Fields.FindField("falseNorthing"); int indexofcentralMeridian = pTable.Fields.FindField("centralMeridian"); int indexofscaleFactor = pTable.Fields.FindField("scaleFactor"); int indexoflatitudeOfOrigion = pTable.Fields.FindField("LatitudeOfOrigion"); ICursor pCursor=pTable.Search(null,false); IRow pRow=pCursor.NextRow(); string StrXY=string.Empty; string StrGCS = string.Empty; while(pRow!=null) { StrGCS = (string)pRow.get_Value(indexofGCS); //如果pRow的“数据坐标系”是北京54 switch ( StrGCS ) { case "北京54": Globle = "北京54"; StrXY = (string)pRow.get_Value(indexofArea); XY = StrXY; falseEasting = (double)pRow.get_Value(indexoffalseEasting); falseNorthing = (double)pRow.get_Value(indexoffalseNorthing); centralMeridian=(double) pRow.get_Value(indexofcentralMeridian); scaleFactor = (double)pRow.get_Value(indexofscaleFactor); latitudeOfOrigion = (double)pRow.get_Value(indexoflatitudeOfOrigion); break; case "西安80": StrXY = (string)pRow.get_Value(indexofArea); XY = StrXY; break; case "WGS84": StrXY = (string)pRow.get_Value(indexofArea); XY=StrXY; break; default: break; } //如果pRow的“数据坐标系”是西安80 //如果pRow的“数据坐标系”是WGS84 pRow = pCursor.NextRow(); } } //解析字符串 private string[] ParseAreaDefinition2(string AreaStr) { int begin; int end; string[] split2=null; string[] split1; string sub = string.Empty; split1 = AreaStr.Split(new char[] { '+' }); foreach (string a in split1) { if (a.Trim() != "") { begin = a.IndexOf('('); end = a.IndexOf(')'); sub = a.Substring(begin + 1, end - begin - 1); split2 = sub.Split(new char[] { ';' }); } } return split2; } //Create inMemoryWorkspace private IWorkspace CreateInMemoryWorkspace() { // Create an InMemory workspace factory. IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass(); // Create an InMemory geodatabase. IWorkspaceName workspaceName = workspaceFactory.Create("", "MyWorkspace", null, 0); // Cast for IName. IName name = (IName)workspaceName; //Open a reference to the InMemory workspace through the name object. IWorkspace workspace = (IWorkspace)name.Open(); return workspace; } private void button2_Click_1(object sender, EventArgs e) { IWorkspace pInMemoryWorkspace = CreateInMemoryWorkspace(); IFeatureWorkspace pInMemoryFeatureWorkspace = (IFeatureWorkspace)pInMemoryWorkspace; //----------------------------------------------------------------------------- IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; IGeometryDef pGometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = (IGeometryDefEdit)pGometryDef; { pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; pGeometryDefEdit.GridCount_2 = 1; pGeometryDefEdit.AvgNumPoints_2 = 2; pGeometryDefEdit.HasM_2 = false; pGeometryDefEdit.HasZ_2 = false; pGeometryDefEdit.set_GridSize(0, 10); pGeometryDefEdit.SpatialReference_2 = (ISpatialReference)CreatePCSBasedOnBeijing54((IGeographicCoordinateSystem)GetGCSBeijing54(), falseEasting, falseNorthing, centralMeridian, scaleFactor, latitudeOfOrigion); } IField pField = new FieldClass(); IFieldEdit pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Globle"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldEdit.Length_2 = 50; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "Shape"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; pFieldEdit.GeometryDef_2 = pGometryDef; pFieldsEdit.AddField(pField); pField = new FieldClass(); pFieldEdit = (IFieldEdit)pField; pFieldEdit.Name_2 = "OBJECTID"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID; pFieldsEdit.AddField(pField); IFeatureClass pInMemoryFeatureClass = pInMemoryFeatureWorkspace.CreateFeatureClass("InMemory", pFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); //-------------------------------------------------------------------------------- IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pInMemoryFeatureWorkspace; pWorkspaceEdit.StartEditing(true); pWorkspaceEdit.StartEditOperation(); //设置几何字段 string[] strXY = ParseAreaDefinition2(XY); IPolygon pPolygon = new PolygonClass(); IPointCollection pPointCollection = (IPointCollection)pPolygon; IPoint pPoint; object _missing = Type.Missing; double x, y; for (int i = 0; i < strXY.Length; i++) { XandY = strXY[i].Split(new char[] { ',', ',' }); x = double.Parse(XandY[0]); y = double.Parse(XandY[1]); pPoint = new PointClass(); pPoint.PutCoords(x, y); pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); } pPolygon.Close(); //------------------------------------------------------------------------ IFeatureBuffer pFeatureBuffer = pInMemoryFeatureClass.CreateFeatureBuffer(); IFeatureCursor pFeatureCursor = pInMemoryFeatureClass.Insert(true); int index; { try { pFeatureBuffer.Shape = pPolygon; index = pInMemoryFeatureClass.Fields.FindField("Globle"); pFeatureBuffer.set_Value(index, Globle); } catch (Exception ex) { MessageBox.Show(ex.Message); } } pFeatureCursor.InsertFeature(pFeatureBuffer); pFeatureCursor.Flush(); //----------------------------------------------------------------------- pPublicInMemoryClass = pInMemoryFeatureClass; IFeatureLayer pFL = new FeatureLayerClass(); pFL.FeatureClass = pInMemoryFeatureClass; axMapControl1.AddLayer(pFL); //------------------------------------------------------------------------ } //复制字段,包括几何字段、非几何字段和空间参考的设置 private IFields CloneFeatureClassFields(IFeatureClass pFeatureClass, ISpatialReference pSpatialReference) { IFields pInputFields = pFeatureClass.Fields; IFields pOutputFields = null; IField pShapeField = null; IGeometryDefEdit pSFGeoDefEdit = null; IFieldChecker pFieldChecker = new FieldCheckerClass(); IEnumFieldError obj = null; pFieldChecker.Validate(pInputFields, out obj, out pOutputFields); pShapeField = pOutputFields.get_Field(pOutputFields.FindField(pFeatureClass.ShapeFieldName)); pSFGeoDefEdit = (IGeometryDefEdit)pShapeField.GeometryDef; pSFGeoDefEdit.SpatialReference_2 = pSpatialReference; return pOutputFields; } //创建内存FeatureClass private IFeatureClass CreateInMemoryFeatureClass(string name, IFields pInputFields) { IWorkspaceFactory pInMemoryWorkspaceFactory = new InMemoryWorkspaceFactoryClass(); IWorkspaceName pWorkspaceName = pInMemoryWorkspaceFactory.Create("", "InMemoryWorkspace", null, 0); IName pName = (IName)pWorkspaceName; IWorkspace pInMemoryWorkspace = (IWorkspace)pName.Open(); IFeatureWorkspace pInMemoryFeatureWorkspace = (IFeatureWorkspace)pInMemoryWorkspace; IFeatureClass pInMemoryFeatureClass = pInMemoryFeatureWorkspace.CreateFeatureClass(name, pInputFields, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); return pInMemoryFeatureClass; } private void button3_Click_1(object sender, EventArgs e) { IFeatureClass pFC = pPublicInMemoryClass; IFeatureClass pInsertFC = pPublicFeatureWorkspace.OpenFeatureClass("InsertDomBeijing54"); { } } private void button4_Click(object sender, EventArgs e) { } //非常重要 private void button4_Click_1(object sender, EventArgs e) { string[] strXY = ParseAreaDefinition2(XY); IPolygon pPolygon = new PolygonClass(); pPolygon.SpatialReference = (ISpatialReference)CreatePCSBasedOnBeijing54((IGeographicCoordinateSystem)GetGCSBeijing54(), falseEasting, falseNorthing, centralMeridian, scaleFactor, latitudeOfOrigion); IPointCollection pPointCollection = (IPointCollection)pPolygon; IPoint pPoint; object _missing = Type.Missing; double x, y; for (int i = 0; i < strXY.Length; i++) { XandY = strXY[i].Split(new char[] { ',', ',' }); x = double.Parse(XandY[0]); y = double.Parse(XandY[1]); pPoint = new PointClass(); pPoint.PutCoords(x, y); pPointCollection.AddPoint(pPoint, ref _missing, ref _missing); } pPolygon.Close(); pPolygon.Project(GetPCSBeijing54()); IFeatureClass pInsertFC = pPublicFeatureWorkspace.OpenFeatureClass("InsertDomBeijing54"); IFeatureBuffer pInsertFB = pInsertFC.CreateFeatureBuffer(); IFeatureCursor pInsertFCursor = pInsertFC.Insert(true); { pInsertFB.Shape = pPolygon; } pInsertFCursor.InsertFeature(pInsertFB); pInsertFCursor.Flush(); } //解析字符串 } }
我最近的研究成果(IGeometry.Project and IGeometry.SpatialReference)
既然是别人的研究成果 先转来 看看把。
相关文章推荐
- 我最近的研究成果(IGeometry.Project and IGeometry.SpatialReference)
- 移植Qt-4.8.5出现undefined reference to '__sync_sub_and_fetch_4'解决方法--转载
- oracle spatial geometry 转载
- Smart Rules a Tool for Building and Testing Business Rules(转载与CodeProject)
- ArcGIS Unknown Spatial Reference问题解疑(转载)
- 转载:How to create an automation project using MFC and a type library
- Framework and references vs project dependencies
- [转载 收藏]6 important .NET concepts: - Stack, heap, Value types, reference types, boxing and Unboxing.
- Git Reference---Sharing and Updating Projects
- Framework and references vs project dependencies
- Git Reference---Getting and Creating Projects
- 【转载】关于 oracle between and的用法!
- Presto源码分析(ScanFilterAndProjectOperator)
- How to: Handle Data Conflicts and Errors 【转载】
- 【转载】python 中的 and、or、and-or
- 最近在做Oracle临时表加载 转载一个以便查询
- Installing And Running Project Darkstar
- Android Studio更新之后Re-download dependencies and sync project (requires network)问题
- Finding a project and enhancement
- 69 Spring Interview Questions and Answers – The ULTIMATE List--reference