Beispiel #1
0
        public static XYExtent GetExtent(XYLine line)
        {
            XYExtent res = new XYExtent();

            if (line.P1.X < line.P2.X)
            {
                res.XMin = line.P1.X;
                res.XMax = line.P2.X;
            }
            else
            {
                res.XMin = line.P2.X;
                res.XMax = line.P1.X;
            }
            if (line.P1.Y < line.P2.Y)
            {
                res.YMin = line.P1.Y;
                res.YMax = line.P2.Y;
            }
            else
            {
                res.YMin = line.P2.Y;
                res.YMax = line.P1.Y;
            }
            return(res);
        }
Beispiel #2
0
 public void Equals()
 {
   XYPoint p1 = new XYPoint(2,3);
   XYPoint p2 = new XYPoint(2,3);
   XYPoint p3 = new XYPoint(2,-3);
   XYLine l1 = new XYLine(2,3,3,4);
   Assert.AreEqual(true, p1.Equals(p1),"Test1");
   Assert.AreEqual(true, p1.Equals(p2),"Test2");
   Assert.AreEqual(false, p1.Equals(p3),"Test3");
   Assert.AreEqual(false, p1.Equals(l1),"Test4");
 }
Beispiel #3
0
        public void Equals()
        {
            XYLine     l1  = new XYLine(0, 3, 3, 0);
            XYLine     l2  = new XYLine(0, 3, 3, 0);
            XYLine     l3  = new XYLine(3, 3, 3, 0);
            XYPolyline pl1 = new XYPolyline();

            pl1.Points.Add(new XYPoint(0, 3));
            pl1.Points.Add(new XYPoint(3, 0));

            Assert.AreEqual(true, l1.Equals(l1), "Test1");
            Assert.AreEqual(true, l1.Equals(l2), "Test2");
            Assert.AreEqual(false, l1.Equals(l3), "Test3");
            Assert.AreEqual(false, l1.Equals(pl1), "Test4");
        }
Beispiel #4
0
        public void ConstructionTest()
        {
            XYLine xyLine1 = new XYLine(1, 2, 3, 4);

            Assert.AreEqual((double)1, xyLine1.P1.X);
            Assert.AreEqual((double)2, xyLine1.P1.Y);
            Assert.AreEqual((double)3, xyLine1.P2.X);
            Assert.AreEqual((double)4, xyLine1.P2.Y);

            XYLine xyLine2 = new XYLine(xyLine1);

            Assert.AreEqual(xyLine1.P1.X, xyLine2.P1.X);
            Assert.AreEqual(xyLine1.P1.Y, xyLine2.P1.Y);
            Assert.AreEqual(xyLine1.P2.X, xyLine2.P2.X);
            Assert.AreEqual(xyLine1.P2.Y, xyLine2.P2.Y);

            XYLine xyLine3 = new XYLine(new XYPoint(1, 2), new XYPoint(3, 4));

            Assert.AreEqual((double)1, xyLine3.P1.X);
            Assert.AreEqual((double)2, xyLine3.P1.Y);
            Assert.AreEqual((double)3, xyLine3.P2.X);
            Assert.AreEqual((double)4, xyLine3.P2.Y);
        }
