昨天发了将Json格式的描述转换为Web API中的Geometry,今天发一个将ArcObjects中的IGeometry转成Json。
private string Geometry2Json(IGeometry pGeo)
{
int wkid = pGeo.SpatialReference.FactoryCode;
ESRI.ArcGIS.Geometry.IPoint pPoint = null;
ESRI.ArcGIS.Geometry.IPointCollection pPoints = null;
double x, y;
StringBuilder sb = new StringBuilder("{");
sb.Append(@"""geometries""" + ":{");
switch (pGeo.GeometryType)
{
#region Point2Json
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
pPoint = pGeo as ESRI.ArcGIS.Geometry.IPoint;
pPoint.QueryCoords(out x, out y);
string json = @"{""x"":" + x + @",""y"":" + y + @",""spatialReference"":" + @"{""wkid"":" + wkid + "}";
sb.Append(@"""point"":" + json);
break;
#endregion
#region Polyline2Json
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
pPoints = pGeo as ESRI.ArcGIS.Geometry.IPointCollection;
IPolyline pPolyline = pGeo as IPolyline;
IGeometryCollection pGeoetryCollection = pPolyline as IGeometryCollection;
if (pGeoetryCollection.GeometryCount >= 1)
{
sb.Append(@"""paths"":[");
for (int i = 0; i < pGeoetryCollection.GeometryCount; i++)
{
//paths可能有多个path,而每一个path是多个点,用两个for循环
if (pGeoetryCollection.get_Geometry(i) is IPath)
{
sb.Append("[");
pPoints = pGeoetryCollection.get_Geometry(i) as IPointCollection;
for (int j = 0; j < pPoints.PointCount;j++ )
{
pPoint = pPoints.get_Point(j);
pPoint.QueryCoords(out x, out y);
sb.Append("[" + x + "," + y + "],");
}
sb.Remove(sb.Length - 1, 1);
sb.Append("]");
}
}
sb.Append("]" + @",""spatialReference"":" + @"{""wkid"":" + wkid + "}");
}
break;
#endregion
#region Polygon2Json
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
pPoints = pGeo as ESRI.ArcGIS.Geometry.IPointCollection;
IPolygon pPolygon = pGeo as IPolygon;