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

4 篇文章 0 订阅

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值