public static bool ConvertFeatureClassToJson(IFeatureClass pFC,out string json,out Exception error)
{
error = null;
json = string.Empty;
try
{
ESRI.ArcGIS.Geodatabase.IRecordSetInit recordsetini = new RecordSetClass();
recordsetini.SetSourceTable(pFC as ITable, null);
ESRI.ArcGIS.Geodatabase.IRecordSet recordset = recordsetini as IRecordSet;
json = System.Text.Encoding.UTF8.GetString(ESRI.ArcGIS.SOESupport.Conversion.ToJson(recordset));
return true;
}
catch (Exception ex)
{
error = ex;
return false;
}
}
public static bool ConvertJsonToFeatureClass(string json, out IFeatureClass pFC, out Exception error)
{
pFC = null;
error = null;
try
{
string gdbName = Guid.NewGuid().ToString().Replace("-", "").Remove(8);
string layerName = Guid.NewGuid().ToString().Replace("-", "").Remove(8);
ESRI.ArcGIS.esriSystem.IJSONReader jsonReader = new JSONReaderClass();
jsonReader.ReadFromString(json);
ESRI.ArcGIS.Geodatabase.IJSONConverterGdb JSONConverterGdb = new JSONConverterGdbClass();
ESRI.ArcGIS.esriSystem.IPropertySet ppOriginalToNewFieldMap;
ESRI.ArcGIS.Geodatabase.IRecordSet pRecorset;
JSONConverterGdb.ReadRecordSet(jsonReader, null, null, out pRecorset, out ppOriginalToNewFieldMap);
ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = CreateWorkspaceInmemeory(gdbName, out error);
if (error != null || pWorkspace == null)
{
if (error == null)
{
error = new Exception("创建内存工作空间失败,请联系管理员。");
}
return false;
}
IRecordSet2 recordSet2 = pRecorset as IRecordSet2;
recordSet2.SaveAsTable(pWorkspace, layerName);
pFC = (pWorkspace as IFeatureWorkspace).OpenFeatureClass(layerName);
return true;
}
catch (Exception ex)
{
error = ex;
return false;
}
}
/// <summary>
/// 创建内存工作空间
/// </summary>
/// <param name="strName">名称</param>
/// <returns></returns>
public static IWorkspace CreateWorkspaceInmemeory(string strName, out Exception error)
{
error = null;
try
{
ESRI.ArcGIS.Geodatabase.IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
ESRI.ArcGIS.Geodatabase.IWorkspaceName workspaceName = workspaceFactory.Create("", strName, null, 0);
ESRI.ArcGIS.esriSystem.IName name = (IName)workspaceName;
ESRI.ArcGIS.Geodatabase.IWorkspace inmemWor = (IWorkspace)name.Open();
System.Runtime.InteropServices.Marshal.ReleaseComObject(name);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workspaceFactory);
return inmemWor;
}
catch (Exception ex) { error = ex; return null; }
}
要素类(IFeatureClass)与EsriJson互转
最新推荐文章于 2023-05-16 16:33:48 发布