geomtry string 转换_ArcGIS Engine中 IGeometry和Json字符串的相互转换

本文介绍了如何在ArcGIS Engine中使用IGeometry、JSONConverterGeometryClass、IJSONWriter和IJSONReader进行几何对象与Json字符串的相互转换。详细展示了转换的代码实现,包括IGeometry转Json字符串、Json字符串转IGeometry,以及包含IGeometry的实体类与Json字符串的转换方法。
摘要由CSDN通过智能技术生成

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

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

1.1 IGeometry转换成Json字符转

///

///IGeometry转成JSON字符串///

public static stringGeometryToJsonString(ESRI.ArcGIS.Geometry.IGeometry geometry)

{

ESRI.ArcGIS.esriSystem.IJSONWriter jsonWriter= newESRI.ArcGIS.esriSystem.JSONWriterClass();

jsonWriter.WriteToString();

ESRI.ArcGIS.Geometry.JSONConverterGeometryClass jsonCon= newESRI.ArcGIS.Geometry.JSONConverterGeometryClass();

jsonCon.WriteGeometry(jsonWriter,null, geometry, false);returnEncoding.UTF8.GetString(jsonWriter.GetStringBuffer());

}

1.2 Json字符转解析成IGeometry

///

///JSON字符串转成IGeometry///

public static ESRI.ArcGIS.Geometry.IGeometry GeometryFromJsonString(stringstrJson, ESRI.ArcGIS.Geometry.esriGeometryType type)

{return GeometryFromJsonString(strJson, type, false, false);

}///

///JSON字符串转成IGeometry///

public static ESRI.ArcGIS.Geometry.IGeometry GeometryFromJsonString(stringstrJson, ESRI.ArcGIS.Geometry.esriGeometryType type,bool bHasZ, boolbHasM)

{

ESRI.ArcGIS.esriSystem.IJSONReader jsonReader= newESRI.ArcGIS.esriSystem.JSONReaderClass();

jsonReader.ReadFromString(strJson);

ESRI.ArcGIS.Geometry.JSONConverterGeometryClass jsonCon= newESRI.ArcGIS.Geometry.JSONConverterGeometryClass();returnjsonCon.ReadGeometry(jsonReader, type, bHasZ, bHasM);

}

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

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

2.1 实体类

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

//一个简单的实体类

public classXMInfo

{public string XMBH { get; set; }public ESRI.ArcGIS.Geometry.IPoint Location { get; set; }

}

2.2 实体类转换为Json字符串

///

///实体类转换为Json字符串///

public static stringXMInfoToJson(XMInfo objXMInfo)

{//先将图形转为json字符串。

string strJsonLocation =GeometryToJsonString(objXMInfo.Location);//将图形json字符串转为IJSONObject,注意使用IJSONReader2,而不是IJSONReader

ESRI.ArcGIS.esriSystem.IJSONReader2 jsonReader = newESRI.ArcGIS.esriSystem.JSONReaderClass();

ESRI.ArcGIS.esriSystem.IJSONObject jsonObjLocation= jsonReader.ParseJSONString(strJsonLocation) asESRI.ArcGIS.esriSystem.IJSONObject;//将实体中的属性和图形填充至IJSONObject中

ESRI.ArcGIS.esriSystem.IJSONObject jsonObjRet = newESRI.ArcGIS.esriSystem.JSONObjectClass();

jsonObjRet.AddString("XMBH", objXMInfo.XMBH);

jsonObjRet.AddJSONObject("Location", jsonObjLocation);return jsonObjRet.ToJSONString(null);

}

2.3 Json字符串解析成实体类

///

///Json字符串解析为实体类///

public static XMInfo XMInfoFromJson(stringstrJson)

{//先从json字符串转换成IJSONObject,注意使用IJSONReader2,而不是IJSONReader

ESRI.ArcGIS.esriSystem.IJSONReader2 jsonReader = newESRI.ArcGIS.esriSystem.JSONReaderClass();

ESRI.ArcGIS.esriSystem.IJSONObject jsonObj= jsonReader.ParseJSONString(strJson) asESRI.ArcGIS.esriSystem.IJSONObject;//再从IJSONObject中取出需要的值

string strXMBH = null;

ESRI.ArcGIS.Geometry.IPoint pntLocation= null;

ESRI.ArcGIS.esriSystem.IJSONObject jsonObjXMLocation= null;

jsonObj.TryGetValueAsString("XMBH", outstrXMBH);

jsonObj.TryGetValueAsObject("Location", outjsonObjXMLocation);//对于GEOMETRY,可以使用之前的GeometryFromJsonString方法将字符串再转换成图形

pntLocation = GeometryFromJsonString(jsonObjXMLocation.ToJSONString(null), ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint)asESRI.ArcGIS.Geometry.IPoint;

XMInfo xmInfo= newXMInfo()

{

XMBH=strXMBH,

Location=pntLocation,

};returnxmInfo;

}

2.4 测试

///

///这是一个测试方法。。。///

public static voidTestXMInfoJson()

{

XMInfo objXM= newXMInfo();

objXM.XMBH= "13";

objXM.Location= newESRI.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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值