Beispiel #1
0
        public static List <Point2 <double> > BuildCoords(PositionSet ps)
        {
            if (ps == null)
            {
                return(null);
            }
            List <Point2 <double> > list = new List <Point2 <double> >();

            foreach (Position position in ps.Positions)
            {
                double num1 = double.NaN;
                int    num2;
                if (!num1.Equals(position.X))
                {
                    num1 = double.NaN;
                    num2 = !num1.Equals(position.Y) ? 1 : 0;
                }
                else
                {
                    num2 = 0;
                }
                if (num2 == 0)
                {
                    return(null);
                }
                list.Add(factory.ConstructPoint(position.X, position.Y));
            }
            return(list);
        }
Beispiel #2
0
 public static PolylineBag2 <double> BuildMultiLineString(PositionSet ps)
 {
     try
     {
         if (ps != null)
         {
             if (ps.Positions.Count > 0)
             {
                 List <Polyline2 <double> > list = new List <Polyline2 <double> >();
                 foreach (Position position in ps.Positions)
                 {
                     Polyline2 <double> lineString = BuildLineString(position as PositionSet);
                     if (lineString == null)
                     {
                         return(null);
                     }
                     list.Add(lineString);
                 }
                 if (list.Count > 0)
                 {
                     return(factory.ConstructPolylineBag(list));
                 }
             }
         }
     }
     catch
     {
     }
     return(null);
 }
Beispiel #3
0
        private static Position FetchCoordinates(JArray arr, PositionType hint)
        {
            if (arr == null || arr.Count <= 0)
            {
                return((Position)null);
            }
            if (arr[0].Type != JTokenType.Array)
            {
                try
                {
                    return(new Position(Extensions.Value <double>((IEnumerable <JToken>)arr[0]), Extensions.Value <double>((IEnumerable <JToken>)arr[1]), hint));
                }
                catch
                {
                }
                return((Position)null);
            }
            PositionSet positionSet = new PositionSet(hint);

            foreach (JToken jtoken in arr)
            {
                if (jtoken != null && jtoken.Type == JTokenType.Array)
                {
                    Position position = GeoJsonUtils.FetchCoordinates(jtoken as JArray);
                    if (position != null)
                    {
                        positionSet.Positions.Add(position);
                    }
                }
            }
            return((Position)positionSet);
        }
Beispiel #4
0
 public static Geometry2Bag <double> BuildGeometryCollection(PositionSet ps)
 {
     if (ps != null && (ps.GeometryHint == PositionType.GeometryCollection || ps.GeometryHint == PositionType.Unknown))
     {
         List <IGeometry2 <double> > list = new List <IGeometry2 <double> >();
         foreach (Position p in ps.Positions)
         {
             IGeometry2 <double> geometry = null;
             if (p.GeometryHint == PositionType.Point)
             {
                 geometry = BuildPoint(p);
             }
             else if (p.GeometryHint == PositionType.MultiPoint)
             {
                 geometry = BuildMultiPoint(p as PositionSet);
             }
             else if (p.GeometryHint == PositionType.LineString)
             {
                 geometry = BuildLineString(p as PositionSet);
             }
             else if (p.GeometryHint == PositionType.MultiLineString)
             {
                 geometry = BuildMultiLineString(p as PositionSet);
             }
             else if (p.GeometryHint == PositionType.Polygon)
             {
                 geometry = BuildPolygon(p as PositionSet);
             }
             else if (p.GeometryHint == PositionType.MultiPolygon)
             {
                 geometry = BuildMultiPolygon(p as PositionSet);
             }
             if (geometry == null)
             {
                 return(null);
             }
             list.Add(geometry);
         }
         if (list.Count > 0)
         {
             return(factory.ConstructGeometryBag(list));
         }
     }
     return(null);
 }
Beispiel #5
0
 public static Polyline2 <double> BuildLineString(PositionSet ps)
 {
     try
     {
         if (ps != null)
         {
             List <Point2 <double> > list = BuildCoords(ps);
             if (list != null && list.Count > 1)
             {
                 return(factory.ConstructPolyline(list));
             }
         }
     }
     catch
     {
     }
     return(null);
 }
Beispiel #6
0
 public static PointBag2 <double> BuildMultiPoint(PositionSet ps)
 {
     try
     {
         if (ps != null)
         {
             List <Point2 <double> > list = BuildCoords(ps);
             if (list != null && list.Count > 1)
             {
                 return(factory.ConstructPointBag((IEnumerable <Point2 <double> >)list));
             }
         }
     }
     catch
     {
     }
     return(null);
 }
Beispiel #7
0
 public static PolygonBag2 <double> BuildMultiPolygon(PositionSet ps)
 {
     if (ps != null && ps.Positions.Count > 0)
     {
         List <Polygon2 <double> > list = new List <Polygon2 <double> >();
         foreach (Position position in ps.Positions)
         {
             Polygon2 <double> polygon = BuildPolygon(position as PositionSet);
             if (polygon == null)
             {
                 return(null);
             }
             list.Add(polygon);
         }
         if (list.Count > 0)
         {
             return(factory.ConstructPolygonBag(list));
         }
     }
     return(null);
 }
Beispiel #8
0
 public static Polygon2 <double> BuildPolygon(PositionSet ps)
 {
     try
     {
         if (ps != null && ps.Positions.Count > 0)
         {
             List <Point2 <double> > list1 = BuildCoords(ps.Positions[0] as PositionSet);
             if (list1 != null && list1.Count > 2)
             {
                 if (ps.Positions.Count == 1)
                 {
                     return(factory.ConstructPolygon(factory.ConstructRing(list1)));
                 }
                 Ring2 <double>         linearRing1 = factory.ConstructRing(list1);
                 List <Ring2 <double> > list2       = new List <Ring2 <double> >();
                 for (int index = 1; index < ps.Positions.Count; ++index)
                 {
                     Position position = ps.Positions[index];
                     if (position != null)
                     {
                         List <Point2 <double> > list3 = BuildCoords(position as PositionSet);
                         if (list3 != null)
                         {
                             Ring2 <double> linearRing2 = factory.ConstructRing(list3);
                             list2.Add(linearRing2);
                         }
                     }
                 }
                 return(factory.ConstructPolygon(linearRing1, list2.ToArray()));
             }
         }
     }
     catch
     {
     }
     return(null);
 }