Beispiel #5
0
        public void Write(GeoRefData geodata)
        {
            double[]           Xs   = null;
            double[]           Ys   = null;
            ShapeLib.ShapeType type = ShapeLib.ShapeType.NullShape;

            if (geodata.Geometry is IXYPoint)
            {
                IXYPoint p = (IXYPoint)geodata.Geometry;
                type = ShapeLib.ShapeType.Point;
                Xs   = new double[] { p.X };
                Ys   = new double[] { p.Y };
            }
            else if (geodata.Geometry.GetType().Equals(typeof(XYPolyline)))
            {
                XYPolyline p = (XYPolyline)geodata.Geometry;
                type = ShapeLib.ShapeType.PolyLine;
                int npoints = p.Points.Count;

                Xs = new double[npoints];
                Ys = new double[npoints];

                for (int i = 0; i < npoints; i++)
                {
                    Xs[i] = p.Points[i].X;
                    Ys[i] = p.Points[i].Y;
                }
            }
            else if (geodata.Geometry.GetType().Equals(typeof(XYLine)))
            {
                XYLine p = (XYLine)geodata.Geometry;
                type = ShapeLib.ShapeType.PolyLine;
                int npoints = 2;

                Xs = new double[] { p.P1.X, p.P2.X };
                Ys = new double[] { p.P1.Y, p.P2.Y };;
            }

            else if (geodata.Geometry.GetType().Equals(typeof(XYPolygon)))
            {
                XYPolygon p = (XYPolygon)geodata.Geometry;
                type = ShapeLib.ShapeType.Polygon;
                int npoints = p.Points.Count;

                Xs = new double[npoints];
                Ys = new double[npoints];
                p.Points.Reverse();

                for (int i = 0; i < npoints; i++)
                {
                    Xs[i] = p.Points[i].X;
                    Ys[i] = p.Points[i].Y;
                }
                p.Points.Reverse();
            }
            else if (geodata.Geometry.GetType().Equals(typeof(MultiPartPolygon)))
            {
                MultiPartPolygon p = (MultiPartPolygon)geodata.Geometry;
                type = ShapeLib.ShapeType.Polygon;
                int npoints = p.Polygons.Sum(pol => pol.Points.Count);

                foreach (var poly in p.Polygons)
                {
                    poly.Points.Reverse();
                }

                Xs = new double[npoints];
                Ys = new double[npoints];
                int i = 0;
                foreach (var point in p.Polygons.SelectMany(pol => pol.Points))
                {
                    Xs[i] = point.X;
                    Ys[i] = point.Y;
                    i++;
                }
                foreach (var poly in p.Polygons)
                {
                    poly.Points.Reverse();
                }
            }

            if (_shapePointer == IntPtr.Zero)
            {
                _shapePointer = ShapeLib.SHPCreate(_fileName, type);
            }

            if (_shapePointer == IntPtr.Zero)
            {
                throw new Exception("Could not create: " + Path.GetFullPath(_fileName) + "\nMake sure directory exists.");
            }


            IntPtr obj;

            if (geodata.Geometry.GetType().Equals(typeof(MultiPartPolygon)))
            {
                MultiPartPolygon p = (MultiPartPolygon)geodata.Geometry;

                int[] partstarts = new int[p.Polygons.Count];
                partstarts[0] = 0;
                ShapeLib.PartType[] partype = new ShapeLib.PartType[p.Polygons.Count];
                for (int i = 0; i < partype.Count(); i++)
                {
                    partype[i] = ShapeLib.PartType.Ring;
                }

                for (int i = 1; i < partstarts.Count(); i++)
                {
                    partstarts[i] = partstarts[i - 1] + p.Polygons[i - 1].Points.Count;
                }


                obj = ShapeLib.SHPCreateObject(type, -1, partstarts.Count(), partstarts, partype, Xs.Count(), Xs, Ys, null, null);
            }
            else
            {
                obj = ShapeLib.SHPCreateSimpleObject(type, Xs.Count(), Xs, Ys, null);
            }
            ShapeLib.SHPWriteObject(_shapePointer, -1, obj);
            ShapeLib.SHPDestroyObject(obj);
            _dbf.WriteData(geodata.Data);

            NoOfEntries++;
        }
Beispiel #6
0
 public static bool AIsPointInLineInterior(XYPoint point, XYLine line)
 {
     return(IsPointInLineInterior(point, line));
 }
Beispiel #7
0
 public static bool AIntersectionPoint(XYLine lineA, XYLine lineB, ref XYPoint intersectionPoint)
 {
     return(IntersectionPoint(lineA, lineB, ref intersectionPoint));
 }
Beispiel #8
0
 public static double ACalculateSharedLength(XYLine lineA, XYLine lineB)
 {
     return(CalculateSharedLength(lineA, lineB));
 }
Beispiel #9
0
 public static double ACalculateLineToPointDistance(XYLine line, XYPoint point)
 {
     return(CalculateLineToPointDistance(line, point));
 }
Beispiel #10
0
 public static double ACalculateLengthOfLineInsidePolygon(XYLine line, XYPolygon polygon)
 {
     return(CalculateLengthOfLineInsidePolygon(line, polygon));
 }