1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > ArcGIS 10.0 ArcGIS 9.3.1数据生成实验--个人地理数据库

ArcGIS 10.0 ArcGIS 9.3.1数据生成实验--个人地理数据库

时间:2019-04-17 23:49:44

相关推荐

ArcGIS 10.0 ArcGIS 9.3.1数据生成实验--个人地理数据库

前段时间有个同事需要用到arcgis 工具将生成的分析数据转出为arcgis的格式存储到个人地理数据库中。但是在数据生成过程中,发现数据加载到arcmap放大到一定比例尺后数据就消失了,给我的第一个感觉,问题应该出现在坐标系统、容差设置等出了问题。于是我在自己的电脑上也实验了一下,发现无论怎么设置,都会有这个问题,即数据放大后就消失不显示。

但是如果新建一个个人地理数据库,再把生成的数据导入到新建的数据库中再放大显示就没有问题。所以很奇怪,直到今天的测试,才发现这有可能是10.0的一个bug,或者哪里没有设置好,看到的朋友如果直到的话,希望联系本人或者下面直接留言,望不吝赐教。

简单起见,数据都不设置坐标系统,仅设置地图数据框的显示单位

导出的要素数据

再放大也是毫无压力的

下面是测试代码

1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using ESRI.ArcGIS.esriSystem; 5 using ESRI.ArcGIS.Geodatabase; 6 using ESRI.ArcGIS.Geometry; 7 using ESRI.ArcGIS.DataSourcesGDB; 8 9 namespace createmdbandinsertfc 10 { 11class Program 12{ 13 private static LicenseInitializer m_AOLicenseInitializer = new createmdbandinsertfc.LicenseInitializer(); 1415 [STAThread()] 16 static void Main(string[] args) 17 { 18 //ESRI License Initializer generated code. 19 m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeArcInfo }, 20 new esriLicenseExtensionCode[] { }); 21 CretePGDB(); 22 //ESRI License Initializer generated code. 23 //Do not make any call to ArcObjects after ShutDownApplication() 24 m_AOLicenseInitializer.ShutdownApplication(); 25 } 26 27 private static void CretePGDB() 28 { 29 Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.AccessWorkspaceFactory"); 30 IWorkspaceFactory2 workspaceFactory = (IWorkspaceFactory2)Activator.CreateInstance(factoryType); 31 IWorkspaceName workspaceName = workspaceFactory.Create(@"c:\", "Sample.mdb", null, 0); 32 33 //// Cast the workspace name object to the IName interface and open the workspace. 34 IName name = (IName)workspaceName; 35 IWorkspace workspace = (IWorkspace)name.Open(); 36 37 //直接打开 38 //IWorkspaceFactory pwf = new AccessWorkspaceFactory(); 39 //IWorkspace workspace = pwf.OpenFromFile(@"c:\Sample.mdb", 0); 40 //IFeatureWorkspace pFW = workspace as IFeatureWorkspace; 41 //IFeatureDataset pFD = pFW.OpenFeatureDataset("DXT"); 42 43 ISpatialReferenceFactory3 spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); 44 ISpatialReference pSRF = new UnknownCoordinateSystemClass(); 45 ISpatialReferenceResolution pSRFResolu = (ISpatialReferenceResolution)pSRF; 46 pSRFResolu.ConstructFromHorizon(); 47 pSRF.SetZDomain(0, 1); 48 pSRF.SetMDomain(0, 1); 49 ISpatialReferenceTolerance pSRFtolerance = (ISpatialReferenceTolerance)pSRF; 50 pSRFtolerance.SetDefaultXYTolerance(); 51 pSRFtolerance.SetDefaultMTolerance(); 52 pSRFtolerance.SetDefaultZTolerance(); 53 IControlPrecision2 controlPrecision = pSRF as IControlPrecision2; 54 controlPrecision.IsHighPrecision = true; 55 56 //创建FeatureDataSet 57 IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace; 58 IFeatureDataset pDC = featureWorkspace.CreateFeatureDataset("DXT", pSRF); 59 //IFeatureClass pFC = CreateFeatureClass(pSRF, featureWorkspace); 60 IFeatureClass pFC = CreateFeatureClass(pSRF, pDC); 61 IGeodatabaseRelease pGDBR = workspace as IGeodatabaseRelease; 62 Console.WriteLine(pGDBR.MajorVersion + "." + pGDBR.MinorVersion + "-" + pGDBR.BugfixVersion); 63 pGDBR.Upgrade(); 64 Console.WriteLine(pGDBR.MajorVersion + "." + pGDBR.MinorVersion + "-" + pGDBR.BugfixVersion); 65 //IGeoDatasetSchemaEdit2 pGDSE = pDC as IGeoDatasetSchemaEdit2; 66 //pGDSE.AlterSpatialReference(pSRF); 67 //pGDSE.AlterResolution(1000,1, 1); 68 //根据创建的featuredataset创建featureclasss 69 //IFeatureClass pFC = CreateFeatureClass((pFD as IGeoDataset).SpatialReference, (pFD as IFeatureDataset)); 70 71 //直接打开已有的FC 72 //IFeatureClass pFC = pFW.OpenFeatureClass("节点"); 73 74 //IFeatureBuffer fb; 75 //IFeatureCursor insertCursor = pFC.Insert(true); 76 //IPoint point; 77 //for (int i = 0; i < 100; i++) 78 //{ 79 // fb = pFC.CreateFeatureBuffer(); 80 // point = new PointClass(); 81 // point.PutCoords(40000.0+i*1000, 4000.0-i*200); 82 // fb.Shape = point; 83 // insertCursor.InsertFeature(fb); 84 //} 85 IWorkspace pws = ((IDataset)pFC).Workspace; 86 IWorkspaceEdit pwe = pws as IWorkspaceEdit; 87 bool startEdit = pwe.IsBeingEdited(); 88 if (!startEdit) 89 { 90 pwe.StartEditing(false); 91 } 92 pwe.StartEditOperation(); 93 94 //是否需要清除原来数据 95 96 97 IFeature pFeature; 98 for (double i = 0; i < 180; i+=0.5) 99 {100 pFeature = pFC.CreateFeature();101 IPoint point = new PointClass();102 point.PutCoords(i ,Math.Sin(90*i*Math.PI/180.0));103 pFeature.Shape = point;104 pFeature.Store();105 pFeature = null;106 }107 108 pwe.StopEditOperation();109 startEdit = pwe.IsBeingEdited();110 if (startEdit)111 {112 pwe.StopEditing(true);113 }114 115 }116 117 //private static IFeatureClass CreateFeatureClass(ISpatialReference pSRF, IFeatureWorkspace pDC)118 private static IFeatureClass CreateFeatureClass(ISpatialReference pSRF, IFeatureDataset pDC)119 {120 // Locations are all relative to the location of the reference lines.121 // For geodatabase, signs feature class is at the same location and the streets table122 // is at the level of the containing feature dataset.123 // For shapefile, both are at the same location as the reference lines.124 // start with the initial set of required fields for a feature class125 126 IFeatureClassDescription fcDescription = new FeatureClassDescriptionClass();127 IObjectClassDescription ocDescription = fcDescription as IObjectClassDescription;128 IFieldsEdit outFields = ocDescription.RequiredFields as IFieldsEdit;129 130 // make the shape field to be of type polyline with the same spatial reference as the reference lines131 132 IField shapeField = outFields.get_Field(outFields.FindField(fcDescription.ShapeFieldName));133 IGeometryDefEdit geomDefEdit = shapeField.GeometryDef as IGeometryDefEdit;134 geomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;135 // Set the grid count to 1 and the grid size to 0 to allow ArcGIS to136 // determine a valid grid size.137 geomDefEdit.GridCount_2 = 1;138 geomDefEdit.set_GridSize(0, 0);139 geomDefEdit.SpatialReference_2 = pSRF;140 141 // add the other fields to the feature class142 143 IFieldEdit field = new FieldClass();144 field.Name_2 = "ExitName";145 field.Type_2 = esriFieldType.esriFieldTypeString;146 field.Length_2 = 10;147 outFields.AddField(field);148 149 field = new FieldClass();150 field.Name_2 = "X";151 field.Type_2 = esriFieldType.esriFieldTypeString;152 field.Length_2 = 75;153 outFields.AddField(field);154 155 field = new FieldClass();156 field.Name_2 = "Y";157 field.Type_2 = esriFieldType.esriFieldTypeString;158 field.Length_2 = 75;159 outFields.AddField(field);160 161 field = new FieldClass();162 field.Name_2 = "Branch" + "Lng";163 field.Type_2 = esriFieldType.esriFieldTypeString;164 field.Length_2 = 2;165 outFields.AddField(field);166 167 field = new FieldClass();168 field.Name_2 = "Toward";169 field.Type_2 = esriFieldType.esriFieldTypeString;170 field.Length_2 = 75;171 outFields.AddField(field);172 173 field = new FieldClass();174 field.Name_2 = "Toward" + "Lng";175 field.Type_2 = esriFieldType.esriFieldTypeString;176 field.Length_2 = 2;177 outFields.AddField(field);178 return pDC.CreateFeatureClass(179 "节点",180 outFields,181 ocDescription.InstanceCLSID,182 ocDescription.ClassExtensionCLSID,183 esriFeatureType.esriFTSimple,184 fcDescription.ShapeFieldName,185 ""186 );187 }188 189 190}191 }

View Code

本机环境

Windows server r2

ArcGIS 10.0 sp5

代码分别又在下面两个环境进行了测试,仅修改授权过程部分代码。

测试环境【一】

Windows server

ArcGIS 9.3.1

生成的数据可以正常放大显示,不会出现消失的现象

测试环境【二】

Windows 10

ArcGIS10.2

效果同10.0

没办法,直接打开MDB

比较也未有什么重要发现。

arcgis 931平台的PGDB版本2.3.0

arcgis 10.0和arcgis10.2的PGDB 3.0.0

难道真的是软件自身的bug吗?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。