zoukankan      html  css  js  c++  java
  • 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吗?

  • 相关阅读:
    吴恩达机器学习16:多变量线性回归(特征值以及多项式回归)
    吴恩达机器学习15:多变量线性回归(梯度下降运算中的实用技巧)
    吴恩达机器学习14:梯度下降以及平方差代价函数
    吴恩达机器学习13:多变量线性回归(使用梯度下降来求解多变量)
    吴恩达机器学习11:线性回归和多变量
    用通俗易懂的大白话讲解Map/Reduce原理
    漫画揭秘Hadoop MapReduce | 轻松理解大数据
    Pom.xml详解
    maven详细配置
    配置hadoop-eclipse-plugin(版本hadoop2.7.3):
  • 原文地址:https://www.cnblogs.com/5igis/p/5igis_11793.html
Copyright © 2011-2022 走看看