/// <summary> /// 基于文件路径的构造函数 /// </summary> internal MyLayer(string layerpath) { if (Path.GetExtension(layerpath) == ".shp") { Shapefile shp = new Shapefile(layerpath); layerName = shp.Name; dataType = shp.DataType; spaceData = new MySpaceData(shp); renderer = new SimpleRenderer(dataType); rendertype = RendererType.SimpleRenderer; hastext = false; Visible = true; filepath = shp.FilePath; } else { CosmosGisVector cgv = new CosmosGisVector(layerpath); layerName = cgv.Name; dataType = cgv.SpaceDataType; spaceData = new MySpaceData(cgv); renderer = new SimpleRenderer(dataType); rendertype = RendererType.SimpleRenderer; hastext = false; Visible = true; filepath = cgv.FilePath; } /*///TODO * spaceData = new MySpaceData(""); * layerName = Path.GetFileNameWithoutExtension(fileName); * dataType = spaceData.DataType; * this.Visible = true;*/ }
/// <summary> /// 导入数据 /// </summary> private void AddDataToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "导入数据"; ofd.Filter = "地图矢量文件(*.cgv)|*.cgv|Shapefile(*.shp)|*.shp|栅格文件(*.bmp;*.png;*.jpg)|*.bmp;*.png;*.jpg"; ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\CosmosCosmos\\DefaultDatabases"; ofd.RestoreDirectory = true; if (ofd.ShowDialog(this) == DialogResult.OK) { string fileName = ofd.FileName; if (ofd.FilterIndex == 1) //CGV { CosmosGisVector cgv = new CosmosGisVector(fileName); cosmosMapPanel.AddLayer(cgv); } else if (ofd.FilterIndex == 2) //shp { Shapefile shp = new Shapefile(fileName); cosmosMapPanel.AddLayer(shp); } else //栅格文件 { MyGrid grid = new MyGrid(fileName); cosmosMapPanel.AddLayer(grid); } } ofd.Dispose(); }
/// <summary> /// 基于CosmosGisVector的构造函数 /// </summary> /// <param name="cgv"></param> internal MySpaceData(CosmosGisVector cgv) { filePath = cgv.AttrFilePath; dataName = cgv.Name; dataType = cgv.SpaceDataType; geoFeature = cgv.GetGeometryFeature(); property = new MyProperty(cgv.AttrFilePath); }
/// <summary> /// 基于CosmosGisVector的构造函数 /// </summary> /// <param name="cgv">CosmosGisVector</param> internal MyLayer(CosmosGisVector cgv) { layerName = cgv.Name; dataType = cgv.SpaceDataType; spaceData = new MySpaceData(cgv); renderer = new SimpleRenderer(dataType); rendertype = RendererType.SimpleRenderer; hastext = false; Visible = true; filepath = cgv.FilePath; }
/// <summary> /// 新建CGV要素 /// </summary> private void NewCGVToolStripMenuItem_Click(object sender, EventArgs e) { CreateNewCGVDialog newCgvDialog = new CreateNewCGVDialog(databasePath); if (newCgvDialog.ShowDialog(this) == DialogResult.OK) { CosmosGisVector.CreateEmptyCgv(newCgvDialog.FilePath, newCgvDialog.SpaceDataType); CosmosGisVector emptyCgv = new CosmosGisVector(newCgvDialog.FilePath); cosmosMapPanel.AddLayer(emptyCgv); } newCgvDialog.Dispose(); }
/// <summary> /// 增加CGV图层 /// </summary> /// <param name="cgv"></param> internal void AddLayer(CosmosGisVector cgv) { myMap.AddLayer(new MyLayer(cgv)); TreeNode layerNode = new TreeNode(cgv.Name, 2, 2); layerNode.Checked = true; treeViewLayers.Nodes[0].Nodes.Insert(0, layerNode); treeViewLayers.ExpandAll(); if (cgv.FeatureCount != 0) { centerLngLat = new PointF(((float)cgv.MaxX + (float)cgv.MinX) * 0.5F, ((float)cgv.MaxY + (float)cgv.MinY) * 0.5F); centerXY = ETCProjection.LngLat2XY(centerLngLat); //同步更新屏幕中心点投影坐标系坐标 double x = ETCProjection.Longitude2X(cgv.MaxX) - ETCProjection.Longitude2X(cgv.MinX); double y = ETCProjection.Latitude2Y(cgv.MaxY) - ETCProjection.Latitude2Y(cgv.MinY); double scale1 = x / Width; double scale2 = y / Height; Ratio = Math.Max(scale1, scale2); scaleIndex = maxZoomLevel; UpdateMapImg(); } }
public void Open() { FileStream fs = new FileStream(_filepath, FileMode.Open); StreamReader sr = new StreamReader(fs); string line = sr.ReadLine(); string[] words = line.Split(' '); _Geocoordinate = Map.MyCoordinates.WGS1984; //由于不存在null选项 _Procoordinate = Map.MyCoordinates.WGS1984; //由于不存在null选项 //记录地理坐标系 switch (words[1]) { case "WGS1984": _Geocoordinate = Map.MyCoordinates.WGS1984; break; } //记录投影坐标系 switch (words[2]) { case "WGS1984": _Geocoordinate = Map.MyCoordinates.WGS1984; break; } //生成地图 _map = new Map.MyMap(words[0], _Geocoordinate, Convert.ToDouble(words[3])); _ratio = Convert.ToDouble(words[3]); _scaleindex = Convert.ToInt32(words[4]); //显示中心点位 _centerpos = new PointF((float)Convert.ToDouble(words[5]), (float)Convert.ToDouble(words[6])); //图层数量 int layercount = Convert.ToInt32(words[7]); for (int i = 0; i < layercount; i++) { string layerpath = sr.ReadLine(); Map.MyLayer newlayer = null; if (Path.GetExtension(layerpath) == ".shp") { //TODO先只可读SHP Shapefile newshp = new Shapefile(layerpath); newlayer = new MyLayer(newshp); } else { CosmosGisVector newcgv = new CosmosGisVector(layerpath); newlayer = new MyLayer(newcgv); } newlayer.FilePath = layerpath; //设置是否可见 string visible = sr.ReadLine(); if (visible == "True") { newlayer.Visible = true; } else { newlayer.Visible = false; } //获取渲染方式 string layerline = sr.ReadLine(); RendererType newrendertyppe = new GetType().RendererType(layerline.Split(' ')[0]); newlayer.rendertype = newrendertyppe; switch (newrendertyppe) { //唯一值渲染 case RendererType.UniqueValueRenderer: string field_uvr = layerline.Split(' ')[1]; //TODO 获得属性唯一值 DataTable dt_uvr = newlayer.SpaceData.Property.SqlQuery("Select Distinct " + field_uvr + " From " + newlayer.LayerName); List <string> values_uvr = new List <string>(); for (int j = 0; j < dt_uvr.Rows.Count; j++) { values_uvr.Add(dt_uvr.Rows[j][field_uvr].ToString()); } //List<string> values = new List<string>() { "1", "2", "3", "3" ,"3","3","7"}; newlayer.Renderer = new UniqueValueRenderer(newlayer.DataType, field_uvr, values_uvr); break; //分级渲染 case RendererType.ClassBreakRenderer: string field_cbr = layerline.Split(' ')[1]; DataTable dt_cbr = newlayer.SpaceData.Property.SqlQuery("Select Distinct " + field_cbr + " From " + newlayer.LayerName); List <double> values_cbr = new List <double>(); for (int j = 0; j < dt_cbr.Rows.Count; j++) { values_cbr.Add(Convert.ToDouble(dt_cbr.Rows[j][field_cbr])); } //List<double> breaks = new List<double>() { 1, 2, 3 }; newlayer.Renderer = new ClassBreakRenderer(newlayer.DataType, field_cbr, values_cbr); break; //简单渲染 default: newlayer.Renderer = new SimpleRenderer(newlayer.DataType); break; } //判断是否有注记信息 string hastext = sr.ReadLine(); if (hastext == "True") { newlayer.HasText = true; newlayer.Textrender = new TextRenderer(sr.ReadLine()); } else { newlayer.HasText = false; } _map.AddLayer(newlayer); } sr.Close(); fs.Close(); }