C# Sharpmap加载tif 加载png

本文介绍如何使用SharpMap库加载TIFF和JPEG文件作为图层,并展示具体实现代码。通过GdalRasterLayer和GdiImageLayer类,可以轻松地将地理图像文件集成到地图中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路很简单,使用这两个方法打开之后加载进图层即可。

GdalRasterLayer layGdal = new SharpMap.Layers.GdalRasterLayer("test", @"G:\testTif.Tif");

 var l = new SharpMap.Layers.GdiImageLayer(ofd.FileName);

 mainMapBox.Map.Layers.Add(layGdal);

完整代码和效果如下:

private void 打开tifToolStripMenuItem_Click(object sender, EventArgs e)
        {
            GdalRasterLayer layGdal = new SharpMap.Layers.GdalRasterLayer("test", @"G:\testTif.Tif");

            Console.WriteLine(layGdal.SRID);
            layGdal.SRID = 7;

            Console.WriteLine(layGdal.SRID);
            mainMapBox.Map.Layers.Add(layGdal);
            mainMapBox.Map.ZoomToExtents();
            mainMapBox.Refresh();
            mainMapBox.ActiveTool = SharpMap.Forms.MapBox.Tools.Pan;
        }

        private void 打开jpgToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //打开png
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "All files|*.*";
            if (ofd.ShowDialog()==System.Windows.Forms.DialogResult.OK)
            {
                mainMapBox.Map.Layers.Clear();
                var l = new SharpMap.Layers.GdiImageLayer(ofd.FileName);
                mainMapBox.Map.Layers.Add(l);
                //float angle = 0;
                mainMapBox.Map.ZoomToExtents();

                //var mat = new System.Drawing.Drawing2D.Matrix();
                //mat.RotateAt(angle,mainMapBox.Map.WorldToImage(mainMapBox.Map.Center));
                //mainMapBox.Map.MapTransform = mat;
                //mainMapBox.Map.MaximumExtents = mainMapBox.Map.GetExtents();
                //mainMapBox.Map.EnforceMaximumExtents = true;
                mainMapBox.Map.ZoomToExtents();
                mainMapBox.Refresh();
                mainMapBox.ActiveTool = SharpMap.Forms.MapBox.Tools.Pan;
            }
        }



C#中,实现栅格数据(如地理空间数据,如.TIF、.PNG、.GeoTIFF等)的读取、显示、导出以及基本的数据操作,通常会利用开源库如GDAL(Geospatial Data Abstraction Library),或者.Net平台上的一些GIS专用库,例如SharpMap或ArcGIS Runtime。 **1. 栅格数据读取(using GDAL)**: ```csharp using OSGeo.GDAL; // 加载栅格文件 var dataset = Gdal.Open("path_to_your_raster.tif", Access.GA_ReadOnly); var band = dataset.GetRasterBand(1); // 假设第一层为有效数据层 // 读取像素值 int x, y; band.ReadRaster(x, y, width, height, buffer, width, height, bufXSize, bufYSize, GeoTransform, PixelIsAreaFlag); ``` **2. 显示(using SharpMap或GIS库)**: ```csharp using SharpMap.MapProviders.GeoServer; using SharpMap.Layers.Vector; // 创建地图控件和图层 var mapControl = new MapWindow(); var layer = new WmsLayer("http://your_geoserver_url/service?", ...); // 添加图层到地图 mapControl.Map.Layers.Add(layer); mapControl.Show(); ``` **3. 数据操作(例如裁剪、叠加等)**: ```csharp using SharpMap.Mathematics.Geometry; // 创建裁剪区域几何对象 var extent = new Envelope(left, top, right, bottom); // 使用裁剪函数 var croppedDataset = GDALUtils.Crop(dataset, extent); ``` **4. 导出数据**: ```csharp using OSGeo.GDAL; // 创建一个新的输出文件 var outputDriver = Gdal.GetDriverByName("GTiff"); var outputFile = outputDriver.Create("output_raster.tif", width, height, bands, driverDataType); // 将处理后的数据写入新文件 outputFile.SetGeoTransform(originalGeoTransform); outputBand.WriteRaster(0, 0, width, height, croppedBuffer, width, height, 0, 0); outputFile.FlushCache(); // 关闭文件 outputFile.Dispose(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值