コード例 #1
0
ファイル: Program.cs プロジェクト: batuZ/outlines
        private static void TKDataF(OSGeo.OGR.Layer slopePolyLayer, int index)
        {
            double[] geoTansform = new double[6];
            dsmDataset.GetGeoTransform(geoTansform);

            int xTimes = (dsm_Xsize - 300) / 500;
            int xRemainder = (dsm_Xsize - 300) % 500;
            int yTimes = (dsm_Ysize - 300) / 500;
            int yRemainder = (dsm_Ysize - 300) % 500;
            int ax = xTimes, by = yTimes;

            if (xRemainder > 10)
            {
                ax++;
            }
            int x = index % ax;
            int y = index / ax;
            int xsize = 800, ysize = 800;

            if (x * 500 + 800 > dsm_Xsize)
            {
                xsize = dsm_Xsize - x * 500;
            }
            if (y * 500 + 800 > dsm_Ysize)
            {
                ysize = dsm_Ysize - y * 500;
            }

            double[] buffer      = new double[xsize * ysize];
            double[] slopebuffer = new double[xsize * ysize];
            dsmDataset.GetRasterBand(1).ReadRaster(x * 500, y * 500, xsize, ysize, buffer, xsize, ysize, 0, 0);
            slopeDataSet.GetRasterBand(1).ReadRaster(x * 500, y * 500, xsize, ysize, slopebuffer, xsize, ysize, 0, 0);

            BasicUnit bUnit = new BasicUnit(x * 500, y * 500, xsize, ysize, ImprotLevel, buffer, slopebuffer, geoTansform, imgNodata);

            List <OSGeo.OGR.Geometry> geolist = bUnit.Identify2();

            lock (slopePolyLayer)
            {
                foreach (OSGeo.OGR.Geometry item in geolist)
                {
                    if (item.GetGeometryType() == OSGeo.OGR.wkbGeometryType.wkbPolygon25D ||
                        item.GetGeometryType() == OSGeo.OGR.wkbGeometryType.wkbPolygon)
                    {
                        OSGeo.OGR.Feature oFea = new OSGeo.OGR.Feature(slopePolyLayer.GetLayerDefn());
                        oFea.SetGeometry(item);
                        slopePolyLayer.CreateFeature(oFea);
                    }
                }
            }
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: liubin888/GetDataTools
 private void labDSMin_TextChanged(object sender, EventArgs e)
 {
     if (labDSMin.Text != "")
     {
         OSGeo.GDAL.Gdal.AllRegister();
         OSGeo.GDAL.Dataset ds = OSGeo.GDAL.Gdal.Open(labDSMin.Text, OSGeo.GDAL.Access.GA_ReadOnly);
         double[]           a  = new double[6];
         ds.GetGeoTransform(a);
         double xx    = a[0];
         double yy    = a[3];
         double size  = a[1];
         double xSixe = ds.RasterXSize;
         double ySixe = ds.RasterYSize;
         labInFileInfo.Text += labDSMin.Text + ":\r" + "\r\n"
                               + "左上角X坐标:" + xx.ToString() + "\r"
                               + "左上角Y坐标:" + yy.ToString() + "\r"
                               + "像元尺寸:" + size.ToString() + "\r"
                               + "图像大小:" + xSixe.ToString() + "*" + ySixe.ToString();
         ds.Dispose();
     }
     else
     {
         labInFileInfo.Text = "";
     }
 }
コード例 #3
0
 /// <summary>
 /// Initialise ImageStore with a GDAL dataset
 /// </summary>
 /// <param name="dataset">Dataset in EPSG:4326</param>
 public GDALImageStore(
     string dataSetName,
     string sourcefilename,
     OSGeo.GDAL.Dataset dataset,
     string format)
 {
     //TODO: Allow serialization and deserialization of this class for persistency
     m_dataSetName    = dataSetName;
     m_dataset        = dataset;
     m_sourcefilename = sourcefilename;
     dataset.GetGeoTransform(m_transform);
     m_lines              = dataset.RasterYSize;
     m_pixels             = dataset.RasterXSize;
     m_imageFileExtension = "png";
     m_bands              = dataset.RasterCount;
     if (format.Equals("jpg"))
     {
         m_imageFileExtension = "jpg";
         //m_tileformat = ImageFileFormat.Jpg;
     }
     else if (format.Equals("bmp"))
     {
         m_imageFileExtension = "bmp";
         //m_tileformat = ImageFileFormat.Bmp;
     }
     else if (format.Equals("dds"))
     {
         m_imageFileExtension = "dds";
         //m_tileformat = ImageFileFormat.Dds;
     }
 }
コード例 #4
0
ファイル: GeoTransform.cs プロジェクト: noFuckToSay/SharpMap
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="gdalDataSet">The gdal data set</param>
        public GeoTransform(OSGeo.GDAL.Dataset gdalDataSet)
        {
            if (gdalDataSet == null)
            {
                throw new ArgumentException("GeoTransform constructor invoked with null dataset.", nameof(gdalDataSet));
            }

            gdalDataSet.GetGeoTransform(_transform);
            ComputeInverse();
        }
コード例 #5
0
ファイル: GeoTransform.cs プロジェクト: swordjock/FTAnalyzer
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="gdalDataset">The gdal dataset</param>
        public GeoTransform(OSGeo.GDAL.Dataset gdalDataset)
        {
            if (gdalDataset == null)
            {
                throw new ArgumentException("GeoTransform constructor invoked with null dataset.", "gdalDataset");
            }

            var array = new double[6];

            gdalDataset.GetGeoTransform(array);
            _transform = array;
            ComputeInverse();
        }
コード例 #6
0
ファイル: GdalRasterLayer.cs プロジェクト: cigannnb/SharpMap
        private SharpMap.Geometries.BoundingBox GetExtent()
        {
            if (_GdalDataset != null)
            {
                double[] geoTrans = new double[6];
                _GdalDataset.GetGeoTransform(geoTrans);
                GeoTransform GT = new GeoTransform(geoTrans);

                return(new SharpMap.Geometries.BoundingBox(GT.Left,
                                                           GT.Top + (GT.VerticalPixelResolution * _GdalDataset.RasterYSize),
                                                           GT.Left + (GT.HorizontalPixelResolution * _GdalDataset.RasterXSize),
                                                           GT.Top));
            }

            return(null);
        }
コード例 #7
0
        public void LoadAffineTransform(string filename)
        {
            using (OSGeo.GDAL.Dataset dataset = OSGeo.GDAL.Gdal.Open(filename, OSGeo.GDAL.Access.GA_ReadOnly))
            {
                AffineTransform = new double[6];
                dataset.GetGeoTransform(AffineTransform);

                string targetProjection = "GEOGCS[\"Moon 2000\", DATUM[\"D_Moon_2000\", SPHEROID[\"Moon_2000_IAU_IAG\",1737400.0,0.0]], PRIMEM[\"Greenwich\",0], UNIT[\"Decimal_Degree\",0.0174532925199433]]";

                var src = new OSGeo.OSR.SpatialReference(dataset.GetProjectionRef());
                var dst = new OSGeo.OSR.SpatialReference(targetProjection);

                pixelToLatLon = new OSGeo.OSR.CoordinateTransformation(src, dst);
                latLonToPixel = new OSGeo.OSR.CoordinateTransformation(dst, src);
            }
        }
コード例 #8
0
        private IEnvelope GetExtent()
        {
            if (_GdalDataset != null)
            {
                double[] geoTrans = new double[6];
                _GdalDataset.GetGeoTransform(geoTrans);
                GeoTransform GT = new GeoTransform(geoTrans);

                return(SharpMap.Converters.Geometries.GeometryFactory.CreateEnvelope(GT.Left,
                                                                                     GT.Top + (GT.VerticalPixelResolution * _GdalDataset.RasterYSize),
                                                                                     GT.Left + (GT.HorizontalPixelResolution * _GdalDataset.RasterXSize),
                                                                                     GT.Top));
            }

            return(null);
        }
コード例 #9
0
        public MemoryMappedInt16Terrain(string referenceImage)
        {
            Open(TerrainImageFile);

            using (OSGeo.GDAL.Dataset dataset = OSGeo.GDAL.Gdal.Open(referenceImage, OSGeo.GDAL.Access.GA_ReadOnly))
            {
                _affineTransform = new double[6];
                dataset.GetGeoTransform(_affineTransform);

                string projection = dataset.GetProjectionRef();

                var src = new OSGeo.OSR.SpatialReference(projection);
                var dst = new OSGeo.OSR.SpatialReference(PolarStereographic);
                _pixelToLineSample = new OSGeo.OSR.CoordinateTransformation(src, dst);
            }
        }
コード例 #10
0
ファイル: Form1.cs プロジェクト: liubin888/GetDataTools
        private void openFileDSM_FileOk(object sender, CancelEventArgs e)
        {
            labDSMin.Text = openFileDSM.FileName;
            OSGeo.GDAL.Gdal.AllRegister();
            OSGeo.GDAL.Dataset ds = OSGeo.GDAL.Gdal.Open(openFileDSM.FileName, OSGeo.GDAL.Access.GA_ReadOnly);
            double[]           a  = new double[6];
            ds.GetGeoTransform(a);
            double xx    = a[0];
            double yy    = a[3];
            double size  = a[1];
            double xSixe = ds.RasterXSize;
            double ySixe = ds.RasterYSize;

            labInFileInfo.Text += openFileDSM.SafeFileName + ":\r" + "\r\n"
                                  + "左上角X坐标:" + xx.ToString() + "\r"
                                  + "左上角Y坐标:" + yy.ToString() + "\r"
                                  + "像元尺寸:" + size.ToString() + "\r"
                                  + "图像大小:" + xSixe.ToString() + "*" + ySixe.ToString();
            ds.Dispose();
        }
コード例 #11
0
        private List <double[]> readImageCoordinatesBoundsInLonLat(OSGeo.GDAL.Dataset imageDataset)
        {
            var band = imageDataset.GetRasterBand(1);

            if (band == null)
            {
                return(null);
            }

            var width  = band.XSize;
            var height = band.YSize;

            double[] geoTransformerData = new double[6];
            imageDataset.GetGeoTransform(geoTransformerData);


            SpatialReference         currentReference = new SpatialReference(imageDataset.GetProjectionRef());
            SpatialReference         newReference     = GdalUtilities.getWgs84Reference();
            CoordinateTransformation ct = new CoordinateTransformation(currentReference, newReference);

            double[] northWestPoint = new double[2] {
                geoTransformerData[0], geoTransformerData[3]
            };
            ct.TransformPoint(northWestPoint);

            double[] southEastPoint = new double[2] {
                geoTransformerData[0] + geoTransformerData[1] * width,
                geoTransformerData[3] + geoTransformerData[5] * height
            };
            ct.TransformPoint(southEastPoint);


            return(new List <double[]> {
                northWestPoint, southEastPoint
            });
        }
コード例 #12
0
        public RasterClass(IRasterDataset dataset, string filename, IPolygon polygon)
        {
            try
            {
                FileInfo fi = new FileInfo(filename);
                _title    = fi.Name;
                _filename = filename;
                _dataset  = dataset;

                OSGeo.GDAL.Gdal.AllRegister();
                _gDS = OSGeo.GDAL.Gdal.Open(fi.FullName, 0);
                if (_gDS == null && _gDS.RasterCount == 0)
                {
                    _valid = false;
                    return;
                }

                _iWidth  = _gDS.RasterXSize;
                _iHeight = _gDS.RasterYSize;

                switch (fi.Extension.ToLower())
                {
                case ".adf":
                case ".gsd":
                    _type = RasterType.grid;
                    break;
                    //case ".jp2":
                    //    _type = RasterType.wavelet;
                    //    break;
                }

                using (OSGeo.GDAL.Band band = _gDS.GetRasterBand(1))
                {
                    if (_gDS.RasterCount == 1)
                    {
                        if (band.DataType != OSGeo.GDAL.DataType.GDT_Byte)
                        {
                            _type = RasterType.grid;
                        }
                    }
                    band.GetMinimum(out _min, out _hasNoDataVal);
                    band.GetMaximum(out _max, out _hasNoDataVal);
                    band.GetNoDataValue(out _nodata, out _hasNoDataVal);
                }
                OSGeo.GDAL.Driver driver = _gDS.GetDriver();

                double[] tfw = new double[6];
                _gDS.GetGeoTransform(tfw);

                string tfwFilename = fi.FullName.Substring(0, fi.FullName.Length - fi.Extension.Length);
                switch (fi.Extension.ToLower())
                {
                case ".jpg":
                case ".jpeg":
                    tfwFilename += ".jgw";
                    break;

                case ".jp2":
                    tfwFilename += ".j2w";
                    break;

                case ".tif":
                case ".tiff":
                    tfwFilename += ".tfw";
                    break;

                case ".ecw":
                    tfwFilename += ".eww";
                    break;

                default:
                    break;
                }

                FileInfo tfwInfo = new FileInfo(tfwFilename);

                _tfw = new TFWFile(tfw[0], tfw[3], tfw[1], tfw[2], tfw[4], tfw[5]);
                if (tfwInfo.Exists)
                {
                    _tfw.Filename = tfwFilename;
                }

                if (_tfw.X == 0.0 && _tfw.Y == 0.0 &&
                    Math.Abs(_tfw.dx_X) == 1.0 && _tfw.dx_Y == 0.0 &&
                    Math.Abs(_tfw.dy_Y) == 1.0 && _tfw.dy_X == 0.0 && driver != null)
                {
                    if (tfwInfo.Exists)
                    {
                        _tfw = new TFWFile(tfwFilename);
                    }
                    else
                    {
                        _tfw.isValid = false;
                    }
                }
                else
                {
                    // Bei dem Driver schein es nicht Pixelmitte sein, oder ist das bei GDAL generell
                    //if (driver.ShortName.ToLower() == "jp2openjpeg")
                    {
                        _tfw.X += (_tfw.dx_X / 2.0D + _tfw.dx_Y / 2.0D);
                        _tfw.Y += (_tfw.dy_X / 2.0D + _tfw.dy_Y / 2.0D);
                    }
                }


                FileInfo fiPrj = new FileInfo(fi.FullName.Substring(0, fi.FullName.Length - fi.Extension.Length) + ".prj");
                if (fiPrj.Exists)
                {
                    StreamReader sr  = new StreamReader(fiPrj.FullName);
                    string       wkt = sr.ReadToEnd();
                    sr.Close();

                    _sRef = gView.Framework.Geometry.SpatialReference.FromWKT(wkt);
                }
                else
                {
                    fiPrj = new FileInfo(fi.FullName.Substring(0, fi.FullName.Length - fi.Extension.Length) + ".wkt");
                    if (fiPrj.Exists)
                    {
                        StreamReader sr  = new StreamReader(fiPrj.FullName);
                        string       wkt = sr.ReadToEnd();
                        sr.Close();

                        _sRef = gView.Framework.Geometry.SpatialReference.FromWKT(wkt);
                    }
                }
                if (polygon != null)
                {
                    _polygon = polygon;
                }
                else
                {
                    calcPolygon();
                }
            }
            catch (Exception ex)
            {
                string errMsg = ex.Message;
                _valid = false;
            }
        }
コード例 #13
0
ファイル: GdalRasterLayer.cs プロジェクト: cigannnb/SharpMap
        private void GetPreview(OSGeo.GDAL.Dataset dataset, System.Drawing.Size size, Graphics g, SharpMap.Geometries.BoundingBox bbox)
        {
            double[] geoTrans = new double[6];
            dataset.GetGeoTransform(geoTrans);
            GeoTransform GT = new GeoTransform(geoTrans);

            int DsWidth  = dataset.RasterXSize;
            int DsHeight = dataset.RasterYSize;

            Bitmap bitmap     = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);
            int    iPixelSize = 3; //Format24bppRgb = byte[b,g,r]

            if (dataset != null)
            {
                /*
                 * if ((float)size.Width / (float)size.Height > (float)DsWidth / (float)DsHeight)
                 *  size.Width = size.Height * DsWidth / DsHeight;
                 * else
                 *  size.Height = size.Width * DsHeight / DsWidth;
                 */


                double left   = Math.Max(bbox.Left, _Envelope.Left);
                double top    = Math.Min(bbox.Top, _Envelope.Top);
                double right  = Math.Min(bbox.Right, _Envelope.Right);
                double bottom = Math.Max(bbox.Bottom, _Envelope.Bottom);


                int x1      = (int)GT.PixelX(left);
                int y1      = (int)GT.PixelY(top);
                int x1width = (int)GT.PixelXwidth(right - left);

                int y1height = (int)GT.PixelYwidth(bottom - top);


                bitmap = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);
                BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, size.Width, size.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);

                try
                {
                    unsafe
                    {
                        for (int i = 1; i <= (dataset.RasterCount > 3 ? 3 : dataset.RasterCount); ++i)
                        {
                            byte[]          buffer = new byte[size.Width * size.Height];
                            OSGeo.GDAL.Band band   = dataset.GetRasterBand(i);

                            //band.ReadRaster(x1, y1, x1width, y1height, buffer, size.Width, size.Height, (int)GT.HorizontalPixelResolution, (int)GT.VerticalPixelResolution);
                            band.ReadRaster(x1, y1, x1width, y1height, buffer, size.Width, size.Height, 0, 0);

                            int p_indx = 0;
                            int ch     = 0;

                            //#warning Check correspondance between enum and integer values
                            if (band.GetRasterColorInterpretation() == OSGeo.GDAL.ColorInterp.GCI_BlueBand)
                            {
                                ch = 0;
                            }
                            if (band.GetRasterColorInterpretation() == OSGeo.GDAL.ColorInterp.GCI_GreenBand)
                            {
                                ch = 1;
                            }
                            if (band.GetRasterColorInterpretation() == OSGeo.GDAL.ColorInterp.GCI_RedBand)
                            {
                                ch = 2;
                            }
                            if (band.GetRasterColorInterpretation() != OSGeo.GDAL.ColorInterp.GCI_PaletteIndex)
                            {
                                for (int y = 0; y < size.Height; y++)
                                {
                                    byte *row = (byte *)bitmapData.Scan0 + (y * bitmapData.Stride);
                                    for (int x = 0; x < size.Width; x++, p_indx++)
                                    {
                                        row[x * iPixelSize + ch] = buffer[p_indx];
                                    }
                                }
                            }
                            else //8bit Grayscale
                            {
                                for (int y = 0; y < size.Height; y++)
                                {
                                    byte *row = (byte *)bitmapData.Scan0 + (y * bitmapData.Stride);
                                    for (int x = 0; x < size.Width; x++, p_indx++)
                                    {
                                        row[x * iPixelSize]     = buffer[p_indx];
                                        row[x * iPixelSize + 1] = buffer[p_indx];
                                        row[x * iPixelSize + 2] = buffer[p_indx];
                                    }
                                }
                            }
                        }
                    }
                }
                finally
                {
                    bitmap.UnlockBits(bitmapData);
                }
            }
            g.DrawImage(bitmap, new System.Drawing.Point(0, 0));
        }
