public static ServerGeometry ToServerGeometry(this SuperMap.Web.Core.Geometry geo)
{
if (geo == null)
{
return null;
}
ServerGeometry sg = new ServerGeometry();
Point2DCollection list = new Point2DCollection();
List<int> parts = new List<int>();
if (geo is GeoRegion)
{
for (int i = 0; i < ((GeoRegion)geo).Parts.Count; i++)
{
for (int j = 0; j < ((GeoRegion)geo).Parts[i].Count; j++)
{
list.Add(new Point2D(((GeoRegion)geo).Parts[i][j].X, ((GeoRegion)geo).Parts[i][j].Y));
}
parts.Add(((GeoRegion)geo).Parts[i].Count);
}
sg.Type = ServerGeometryType.REGION;
}
if (geo is GeoCircle)
{
for (int i = 0; i < ((GeoCircle)geo).Parts.Count; i++)
{
for (int j = 0; j < ((GeoCircle)geo).Parts[i].Count; j++)
{
list.Add(new Point2D(((GeoCircle)geo).Parts[i][j].X, ((GeoCircle)geo).Parts[i][j].Y));
}
parts.Add(((GeoCircle)geo).Parts[i].Count);
}
sg.Type = ServerGeometryType.REGION;
}
if (geo is GeoLine)
{
if (geo is Route)
{
sg = new ServerRoute();
}
for (int i = 0; i < ((GeoLine)geo).Parts.Count; i++)
{
for (int j = 0; j < ((GeoLine)geo).Parts[i].Count; j++)
{
Point2D point = new Point2D(((GeoLine)geo).Parts[i][j].X, ((GeoLine)geo).Parts[i][j].Y);
if (geo is Route)
{
point.Tag = ((Route)geo).Parts[i][j].Tag;
}
list.Add(point);
}
parts.Add(((GeoLine)geo).Parts[i].Count);
}
sg.Type = ServerGeometryType.LINE;
if (geo is Route)
{
sg.Type = ServerGeometryType.LINEM;
((ServerRoute)sg).Length = ((Route)geo).Length;
((ServerRoute)sg).MaxM = ((Route)geo).MaxM;
((ServerRoute)sg).MinM = ((Route)geo).MinM;
}
}
if (geo is GeoPoint)
{
list.Add(new Point2D(((GeoPoint)geo).X, ((GeoPoint)geo).Y));
parts.Add(list.Count);
sg.Type = ServerGeometryType.POINT;
}
sg.Points = list;
sg.Parts = parts;
sg.ID = -1;
return sg;
}