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

 转:http://blog.csdn.net/jamessunshine/article/details/44243589

环境:ArcGIS 10

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

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

1.1 IGeometry转换成Json字符转

 
[csharp]  view plain  copy
  1. /// <summary>  
  2.        /// IGeometry转成JSON字符串  
  3.        /// </summary>  
  4.        public static string GeometryToJsonString(ESRI.ArcGIS.Geometry.IGeometry geometry)  
  5.        {  
  6.            ESRI.ArcGIS.esriSystem.IJSONWriter jsonWriter = new ESRI.ArcGIS.esriSystem.JSONWriterClass();  
  7.            jsonWriter.WriteToString();  
  8.   
  9.            ESRI.ArcGIS.Geometry.JSONConverterGeometryClass jsonCon = new ESRI.ArcGIS.Geometry.JSONConverterGeometryClass();  
  10.            jsonCon.WriteGeometry(jsonWriter, null, geometry, false);  
  11.   
  12.            return Encoding.UTF8.GetString(jsonWriter.GetStringBuffer());  
  13.        }  

1.2 Json字符转解析成IGeometry

[csharp]  view plain  copy
  1. /// <summary>  
  2. /// JSON字符串转成IGeometry  
  3. /// </summary>  
  4. public static ESRI.ArcGIS.Geometry.IGeometry GeometryFromJsonString(string strJson, ESRI.ArcGIS.Geometry.esriGeometryType type)  
  5. {  
  6.     return GeometryFromJsonString(strJson, type, falsefalse);  
  7. }  
  8.   
  9. /// <summary>  
  10. /// JSON字符串转成IGeometry  
  11. /// </summary>  
  12. public static ESRI.ArcGIS.Geometry.IGeometry GeometryFromJsonString(string strJson, ESRI.ArcGIS.Geometry.esriGeometryType type,  
  13.     bool bHasZ, bool bHasM)  
  14. {  
  15.     ESRI.ArcGIS.esriSystem.IJSONReader jsonReader = new ESRI.ArcGIS.esriSystem.JSONReaderClass();  
  16.     jsonReader.ReadFromString(strJson);  
  17.   
  18.     ESRI.ArcGIS.Geometry.JSONConverterGeometryClass jsonCon = new ESRI.ArcGIS.Geometry.JSONConverterGeometryClass();  
  19.     return jsonCon.ReadGeometry(jsonReader, type, bHasZ, bHasM);  
  20. }  

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

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

2.1 实体类

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

[csharp]  view plain  copy
  1. //一个简单的实体类          
  2. public class XMInfo  
  3.        {  
  4.            public string XMBH { getset; }  
  5.            public ESRI.ArcGIS.Geometry.IPoint Location { getset; }  
  6.        }  

2.2 实体类转换为Json字符串

[csharp]  view plain  copy
  1. /// <summary>  
  2.       /// 实体类转换为Json字符串  
  3.       /// </summary>  
  4.       public static string XMInfoToJson(XMInfo objXMInfo)  
  5.       {  
  6.           //先将图形转为json字符串。  
  7.           string strJsonLocation = GeometryToJsonString(objXMInfo.Location);  
  8.           //将图形json字符串转为IJSONObject,注意使用IJSONReader2,而不是IJSONReader   
  9.           ESRI.ArcGIS.esriSystem.IJSONReader2 jsonReader = new ESRI.ArcGIS.esriSystem.JSONReaderClass();  
  10.           ESRI.ArcGIS.esriSystem.IJSONObject jsonObjLocation = jsonReader.ParseJSONString(strJsonLocation) as ESRI.ArcGIS.esriSystem.IJSONObject;  
  11.   
  12.           //将实体中的属性和图形填充至IJSONObject中  
  13.           ESRI.ArcGIS.esriSystem.IJSONObject jsonObjRet = new ESRI.ArcGIS.esriSystem.JSONObjectClass();  
  14.           jsonObjRet.AddString("XMBH", objXMInfo.XMBH);  
  15.           jsonObjRet.AddJSONObject("Location", jsonObjLocation);  
  16.   
  17.           return jsonObjRet.ToJSONString(null);  
  18.       }  

 

2.3 Json字符串解析成实体类

