private void buttonX_ok_Click(object sender, EventArgs e) { CGmpPoint xml = new CGmpPoint(); bool result = xml.ReadGmpXML(XMLPath); Regex regNum = new Regex("^[0-9]"); if (regNum.IsMatch(textBoxX3.Text) == true) { MessageBox.Show("数据集名称不能以数字开头命名", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } if (result == true) { try { IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass(); gdbPath = textBoxX2.Text; IFeatureWorkspace pFeatureWorkspace = workspaceFactory.OpenFromFile(gdbPath, 0) as IFeatureWorkspace; ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironment(); //ISpatialReference pSpatialReference = new UnknownCoordinateSystemClass(); ISpatialReference pSpatialReference = ClsGDBDataCommon.CreateProjectedCoordinateSystem(); pSpatialReference.SetDomain(-8000000, 8000000, -800000, 8000000); IFeatureDataset pFeatureDataset = pFeatureWorkspace.CreateFeatureDataset(textBoxX3.Text, pSpatialReference); IFeatureClass pFeatureclass = CreatePointFeatureClass(pFeatureDataset, xml); IFeatureClass pFCLine = CreatLineFC(pFeatureDataset, pFeatureclass); if (pFeatureclass == null || pFCLine == null) { MessageBox.Show("数据生成失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } IFeatureLayer pFPointLayer = new FeatureLayerClass(); pFPointLayer.FeatureClass = pFeatureclass; pFPointLayer.Name = textBoxX3.Text + "_Gmppoint"; IFeatureLayer pFLintLayer = new FeatureLayerClass(); pFLintLayer.FeatureClass = pFCLine; pFLintLayer.Name = textBoxX3.Text + "_GmpLine"; m_pMapCtl.AddLayer(pFLintLayer as ILayer, 0); m_pMapCtl.AddLayer(pFPointLayer as ILayer, 0); m_pMapCtl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); if (cmbImpSymbol.Text != null && symFilePath != null) { ImpSymbolFromFile(symFilePath, pFPointLayer, pFLintLayer); } //MessageBox.Show("数据已经生成", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } }
public void Test() { //Create source spatial reference. Type factoryType = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment"); System.Object obj = Activator.CreateInstance(factoryType); ISpatialReferenceFactory3 spatialReferenceFactory = obj as ISpatialReferenceFactory3; ISpatialReference spatialReference = spatialReferenceFactory.CreateGeographicCoordinateSystem((int) esriSRGeoCSType.esriSRGeoCS_WGS1984); spatialReference.SetFalseOriginAndUnits(-80.0000000232831, 39.9999999767169, 42949672.9); //Create an envelope and define its spatial reference. IEnvelope envelope = new EnvelopeClass(); envelope.PutCoords(-68.6076204314651, 49.6186709634653, -68.5531907607304, 49.6530789785679); envelope.SpatialReference = spatialReference; //Destination spatial reference. ISpatialReference projectedCoordinateSystem = spatialReferenceFactory.CreateProjectedCoordinateSystem((int) esriSRProjCSType.esriSRProjCS_NAD1927UTM_19N); //Define the XYDomain equivalent to SetFalseOriginAndUnits. projectedCoordinateSystem.SetDomain(500000, 600000, 5300000, 5600000); String report = "Print envelope coordinates before projection:\n" + envelope.XMin + " , " + envelope.YMin + " , " + envelope.XMax + " , " + envelope.YMax + "\n\n\n"; //Project envelope. IGeometry geometry = envelope as IGeometry2; geometry.Project(projectedCoordinateSystem as ISpatialReference); report = report + "Print envelope coordinates after projection:\n" + envelope.XMin + " , " + envelope.YMin + " , " + envelope.XMax + " , " + envelope.YMax; System.Windows.Forms.MessageBox.Show(report); }
/// <summary> /// 根据某一图层的范围,创建mdb文件中的featuredataset及其空间范围 /// </summary> /// <param name="motherWs">要创建featuredataset的工作空间</param> /// <param name="pGeoDataset">featuredataset所要依据的空间参考和空间范围</param> /// 这个函数要改!! public static void CreateDatasetInWs(IWorkspace motherWs, IGeoDataset pGeoDataset, string datasetName) { try { ISpatialReference pSpatialRef = null; IFeatureDataset pFtDs = null; if (pGeoDataset != null) { pSpatialRef = pGeoDataset.SpatialReference; IControlPrecision2 controlPrecision2 = pSpatialRef as IControlPrecision2; if (!controlPrecision2.IsHighPrecision) { controlPrecision2.IsHighPrecision = true; } IEnvelope pEnv = pGeoDataset.Extent; pEnv.Expand(1.5, 1.5, true); pSpatialRef.SetDomain(pEnv.XMin, pEnv.XMax, pEnv.YMin, pEnv.YMax); ISpatialReferenceTolerance pSpatialTolerance = (ISpatialReferenceTolerance)pSpatialRef; double dXYTolerance = pSpatialTolerance.XYTolerance; double dZTolerance = pSpatialTolerance.ZTolerance; ISpatialReferenceResolution pSpatialRefResolution = (ISpatialReferenceResolution)pSpatialRef; pSpatialRefResolution.set_XYResolution(true, dXYTolerance * 0.1); pSpatialRefResolution.set_ZResolution(true, dZTolerance * 0.1); pSpatialRefResolution.MResolution = pSpatialTolerance.MTolerance * 0.1; pFtDs = ((IFeatureWorkspace)motherWs).CreateFeatureDataset(datasetName, pSpatialRef); } else { pSpatialRef = new UnknownCoordinateSystemClass(); ISpatialReferenceTolerance pSpatialTolerance = (ISpatialReferenceTolerance)pSpatialRef; double dXYTolerance = pSpatialTolerance.XYTolerance; double dZTolerance = pSpatialTolerance.ZTolerance; ISpatialReferenceResolution pSpatialRefResolution = (ISpatialReferenceResolution)pSpatialRef; pSpatialRefResolution.set_XYResolution(true, dXYTolerance * 0.1); pSpatialRefResolution.set_ZResolution(true, dZTolerance * 0.1); pSpatialRefResolution.MResolution = pSpatialTolerance.MTolerance * 0.1; pFtDs = ((IFeatureWorkspace)motherWs).CreateFeatureDataset(datasetName, pSpatialRef); } } catch (Exception exp) { Hy.Common.Utility.Log.OperationalLogManager.AppendMessage(exp.ToString()); } }
public void TestXYResolution() { // Map layer. IMap map = (ArcMap.Application.Document as IMxDocument).FocusMap; // Map spatial reference and domain extent values. ISpatialReference mapSpatialReference = map.SpatialReference as ISpatialReference; double mapXMin1, mapXMax1, mapYMin1, mapYMax1; mapSpatialReference.GetDomain(out mapXMin1, out mapXMax1, out mapYMin1, out mapYMax1); // Map resolution ISpatialReferenceResolution mapSpatialReferenceResolution = mapSpatialReference as ISpatialReferenceResolution; double mapResolution = mapSpatialReferenceResolution.XYResolution[false]; // Get feature class for map layers IEnumLayer enumLayer = map.Layers; ILayer layer = enumLayer.Next(); IFeatureLayer featureLayer = layer as IFeatureLayer; IFeatureClass featureClass = featureLayer.FeatureClass; IGeoDataset geoDataset = featureClass as IGeoDataset; // Feature class spatial reference and domain extent values. ISpatialReference datasetSpatialReference = geoDataset.SpatialReference as ISpatialReference; double fClassXMin, fClassXMax, fClassYMin, fClassYMax; datasetSpatialReference.GetDomain(out fClassXMin, out fClassXMax, out fClassYMin, out fClassYMax); // Feature class resolution ISpatialReferenceResolution datasetSRResolution = datasetSpatialReference as ISpatialReferenceResolution; double datasetResolution = datasetSRResolution.XYResolution[false]; // Set map spatial reference domain extent to the feature class domain extent values mapSpatialReference.SetDomain(fClassXMin, fClassXMax, fClassYMin, fClassYMax); double mapXMin2, mapXMax2, mapYMin2, mapYMax2; mapSpatialReference.GetDomain(out mapXMin2, out mapXMax2, out mapYMin2, out mapYMax2); // New map resolution mapSpatialReferenceResolution = mapSpatialReference as ISpatialReferenceResolution; double mapResolution2 = mapSpatialReferenceResolution.XYResolution[false]; // Show results in a message box. MessageBox.Show( $"Map Resolution Before: {mapResolution}\n" + $"Dataset Resolution: {datasetResolution}\n" + $"Map Resolution After: {mapResolution2}\n" + $"Map Domain Before -> Xmin: {mapXMin1}, XMax: {mapXMax1}, YMin: {mapYMin1}, YMax: {mapYMax1}\n" + $"Data Domain -> Xmin: {fClassXMin}, XMax: {fClassXMax}, YMin: {fClassYMin}, YMax: {fClassYMax}\n" + $"Map Domain After -> Xmin: {mapXMin2}, XMax: {mapXMax2}, YMin: {mapYMin2}, YMax: {mapYMax2}"); }
public void createFeatureDataset(IWorkspace workspace, IFeatureWorkspace featureworkspace, IFeatureDataset featuredataset, ISpatialReference spatialRef, string user, string featureDatasetName) { featureworkspace = workspace as IFeatureWorkspace; //定义空间参考 // ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironment(); ISpatialReference spatialReference = spatialRef; spatialReference.SetDomain(-1000, -1000, 1000, 1000); IEnumDatasetName enumDatasetName; IDatasetName datasetName; string dsName = ""; enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureDataset); datasetName = enumDatasetName.Next(); bool isExist = false; //创建适量数据集 // string featureDatasetName = "TEST"; if (user == "") { dsName = featureDatasetName.ToUpper().ToString(); } else { dsName = user.ToUpper().ToString() + "." + featureDatasetName.ToUpper().ToString(); } while (datasetName != null) { if (datasetName.Name == dsName) { isExist = true; // MessageBox.Show("要素集已存在!"); Form form = new Form(); form.SetBounds(300, 300, 300, 300); setMessage.MessageShow("", "要素集已存在!", form); return; } datasetName = enumDatasetName.Next(); } if (isExist == false) { featuredataset = featureworkspace.CreateFeatureDataset(featureDatasetName, spatialReference); //MessageBox.Show("要素集创建成功!"); Form form = new Form(); form.SetBounds(300, 300, 300, 300); setMessage.MessageShow("", "要素集创建成功!", form); } }
/// <summary> /// 创建要素类 /// </summary> /// <param name="featureWorkspace"></param> /// <param name="name"></param> /// <param name="esriGeometryType"></param> /// <param name="fielddict"></param> /// <returns></returns> public static IFeatureClass CreateFeatureClass(IFeatureWorkspace featureWorkspace, string name, esriGeometryType esriGeometryType, Dictionary <string, GISField> fielddict) { IFields fields = new FieldsClass(); IFieldsEdit fieldsedit = fields as IFieldsEdit; IField field = new FieldClass(); IFieldEdit fieldedit = field as IFieldEdit; fieldedit.Name_2 = "shape"; fieldedit.Type_2 = esriFieldType.esriFieldTypeGeometry; IGeometryDef geometryDef = new GeometryDefClass(); IGeometryDefEdit pGeometryDefEdit = geometryDef as IGeometryDefEdit; pGeometryDefEdit.GeometryType_2 = esriGeometryType; ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference pSpatialReference = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); pSpatialReference.SetDomain(-6000000, 6000000, -6000000, 6000000); pGeometryDefEdit.SpatialReference_2 = pSpatialReference; fieldedit.GeometryDef_2 = geometryDef; fieldsedit.AddField(field); field = new FieldClass(); fieldedit = field as IFieldEdit; fieldedit.Name_2 = "FID"; fieldedit.Type_2 = esriFieldType.esriFieldTypeOID; fieldsedit.AddField(field); foreach (var entry in fielddict) { if (entry.Key.ToUpper() == "SHAPE" || entry.Key.ToUpper() == "OBJECTID") { continue; } field = new FieldClass(); fieldedit = field as IFieldEdit; fieldedit.Name_2 = entry.Key; fieldedit.Type_2 = entry.Value.Type; fieldsedit.AddField(field); } IFeatureClassDescription featureClassDescription = new FeatureClassDescriptionClass(); IObjectClassDescription objectClassDescription = featureClassDescription as IObjectClassDescription; IFeatureClass featureClass = featureWorkspace.CreateFeatureClass(name, fields, objectClassDescription.InstanceCLSID, objectClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, "shape", ""); return(featureClass); }
//修改空间参考范围值 public static bool SetDomain(ISpatialReference sr, double pMinX, double pMinY, double pMaxX, double pMaxY) { bool rbc = false; //设置范围值 if (sr is ISpatialReference2GEN) { (sr as ISpatialReference2GEN).SetDomain(pMinX, pMaxX, pMinY, pMaxY); } else { sr.SetDomain(pMinX, pMaxX, pMinY, pMaxY); } rbc = true; return(rbc); }
private IFeatureClass CreateFeatureClass(IFeatureWorkspace ipWorkspace, ISpatialReference ipSr) { //Ìí¼Óº¯ÊýCreateFeatureClass() IFieldsEdit ipFields = new FieldsClass(); ipFields.FieldCount_2 = 3; IFieldEdit ipField = new FieldClass(); ipField.Name_2 = "ObjectID"; ipField.AliasName_2 = "FID"; ipField.Type_2 = esriFieldType.esriFieldTypeOID; ipFields.set_Field(0, ipField); //Add others miscellaneous text field IFieldEdit ipField2 = new FieldClass(); ipField2.Name_2 = "SmallInteger"; ipField2.AliasName_2 = "short"; ipField2.Type_2 = esriFieldType.esriFieldTypeSmallInteger; ipFields.set_Field(1, ipField2); //Make the shape field //it will need a geometry definition, with a spatial reference IGeometryDefEdit ipGeoDef = new GeometryDefClass(); ipGeoDef.SpatialReference_2 = ipSr; ipGeoDef.GeometryType_2 = esriGeometryType.esriGeometryPoint; IFieldEdit ipField3 = new FieldClass(); ipField3.Name_2 = "Shape"; ipField3.AliasName_2 = "shape"; ipField3.Type_2 = esriFieldType.esriFieldTypeGeometry; ipField3.GeometryDef_2 = ipGeoDef; ipFields.set_Field(2, ipField3); ipSr.SetDomain(-60000000, 60000000, -60000000, 60000000); IFeatureDataset ipFeatDs = ipWorkspace.OpenFeatureDataset("tast1"); IFeatureClass ipFeatCls = ipFeatDs.CreateFeatureClass ("pit16er", ipFields, null, null, esriFeatureType. esriFTSimple, "Shape", ""); return(ipFeatCls); }
public void TestCreateFeatureClassWithValidArguments_Test(string pgdbFileName) { string pgdbFile = System.IO.Path.Combine(_dataDirectory, pgdbFileName); if (File.Exists(pgdbFile)) { File.Delete(pgdbFile); } GeodatabaseUtil.CreatePersonalGeodatabase(pgdbFile); IWorkspaceFactory pgdbWSFactory = new AccessWorkspaceFactoryClass(); IWorkspace workspace = pgdbWSFactory.OpenFromFile(pgdbFile, 0); ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference spatialReference = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983); spatialReference.SetDomain(-5120900, 900714804574.099, -9998100, 900709927374.099); GeodatabaseUtil.CreateFeatureClass(workspace, "Test", spatialReference, esriFeatureType.esriFTSimple, esriGeometryType.esriGeometryPoint, null, null, null, null); }
public void CoordConvertMap() { try { WaitForm.Start("开始坐标系转换,请稍后..."); IWorkspaceFactory pWsF = new AccessWorkspaceFactoryClass(); m_SpatialReference = new UnknownCoordinateSystemClass(); m_Envelop = new EnvelopeClass(); InitEnvelop(); m_SpatialReference.SetDomain(m_Envelop.XMin, m_Envelop.XMax, m_Envelop.YMin, m_Envelop.YMax); m_SpatialReference.SetZDomain(-1000, 2097151002.92969); m_SpatialReference.SetMDomain(-1000, 8388607011.71875); //pWsF.Create(m_Path, m_Name, null, 0); IWorkspace pWs2 = pWsF.OpenFromFile(m_Path + @"\" + m_Name, 0); string pWs1Path = Config.GetConfigValue("2DMdbPipe"); if (pWs1Path == "") { return; } pWs1 = pWsF.OpenFromFile(pWs1Path, 0); CreateWorkspaceDomains(pWs1, pWs2); for (int i = 0; i < m_Map.LayerCount; i++) { ILayer layer = m_Map.get_Layer(i); if (layer.Visible) { //WaitForm.SetCaption("正在转换图层" + layer.Name + ",请稍后..."); CoordConvertLayers(layer, m_SpatialReference); } } WaitForm.SetCaption("坐标系转换成功!"); WaitForm.Stop(); } catch (System.Exception ex) { WaitForm.Stop(); } }
//** 功能描述: 通过一个字段集,创建另外一个字段集,直接添加传入的字段集中的所有字段的话 // 会产生高版本和低版本不兼容的问题, public static IFields GetFieldsByFields(IFields pFields, ref ISpatialReference pDesSpatialReference, Dictionary <string, string> pDicField) { //pDesSpatialReference = null; //pDicField = null; int i = 0; IField pField = default(IField); IFieldEdit pFieldEdit = default(IFieldEdit); IFieldsEdit pFieldsEdit = default(IFieldsEdit); IField pCreateField = default(IField); ISpatialReference pOriSpatialReference = default(ISpatialReference); IGeometryDef pGeometryDef = default(IGeometryDef); IGeometryDefEdit pGeometryDefEdit = default(IGeometryDefEdit); double ymin = 0; double xmin = 0; double xmax = 0; double ymax = 0; double mMin = 0; double zmin = 0; double zmax = 0; double mMax = 0; IEnvelope pEnvelop = default(IEnvelope); IGeometry pGeometry = default(IGeometry); IClone pClone = default(IClone); //标识该字段是否被添加 bool bIsAddField = false; //应该把OID字段添加进去,否则会产生错误 pFieldsEdit = new FieldsClass(); for (i = 0; i <= pFields.FieldCount - 1; i++) { pField = pFields.get_Field(i); if (pField.Editable | pField.Type == esriFieldType.esriFieldTypeOID | pField.Type == esriFieldType.esriFieldTypeGlobalID | pField.Type == esriFieldType.esriFieldTypeGUID) { pClone = (IClone)pField; pCreateField = (IField)pClone.Clone(); //如果更改字段名称:如果是OID字段的话,即便不在dic中也要进行添加 if ((pDicField != null)) { if (pDicField.ContainsKey(Strings.Trim(pField.Name))) { bIsAddField = true; //修改字段的名称 pFieldEdit = (IFieldEdit)pCreateField; pFieldEdit.Name_2 = pDicField[Strings.Trim(pField.Name)]; //需不需要把别名赋过去,根据需要再看吧,现在看的话应该不要赋过去,因此一般字段名和别名是一样的 //如果赋过去的话,显示的是原字段的别名,即不是用户想看到的字段名 //pFieldEdit.AliasName = pField.AliasName } else if (pField.Type == esriFieldType.esriFieldTypeOID | pField.Type == esriFieldType.esriFieldTypeGlobalID | pField.Type == esriFieldType.esriFieldTypeGUID) { bIsAddField = true; } else { bIsAddField = false; } } else { bIsAddField = true; } if (pField.Type == esriFieldType.esriFieldTypeGeometry) { pGeometryDef = pCreateField.GeometryDef; pGeometryDefEdit = (IGeometryDefEdit)pGeometryDef; if ((pDesSpatialReference != null)) { pOriSpatialReference = pGeometryDef.SpatialReference; //从原来的空间参考中得到domain if (pOriSpatialReference.HasXYPrecision()) { pOriSpatialReference.GetDomain(out xmin, out xmax, out ymin, out ymax); } pEnvelop = new EnvelopeClass(); pEnvelop.PutCoords(xmin, ymin, xmax, ymax); pGeometry = pEnvelop; pGeometry.SpatialReference = pOriSpatialReference; pGeometry.Project(pDesSpatialReference); xmax = pEnvelop.XMax; xmin = pEnvelop.XMin; ymax = pEnvelop.YMax; ymin = pEnvelop.YMin; pDesSpatialReference.SetDomain(xmin, xmax, ymin, ymax); if (pOriSpatialReference.HasZPrecision()) { pOriSpatialReference.GetZDomain(out zmin, out zmax); pDesSpatialReference.SetZDomain(zmin, zmax); } if (pOriSpatialReference.HasMPrecision()) { pOriSpatialReference.GetMDomain(out mMin, out mMax); pDesSpatialReference.SetMDomain(mMin, mMax); } pGeometryDefEdit.SpatialReference_2 = pDesSpatialReference; } //修改grid的大小 if (pGeometryDef.GridCount != 0) { if (pGeometryDef.get_GridSize(0) < 100) { pGeometryDefEdit.set_GridSize(0, 100); } } bIsAddField = true; } if (bIsAddField == true) { pFieldsEdit.AddField(pCreateField); bIsAddField = false; } } } return(pFieldsEdit); }
/// <summary> /// 创建空间参考 /// </summary> /// <param name="headNode">VCT头节点</param> private ISpatialReference CreateProjection(HeadNode headNode) { try { string sPrjInfo = ""; //根据投影参数中的长半轴值,来判断是什么坐标系统(北京54,西安80,WGS-84,其他地方坐标系) //北京54 double dMajorAxis = headNode.MajorMax.Y; //读取参考椭球的名称 (名称,长半轴,扁率的倒数) string sProjection = headNode.Spheroid.Split(',')[0]; dMajorAxis = Math.Abs(dMajorAxis - 6378245); //if (fabs( m_dSemiMajorAxis - 6378245) < 0.0001) if (dMajorAxis < 0.0001) { sPrjInfo = string.Format("PROJCS[\"{0}\",GEOGCS[\"GCS_Beijing_1954\",DATUM[\"D_Beijing_1954\"" + ",SPHEROID[\"{1}\",6378140.0,298.257]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," + "PROJECTION[\"Gauss_Kruger\"],PARAMETER[\"False_Easting\",{2}],PARAMETER[\"False_Northing\",0.0]," + "PARAMETER[\"Central_Meridian\",{3}],PARAMETER[\"Scale_Factor\",1.0],PARAMETER[\"Latitude_Of_Origin\",0.0]," + "UNIT[\"Meter\",1.0]]", sProjection, "Gauss-Krueger", headNode.Excursion, headNode.Parametetor.OriginLongtitude); } //西安80 else { // sPrjInfo = string.Format("PROJCS["%s\",GEOGCS[\"GCS_Xian_1980\",DATUM[\"D_Xian_1980\",SPHEROID[\"%s\",6378140.0,298.257]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Gauss_Kruger\"],PARAMETER[\"False_Easting\",%s],PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",%f],PARAMETER[\"Scale_Factor\",1.0],PARAMETER[\"Latitude_Of_Origin\",0.0],UNIT[\"Meter\",1.0]]", m_strProjection, m_strSpheroid, sPianYi, m_lMeridian); sPrjInfo = string.Format("PROJCS[\"{0}\",GEOGCS[\"GCS_Xian_1980\",DATUM[\"D_Xian_1980\"," + "SPHEROID[\"{1}\",6378140.0,298.257]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]," + "PROJECTION[\"Gauss_Kruger\"],PARAMETER[\"False_Easting\",{2}],PARAMETER[\"False_Northing\",0.0]," + "PARAMETER[\"Central_Meridian\",{3}],PARAMETER[\"Scale_Factor\",1.0],PARAMETER[\"Latitude_Of_Origin\",0.0]," + "UNIT[\"Meter\",1.0]]", sProjection, "Gauss-Krueger", headNode.Parametetor.EastOffset, headNode.Parametetor.OriginLongtitude); } //将坐标信息写入到Prj文件 string sPrjFilename = Application.StartupPath + "tempPrj.prj"; FileStream fs = File.Create(sPrjFilename); StreamWriter sw = new StreamWriter(fs); sw.Write(sPrjInfo); sw.Close(); fs.Close(); //根据Prj文件生成空间参考 ISpatialReferenceFactory ipSpatialFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference pSpatialReference = ipSpatialFactory.CreateESRISpatialReferenceFromPRJFile(sPrjFilename); pSpatialReference.SetDomain(headNode.MajorMin.X,headNode.MajorMax.X,headNode.MajorMin.Y,headNode.MajorMax.Y);// //设置精度,防止cut失败 //设置六位小数精度。以保证导出时也是六位 ISpatialReferenceTolerance ipSrTolerance = pSpatialReference as ISpatialReferenceTolerance; ipSrTolerance.XYTolerance = 0.000001; ipSrTolerance.MTolerance = 0.001; ipSrTolerance.ZTolerance = 0.001; ISpatialReferenceResolution ipSrResolution = pSpatialReference as ISpatialReferenceResolution; ipSrResolution.MResolution = 0.001; ipSrResolution.set_XYResolution(true, 0.000001); ipSrResolution.set_ZResolution(true, 0.001); //删除生成的Prj文件 File.Delete(sPrjFilename); //ISpatialReference pSpatialReference; //ISpatialReferenceFactory pSpatialreferenceFactory; //pSpatialreferenceFactory = new SpatialReferenceEnvironmentClass(); //IGeographicCoordinateSystem pGeographicCoordinateSystem; //pGeographicCoordinateSystem = pSpatialreferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980); //pSpatialReference = pGeographicCoordinateSystem as ISpatialReference; //pSpatialReference.SetFalseOriginAndUnits(-180, -90, 1000000);// return pSpatialReference; } catch (Exception ex) { LogAPI.WriteLog("创建空间参考失败,系统默认创建空的空间参考!\r\n"); LogAPI.WriteErrorLog(ex); ISpatialReference pSpatialReference = new UnknownCoordinateSystemClass(); pSpatialReference.SetDomain(headNode.MajorMin.X, headNode.MajorMax.X, headNode.MajorMin.Y, headNode.MajorMax.Y);// return pSpatialReference; } }
//set setSpatialReferenceDoMain public void SetSpatialReferenceDoMain(ISpatialReference osri, double pMinX, double pMinY, double pMaxX, double pMaxY) { osri.SetDomain(pMinX, pMaxX, pMinY, pMaxY); }
//创建数据集(矢量数据集和影像数据集) private void button2_Click(object sender, EventArgs e) { featureWorkspace = workspace as IFeatureWorkspace; rasterWorkspace = workspace as IRasterWorkspaceEx; //定义空间参考 ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference spatialReference = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_Beijing1954); spatialReference.SetDomain(-1000, -1000, 1000, 1000); IEnumDatasetName enumDatasetName; IDatasetName datasetName; string dsName = ""; enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureDataset); datasetName = enumDatasetName.Next(); bool isExist = false; //创建矢量数据集 dsName = "SDE." + this.textBox6.Text; while (datasetName != null) { if (datasetName.Name == dsName) { isExist = true; } datasetName = enumDatasetName.Next(); } if (isExist == false) { featureDataset = featureWorkspace.CreateFeatureDataset(this.textBox6.Text, spatialReference); } //创建影像数据集 isExist = false; enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTRasterDataset); datasetName = enumDatasetName.Next(); dsName = "SDE." + this.textBox6.Text; while (datasetName != null) { if (datasetName.Name == dsName) { isExist = true; } datasetName = enumDatasetName.Next(); } if (isExist == false) { //设置存储参数 IRasterStorageDef rasterStorageDef = new RasterStorageDefClass(); rasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionUncompressed; rasterStorageDef.PyramidLevel = 1; rasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation; rasterStorageDef.TileHeight = 128; rasterStorageDef.TileWidth = 128; //设置坐标系统 IRasterDef rasterDef = new RasterDefClass(); ISpatialReference rasterDpatialRefrence = new UnknownCoordinateSystemClass(); rasterDef.SpatialReference = rasterDpatialRefrence; IGeometryDef geometryDef = new GeometryDefClass(); IGeometryDefEdit geometryDefedit = (IGeometryDefEdit)geometryDef; geometryDefedit.AvgNumPoints_2 = 5; geometryDefedit.GridCount_2 = 1; geometryDefedit.set_GridSize(0, 1000); geometryDefedit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; ISpatialReference spatialReference2 = new UnknownCoordinateSystemClass(); geometryDefedit.SpatialReference_2 = spatialReference2; rasterDataset = rasterWorkspace.CreateRasterDataset(this.textBox7.Text, 1, rstPixelType.PT_LONG, rasterStorageDef, "DEFAULTS", rasterDef, geometryDef); } }
private IFeatureClass MakeInMemoryFeatureClass(FusionTable ft, esriGeometryType geomType) { try { ISpatialReferenceFactory pSpatialRefFactory = new SpatialReferenceEnvironmentClass(); IGeographicCoordinateSystem pGeographicCoordSys = pSpatialRefFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); ISpatialReference pSpaRef = pGeographicCoordSys; pSpaRef.SetDomain(-180, 180, -90, 90); // Create an in-memory workspace factory. Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.InMemoryWorkspaceFactory"); IWorkspaceFactory workspaceFactory = Activator.CreateInstance(factoryType) as IWorkspaceFactory; // Create an in-memory workspace. IWorkspaceName workspaceName = workspaceFactory.Create("", "FusionTable", null, 0); // Cast for IName and open a reference to the in-memory workspace through the name object. IName name = workspaceName as IName; IWorkspace pWorkspace = name.Open() as IWorkspace; IFeatureWorkspace workspace = pWorkspace as IFeatureWorkspace; UID CLSID = new UID(); CLSID.Value = "esriGeodatabase.Feature"; IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = pFields as IFieldsEdit; pFieldsEdit.FieldCount_2 = ft.columns.Count + 1; IGeometryDef pGeomDef = new GeometryDef(); IGeometryDefEdit pGeomDefEdit = pGeomDef as IGeometryDefEdit; pGeomDefEdit.GeometryType_2 = geomType; pGeomDefEdit.SpatialReference_2 = pSpaRef; IField pField; IFieldEdit pFieldEdit; pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.AliasName_2 = "SHAPE"; pFieldEdit.Name_2 = "SHAPE"; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; pFieldEdit.GeometryDef_2 = pGeomDef; pFieldsEdit.set_Field(0, pFieldEdit); int k = 1; int i = 0; foreach (string col in ft.columns) { pField = new FieldClass(); pFieldEdit = pField as IFieldEdit; pFieldEdit.AliasName_2 = ft.columns[i]; pFieldEdit.Name_2 = ft.columns[i]; pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.set_Field(k, pFieldEdit); k++; i++; } string strFCName = System.IO.Path.GetFileNameWithoutExtension(System.IO.Path.GetRandomFileName()); char[] chars = strFCName.ToCharArray(); if (Char.IsDigit(chars[0])) { strFCName = strFCName.Remove(0, 1); } IFeatureClass pFeatureClass = workspace.CreateFeatureClass(strFCName, pFieldsEdit, CLSID, null, esriFeatureType.esriFTSimple, "SHAPE", ""); return(pFeatureClass); } catch (Exception ex) { MessageBox.Show(ex.Message); MessageBox.Show(ex.StackTrace); return(null); } }