ArcObjects中的IGeometry转成Json

昨天发了将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;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d8592f7166e8af916f35648a66d275e4.html