[csharp]  view plain  copy
  1. /// <summary>  
  2.        /// Json字符串解析为实体类  
  3.        /// </summary>  
  4.        public static XMInfo XMInfoFromJson(string strJson)  
  5.        {  
  6.            //先从json字符串转换成IJSONObject,注意使用IJSONReader2,而不是IJSONReader   
  7.            ESRI.ArcGIS.esriSystem.IJSONReader2 jsonReader = new ESRI.ArcGIS.esriSystem.JSONReaderClass();  
  8.            ESRI.ArcGIS.esriSystem.IJSONObject jsonObj = jsonReader.ParseJSONString(strJson) as ESRI.ArcGIS.esriSystem.IJSONObject;  
  9.   
  10.            //再从IJSONObject中取出需要的值  
  11.            string strXMBH = null;  
  12.            ESRI.ArcGIS.Geometry.IPoint pntLocation = null;  
  13.            ESRI.ArcGIS.esriSystem.IJSONObject jsonObjXMLocation = null;  
  14.   
  15.            jsonObj.TryGetValueAsString("XMBH"out strXMBH);  
  16.            jsonObj.TryGetValueAsObject("Location"out jsonObjXMLocation);  
  17.   
  18.   
  19.            //对于GEOMETRY,可以使用之前的GeometryFromJsonString方法将字符串再转换成图形  
  20.            pntLocation = GeometryFromJsonString(jsonObjXMLocation.ToJSONString(null), ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint)  
  21.                as ESRI.ArcGIS.Geometry.IPoint;  
  22.   
  23.            XMInfo xmInfo = new XMInfo()  
  24.            {  
  25.                XMBH = strXMBH,  
  26.                Location = pntLocation,  
  27.            };  
  28.            return xmInfo;  
  29.        }  

 

2.4 测试一下吧

[csharp]  view plain  copy
  1. /// <summary>  
  2.        /// 这是一个测试方法。。。  
  3.        /// </summary>  
  4.        public static void TestXMInfoJson()  
  5.        {  
  6.            XMInfo objXM = new XMInfo();  
  7.            objXM.XMBH = "13";  
  8.            objXM.Location = new ESRI.ArcGIS.Geometry.PointClass();  
  9.            objXM.Location.PutCoords(111.11, 222.22);  
  10.            objXM.Location.SpatialReference = new ESRI.ArcGIS.Geometry.SpatialReferenceEnvironmentClass().CreateSpatialReference(4326);  
  11.   
  12.            //测试实体转换成Json字符串  
  13.            string strJsonXM = JsonHelper.XMInfoToJson(objXM);  
  14.   
  15.            //测试字符串解析成实体  
  16.            XMInfo objXM2 = JsonHelper.XMInfoFromJson(strJsonXM);  
  17.   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArcGIS Engine和ENVI是两个不同的软件平台,分别由Esri和Harris Geospatial Solutions开发。ArcGIS Engine是一个GIS开发平台,用于构建和定制专业的地理信息系统应用程序。ENVI是一种专业的遥感图像分析软件,提供一系列功能强大的遥感图像处理和分析工具。 虽然ArcGIS Engine和ENVI是独立的软件平台,但它们可以通过集成和联合开发来实现更强大的功能。以下是一些可能的集成和联合开发方式: 1. 插件开发:可以使用ArcGIS Engine的开发工具(如ArcObjects)开发自定义插件,将ENVI的功能嵌入到ArcGIS Engine应用程序。这样,用户可以在ArcGIS Engine应用程序直接访问ENVI的图像处理和分析功能。 2. 数据转换:可以编写脚本或应用程序,将ArcGIS Engine的地理数据转换为ENVI可识别的格式,并将其导入到ENVI进行更深入的图像处理和分析。 3. 集成界面:可以创建自定义界面来集成ArcGIS Engine和ENVI的功能,并提供统一的用户体验。这样,用户可以在一个应用程序同时使用ArcGIS Engine和ENVI的功能,而无需切换不同的软件。 4. 工作流程自动化:可以使用脚本或编程语言(如Python)编写自动化工作流程,将ArcGIS Engine和ENVI的功能结合起来,实现更高效、自动化的遥感图像处理和分析。 需要注意的是,集成和联合开发ArcGIS Engine和ENVI需要一定的开发经验和技术知识。建议参考官方文档、示例代码和开发社区,以获取更详细的指导和支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值