ArcGIS Engine中 IGeometry和Json字符串的相互转换

来源:互联网 发布:android网络访问404 编辑:程序博客网 时间:2024/05/21 09:12

1. IGeometry和Json字符串的相互转换

将 ESRI.ArcGIS.Geometry.IGeometry转换成Json字符串,搜索网上很多都是字符串拼接的,偶然发现有现成的类可以转换,主要使用ESRI.ArcGIS.Geometry.JSONConverterGeometryClass、ESRI.ArcGIS.esriSystem.IJSONWriter、ESRI.ArcGIS.esriSystem.IJSONReader进行相互转换。

1.1 IGeometry转换成Json字符转

/// <summary>         /// IGeometry转成JSON字符串         /// </summary>         public static string GeometryToJsonString(ESRI.ArcGIS.Geometry.IGeometry geometry)         {             ESRI.ArcGIS.esriSystem.IJSONWriter jsonWriter = new ESRI.ArcGIS.esriSystem.JSONWriterClass();             jsonWriter.WriteToString();               ESRI.ArcGIS.Geometry.JSONConverterGeometryClass jsonCon = new ESRI.ArcGIS.Geometry.JSONConverterGeometryClass();             jsonCon.WriteGeometry(jsonWriter, null, geometry, false);               return Encoding.UTF8.GetString(jsonWriter.GetStringBuffer());         }  

1.2 Json字符转解析成IGeometry

/// <summary>  /// JSON字符串转成IGeometry  /// </summary>  public static ESRI.ArcGIS.Geometry.IGeometry GeometryFromJsonString(string strJson, ESRI.ArcGIS.Geometry.esriGeometryType type)  {      return GeometryFromJsonString(strJson, type, false, false);  }    /// <summary>  /// JSON字符串转成IGeometry  /// </summary>  public static ESRI.ArcGIS.Geometry.IGeometry GeometryFromJsonString(string strJson, ESRI.ArcGIS.Geometry.esriGeometryType type,      bool bHasZ, bool bHasM)  {      ESRI.ArcGIS.esriSystem.IJSONReader jsonReader = new ESRI.ArcGIS.esriSystem.JSONReaderClass();      jsonReader.ReadFromString(strJson);        ESRI.ArcGIS.Geometry.JSONConverterGeometryClass jsonCon = new ESRI.ArcGIS.Geometry.JSONConverterGeometryClass();      return jsonCon.ReadGeometry(jsonReader, type, bHasZ, bHasM);  }  


2.包含IGeometry的实体类和Json字符串的相互转换

包含IGeometry的实体类和Json字符串的转换,除了需要使用到上面的对象外,还需要使用AE中描述JSON对象的类ESRI.ArcGIS.esriSystem.IJSONObject(对于集合则为ESRI.ArcGIS.esriSystem.IJSONArray)

2.1 实体类

随便定义一个简单的实体类,包括一个项目编号普通属性和一个项目位置点图形属性。


      //一个简单的实体类                public class XMInfo         {             public string XMBH { get; set; }             public ESRI.ArcGIS.Geometry.IPoint Location { get; set; }         }  

2.2 实体类转换为Json字符串

      /// <summary>        /// 实体类转换为Json字符串        /// </summary>        public static string XMInfoToJson(XMInfo objXMInfo)        {            //先将图形转为json字符串。            string strJsonLocation = GeometryToJsonString(objXMInfo.Location);            //将图形json字符串转为IJSONObject,注意使用IJSONReader2,而不是IJSONReader             ESRI.ArcGIS.esriSystem.IJSONReader2 jsonReader = new ESRI.ArcGIS.esriSystem.JSONReaderClass();            ESRI.ArcGIS.esriSystem.IJSONObject jsonObjLocation = jsonReader.ParseJSONString(strJsonLocation) as ESRI.ArcGIS.esriSystem.IJSONObject;              //将实体中的属性和图形填充至IJSONObject中            ESRI.ArcGIS.esriSystem.IJSONObject jsonObjRet = new ESRI.ArcGIS.esriSystem.JSONObjectClass();            jsonObjRet.AddString("XMBH", objXMInfo.XMBH);            jsonObjRet.AddJSONObject("Location", jsonObjLocation);              return jsonObjRet.ToJSONString(null);        }  

2.3 Json字符串解析成实体类

       /// <summary>         /// Json字符串解析为实体类         /// </summary>         public static XMInfo XMInfoFromJson(string strJson)         {             //先从json字符串转换成IJSONObject,注意使用IJSONReader2,而不是IJSONReader              ESRI.ArcGIS.esriSystem.IJSONReader2 jsonReader = new ESRI.ArcGIS.esriSystem.JSONReaderClass();             ESRI.ArcGIS.esriSystem.IJSONObject jsonObj = jsonReader.ParseJSONString(strJson) as ESRI.ArcGIS.esriSystem.IJSONObject;               //再从IJSONObject中取出需要的值             string strXMBH = null;             ESRI.ArcGIS.Geometry.IPoint pntLocation = null;             ESRI.ArcGIS.esriSystem.IJSONObject jsonObjXMLocation = null;               jsonObj.TryGetValueAsString("XMBH", out strXMBH);             jsonObj.TryGetValueAsObject("Location", out jsonObjXMLocation);                 //对于GEOMETRY,可以使用之前的GeometryFromJsonString方法将字符串再转换成图形             pntLocation = GeometryFromJsonString(jsonObjXMLocation.ToJSONString(null), ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint)                 as ESRI.ArcGIS.Geometry.IPoint;               XMInfo xmInfo = new XMInfo()             {                 XMBH = strXMBH,                 Location = pntLocation,             };             return xmInfo;         }  


2.4 测试一下吧

       /// <summary>         /// 这是一个测试方法。。。         /// </summary>         public static void TestXMInfoJson()         {             XMInfo objXM = new XMInfo();             objXM.XMBH = "13";             objXM.Location = new ESRI.ArcGIS.Geometry.PointClass();             objXM.Location.PutCoords(111.11, 222.22);             objXM.Location.SpatialReference = new ESRI.ArcGIS.Geometry.SpatialReferenceEnvironmentClass().CreateSpatialReference(4326);               //测试实体转换成Json字符串             string strJsonXM = JsonHelper.XMInfoToJson(objXM);               //测试字符串解析成实体             XMInfo objXM2 = JsonHelper.XMInfoFromJson(strJsonXM);         }  


阅读全文
0 0
原创粉丝点击