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

 环境: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字符转

 
	/// <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);
        }




 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值