private void 导出CycloneToolStripMenuItem_Click(object sender, EventArgs e) { if (ImportCyclone == true) { string bat = "cd D:\r\n D:\r\n cd D:\\PostgreSQL\\9.6\\bin\r\n" + "pgsql2shp -f D:\\cyclone.shp -u postgres mypostdb cyclone"; File.WriteAllText("test.bat", bat); Process.Start("test.bat"); string path = "D:\\cyclone.shp"; //文件路径 string name = "cyclone.shp"; //文件名 FileStream F = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite); MapLayer mapLayer = new MapLayer(name, "Shp", path); //获取外接矩形 DataSource ds = Ogr.Open(path, 0); Layer layer = ds.GetLayerByIndex(0); Envelope ext = new Envelope(); layer.GetExtent(ext, 1); mapLayer.SetExtent((float)ext.MinX, (float)ext.MinY, (float)ext.MaxX, (float)ext.MaxY); //添加新图层至地图 if (tVLayers.Nodes.Count == 0) { tVLayers.Nodes.Add("图层"); } tVLayers.Nodes[0].Nodes.Add(name); tVLayers.ExpandAll(); mapControl._MapLayers.Add(mapLayer); mapControl.Extent(mapControl._MapLayers[mapControl._MapLayers.Count - 1]); F.Close(); } else { MessageBox.Show("请先将矢量数据导入数据库!"); } }
//添加栅格图层 public void AddTiffLayer(string path, string name) { MapLayer mapLayer = new MapLayer(name, "Tiff", path); //获取外接矩形 Dataset ds = Gdal.Open(path, Access.GA_ReadOnly); double[] adfGeoTransform = new double[6]; float minX, minY, maxX, maxY; ds.GetGeoTransform(adfGeoTransform); minX = (float)(adfGeoTransform[0] + adfGeoTransform[2] * ds.RasterYSize); minY = (float)(adfGeoTransform[3] + adfGeoTransform[5] * ds.RasterYSize); maxX = (float)(adfGeoTransform[0] + adfGeoTransform[1] * ds.RasterXSize); maxY = (float)(adfGeoTransform[3] + adfGeoTransform[4] * ds.RasterXSize); mapLayer.SetExtent(minX, minY, maxX, maxY); _MapLayers.Add(mapLayer); Extent(_MapLayers[_MapLayers.Count - 1]); }
//添加矢量图层 public void AddShpLayer(string path, string name) { MapLayer mapLayer = new MapLayer(name, "Shp", path); dbfReader reader = new dbfReader(); string dbfPath = path.Remove(path.Length - 4) + ".dbf"; reader.Open(dbfPath); mapLayer.DT = reader.GetDataTable(); reader.Close(); DataSource ds = Ogr.Open(path, 0); Layer layer = ds.GetLayerByIndex(0); Envelope ext = new Envelope(); layer.GetExtent(ext, 1); mapLayer.SetExtent((float)ext.MinX, (float)ext.MinY, (float)ext.MaxX, (float)ext.MaxY); _MapLayers.Add(mapLayer); Extent(_MapLayers[_MapLayers.Count() - 1]); }