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 {
 11     class Program
 12     {
 13         private static LicenseInitializer m_AOLicenseInitializer = new createmdbandinsertfc.LicenseInitializer();
 14     
 15         [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 table
122             // 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 class
125 
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 lines
131 
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 to
136             // 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 class
142 
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 2008 r2

ArcGIS 10.0 sp5

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

测试环境【一】

Windows server 2003

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吗?

转载于:https://www.cnblogs.com/5igis/p/5igis_11793.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值