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
- ArcGIS Engine中 IGeometry和Json字符串的相互转换
- ArcGIS Engine中 IGeometry和Json字符串的相互转换
- ArcGIS Engine中 IGeometry和Json字符串的相互转换
- ArcGIS Engine中 IGeometry和Json字符串的相互转换
- js中json数据和字符串之间的相互转换
- Json 和字符串之间的相互转换
- json对象和字符串的相互转换
- json对象和字符串的相互转换
- JSON和字符串相互转换
- 在js中json字符串与json的相互转换
- JSON字符串与JSON对象的相互转换(在JavaScript和Java中)
- JSON对象和JSON字符串的相互转换方法
- json字符串和json对象的相互转换方法
- json字符串和json对象之间的相互转换
- JSON对象和JSON字符串间的相互转换
- json对象、json字符串的区别和相互转换
- JS中JSON字符串和对象相互转换
- C# 中 json对象与字符串的相互转换
- Dijkstra POJ
- JS获取-某一天是某个时间段内的 第几周,星期几
- Visualizing and understandingConvolutional Networks笔记3
- openOCD在ubuntu16.04上的安装
- List在调用add、remove方法后报java.lang.UnsupportedOperationException
- ArcGIS Engine中 IGeometry和Json字符串的相互转换
- MySQL优化分库分表,为什么要分表,分表以后如何进行排序查询,业务如何设计?
- 云服务器 ECS配置MySQL主从连接
- 实验测试1《C++ Primer》第五版——第九章 顺序容器
- web前端-HTML知识体系(初学者)
- yii 增 利用model
- java学习练习题
- Java类加载器ClassLoader总结
- mysql优化