Example #1
0
        /// <summary>
        /// Reads a <see cref="ILinearRing"/> geometry.
        /// </summary>
        /// <param name="reader">The reader</param>
        /// <param name="cs">The coordinate system</param>
        /// <param name="srid">The spatial reference id for the geometry.</param>
        /// <returns>A <see cref="ILinearRing"/> geometry</returns>
        protected ILinearRing ReadLinearRing(BinaryReader reader, CoordinateSystem cs, int srid)
        {
            var factory   = _geometryServices.CreateGeometryFactory(_precisionModel, srid, _sequenceFactory);
            int numPoints = reader.ReadInt32();
            var sequence  = ReadCoordinateSequenceRing(reader, numPoints, cs);

            return(factory.CreateLinearRing(sequence));
        }
        public static IGeometry ProjectTo(this IGeometry geometry, int srid)
        {
            var geometryFactory = _geometryServices.CreateGeometryFactory(srid);
            var transformation  = _coordinateSystemServices.CreateTransformation(geometry.SRID, srid);

            return(GeometryTransform.TransformGeometry(geometryFactory, geometry, transformation.MathTransform));
        }
Example #3
0
        public void DoTestThreading()
        {
            IGeometryServices services = GeometryServiceProvider.Instance;

            services.CreateGeometryFactory();
            int before = ((NtsGeometryServices)services).NumFactories;

            Debug.WriteLine("{0} factories already created", before);

            var wkts = new[]
            {
                "POINT ( 10 20 )",
                "LINESTRING EMPTY",
                "LINESTRING(0 0, 10 10)",
                "MULTILINESTRING ((50 100, 100 200), (100 100, 150 200))",
                "POLYGON ((100 200, 200 200, 200 100, 100 100, 100 200))",
                "MULTIPOLYGON (((100 200, 200 200, 200 100, 100 100, 100 200)), ((300 200, 400 200, 400 100, 300 100, 300 200)))",
                "GEOMETRYCOLLECTION (POLYGON ((100 200, 200 200, 200 100, 100 100, 100 200)), LINESTRING (250 100, 350 200), POINT (350 150))"
                ,
            };

            int[] srids = { 4326, 31467, 3857 };

            const int numJobs     = 30;
            var       waitHandles = new WaitHandle[numJobs];

            for (int i = 0; i < numJobs; i++)
            {
                waitHandles[i] = new AutoResetEvent(false);
                ThreadPool.QueueUserWorkItem(TestReaderInThreadedContext, new object[] { wkts, waitHandles[i], srids, i });
            }

            WaitHandle.WaitAll(waitHandles, 10000);

            int after = ((NtsGeometryServices)services).NumFactories;

            Console.WriteLine("Now {0} factories created", after);
            Assert.LessOrEqual(after, before + srids.Length);
        }
 public void SetSrid(int srid)
 {
     _srid    = srid;
     _factory = _geometryServices.CreateGeometryFactory(srid);
 }
        public static IPoint GeneratePoint(double x, double y, int srid)
        {
            var geometryFactory = _geometryServices.CreateGeometryFactory(srid);

            return(geometryFactory.CreatePoint(new Coordinate(x, y)));
        }