コード例 #14
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            string output = "";

            try
            {
                GdalConfiguration.ConfigureOgr();

                GdalConfiguration.ConfigureGdal();

                output = "It works!";
            }

            catch (Exception e)
            {
                output = "{0} Exception caught. " + e;
            }

            string input = "";

            DA.GetData(0, ref input);
            string file = input;

            bool flag = false;

            DA.GetData(1, ref flag);

            double minLat = 0.0;

            DA.GetData(2, ref minLat);

            double maxLat = 0.0;

            DA.GetData(3, ref maxLat);

            double minLon = 0.0;

            DA.GetData(4, ref minLon);

            double maxLon = 0.0;

            DA.GetData(5, ref maxLon);

            var boolListX = new List <bool>();
            var boolListY = new List <bool>();
            var boolOut   = new List <bool>();

            OSGeo.GDAL.Dataset ds = OSGeo.GDAL.Gdal.Open(file, OSGeo.GDAL.Access.GA_ReadOnly);

            double[] gt = new double[6];

            ds.GetGeoTransform(gt);

            var xres = gt[1];
            var yres = gt[5];

            var xsize = ds.RasterXSize;
            var ysize = ds.RasterYSize;

            var xmin = gt[0] + xres * 0.5;
            var xmax = gt[0] + (xres * xsize) - xres * 0.5;
            var ymin = gt[3] + (yres * ysize) + yres * 0.5;
            var ymax = gt[3] - yres * 0.5;

            var xx = EnumerableUtilities.RangePython(xmin, xmax + xres, xres).ToArray();
            var yy = EnumerableUtilities.RangePython(ymax + yres, ymin, yres).ToArray();

            var inMX = new List <double>().ToArray();
            var inMY = new List <double>().ToArray();

            var xNew = new List <double>();
            var yNew = new List <double>();

            var M = Acc.Matrix.MeshGrid(inMX, inMY);

            bool xFirst = false;

            if (flag == false)
            {
                M      = Acc.Matrix.MeshGrid(yy, xx);
                xFirst = false;
            }

            else if (flag == true)
            {
                for (int i = 0; i < xx.Length; ++i)
                {
                    if (xx[i] > minLat && xx[i] < maxLat)
                    {
                        xNew.Add(xx[i]);
                    }
                }

                for (int i = 0; i < yy.Length; ++i)
                {
                    if (yy[i] > minLon && yy[i] < maxLon)
                    {
                        yNew.Add(yy[i]);
                    }
                }

                if (yNew.Count() < xNew.Count())
                {
                    M      = Acc.Matrix.MeshGrid(yNew.ToArray(), xNew.ToArray());
                    xFirst = false;
                }

                else if (yNew.Count() > xNew.Count() || yNew.Count() == xNew.Count())
                {
                    M      = Acc.Matrix.MeshGrid(xNew.ToArray(), yNew.ToArray());
                    xFirst = true;
                }
            }

            int xSize = 0, ySize = 0;

            if (xFirst == true)
            {
                xSize = M.Item1.GetLength(0);
                ySize = M.Item2.GetLength(0);
            }

            else
            {
                xSize = M.Item2.GetLength(0);
                ySize = M.Item1.GetLength(0);
            }

            var x = new double[xSize, ySize];
            var y = new double[ySize, xSize];

            if (xFirst == true)
            {
                x = M.Item1;
                y = M.Item2;
            }

            else
            {
                x = M.Item2;
                y = M.Item1;
            }

            x = M.Item2;
            y = M.Item1;

            ds = null;

            DA.SetData(0, output);
            DA.SetDataList(1, x);
            DA.SetDataList(2, y);
        }
コード例 #15
0
ファイル: Program.cs プロジェクト: batuZ/outlines
        static void Main(string[] args)
        {
            OSGeo.GDAL.Gdal.AllRegister();
            OSGeo.OGR.Ogr.RegisterAll();
            //shp驱动
            OSGeo.OGR.Driver shpDataDriver = OSGeo.OGR.Ogr.GetDriverByName("ESRI shapefile");
            //shp数据源
            shpDataSet = shpDataDriver.CreateDataSource(shpSavePath, null);
            //img驱动
            gdalDriver = OSGeo.GDAL.Gdal.GetDriverByName("HFA");
            //dsm数据源
            dsmDataset = OSGeo.GDAL.Gdal.Open(dsmPath, OSGeo.GDAL.Access.GA_Update);
            //dsm数据信息
            dsmDataset.GetGeoTransform(dsm_Transform);
            dsm_Xsize = dsmDataset.RasterXSize;
            dsm_Ysize = dsmDataset.RasterYSize;
            //投影信息
            srs = dsmDataset.GetProjectionRef() == "" ? null : new OSGeo.OSR.SpatialReference(dsmDataset.GetProjectionRef());

            Stopwatch aTime = new Stopwatch(); aTime.Start();

            //1 坡度图
            buildSlope();
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //2 坡度线
            OSGeo.OGR.Layer pdx = getPDX(1);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();
            OSGeo.OGR.Layer slopeCleanLayer = cleanLayer(pdx, 200, 5000);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //3 等高线
            OSGeo.OGR.Layer dzx = getDZX_();
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();
            OSGeo.OGR.Layer dzxPolyLayer = cleanDZX(dzx);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //4 筛选
            OSGeo.OGR.Layer selectLayer = selectionFeatuers(slopeCleanLayer, dzxPolyLayer);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();
            OSGeo.OGR.Layer resLayer = cleanLayer_FF(selectLayer);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            // 最小外接矩形
            getMinOutLineFromLayerToLayer(resLayer);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //5 简化
            jianhua(resLayer, 175, 5);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //6 高度值 未完成
            //getH(resLayer);
            //StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            shpDataSet.Dispose();
            shpDataDriver.Dispose();
            dsmDataset.Dispose();
            gdalDriver.Dispose();

            //   aTime.Stop();
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: batuZ/outlines
        /// <summary>
        /// 以前的代码
        /// </summary>
        /// <param name="dsmDs"></param>
        /// <param name="oriFeat"></param>
        /// <param name="bufFeat"></param>
        /// <param name="subRasterOff_Size"></param>
        private static void getMaxMinValue_(OSGeo.GDAL.Dataset dsmDs, OSGeo.OGR.Feature oriFeat, OSGeo.OGR.Feature bufFeat, int[] subRasterOff_Size)
        {
            //拿到当前Feature对应的栅格值(数组)
            double[] rastValue = new double[subRasterOff_Size[2] * subRasterOff_Size[3]];
            //拿到全局Transfrom
            double[] Transfrom = new double[6];
            dsmDs.GetGeoTransform(Transfrom);

            //把SUBimg的值读进数组
            dsmDs.GetRasterBand(1).ReadRaster(
                subRasterOff_Size[0],
                subRasterOff_Size[1],
                subRasterOff_Size[2],
                subRasterOff_Size[3],
                rastValue,
                subRasterOff_Size[2],
                subRasterOff_Size[3],
                0, 0);

            OSGeo.OGR.Geometry oriGeom = oriFeat.GetGeometryRef();
            string             ddd     = oriFeat.GetFieldAsString("MAX");

            while (oriFeat.GetFieldAsString("MAX") == "")
            {
                //拿到数组中最大值的索引
                int maxId = Array.IndexOf(rastValue, rastValue.Max());

                //通过索引拿到空间坐标
                double maxX, maxY;
                StaticTools.indexToGeoSpace(maxId, subRasterOff_Size, Transfrom, out maxX, out maxY);

                //把空间坐标写进Geomtry
                OSGeo.OGR.Geometry maxGeom = new OSGeo.OGR.Geometry(OSGeo.OGR.wkbGeometryType.wkbPoint);
                maxGeom.AddPoint_2D(maxX, maxY);

                //判断坐标是否在Feature中,在则把值写入对应字段,不在则把当前值改为平均值

                if (maxGeom.Within(oriGeom))
                {
                    oriFeat.SetField("MAX", rastValue.Max());
                }
                else
                {
                    rastValue[maxId] = rastValue.Average();
                }
            }
            string dd = oriFeat.GetFieldAsString("MIN");

            while (oriFeat.GetFieldAsString("MIN") == "")
            {
                //拿到数组中最小值的索引
                double ffdf  = rastValue.Min();
                int    minId = Array.IndexOf(rastValue, rastValue.Min());

                //通过索引拿到空间坐标
                double minX, minY;
                StaticTools.indexToGeoSpace(minId, subRasterOff_Size, Transfrom, out minX, out minY);

                //把空间坐标写进Geomtry
                OSGeo.OGR.Geometry minGeom = new OSGeo.OGR.Geometry(OSGeo.OGR.wkbGeometryType.wkbPoint);
                minGeom.AddPoint_2D(minX, minY);

                //判断坐标是否在Feature中,在则把值写入对应字段,不在则把当前值改为平均值
                OSGeo.OGR.Geometry bufGeom = bufFeat.GetGeometryRef();
                if (minGeom.Within(bufGeom))
                {
                    oriFeat.SetField("MIN", rastValue.Min());
                }
                else
                {
                    rastValue[minId] = rastValue.Average();
                }
            }
            double max = oriFeat.GetFieldAsDouble("MAX");
            double min = oriFeat.GetFieldAsDouble("MIN");

            oriFeat.SetField("HIGHT", max - min);
        }