private GameObject NodeGameObject(GraphNodeContextData node) { var gameObject = new GameObject(); gameObject.transform.position = node.Position; gameObject.transform.parent = Root; var mesh = gameObject.AddComponent <MeshFilter>().mesh = new Mesh(); gameObject.AddComponent <MeshRenderer>().material = Material; GeometryProvider.Build( mesh, new IcosahedronGeometryBuilder(), new GeometryBuilderSettings { Vertex = new GeometryBuilderVertexSettings { Scale = node.Scale, Rotation = node.Rotation } }); return(gameObject); }
private void Form2_Load(object sender, EventArgs e) { var tileLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.BingRoadsStaging), "TileLayer"); this.mapBox1.Map.BackgroundLayer.Add(tileLayer); GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 3857); IMathTransform mathTransform = LayerTools.Wgs84toGoogleMercator.MathTransform; Envelope geom = GeometryTransform.TransformBox( new Envelope(-9.205626, -9.123736, 38.690993, 38.740837), mathTransform); //Adds a pushpin layer VectorLayer pushPinLayer = new VectorLayer("PushPins"); List <IGeometry> geos = new List <IGeometry>(); geos.Add(gf.CreatePoint(geom.Centre)); GeometryProvider geoProvider = new GeometryProvider(geos); pushPinLayer.DataSource = geoProvider; //this.mapBox1.Map.Layers.Add(pushPinLayer); this.mapBox1.Map.ZoomToBox(geom); this.mapBox1.Map.Zoom = 8500; this.mapBox1.Refresh(); }
/// <summary> /// 列选择 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { if (e.RowIndex < 0) { return; } dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[0]; foreach (DataGridViewCell cell in dataGridView1.SelectedCells) { cell.Selected = false; } for (int i = 0; i < dataGridView1.ColumnCount; i++) { dataGridView1.Rows[e.RowIndex].Cells[i].Selected = true; } if (SelectObject != null) { decimal id = 0; string val = GetValue(dataGridView1, e.RowIndex, dataGridView1.ColumnCount - 1); if (decimal.TryParse(val, out id)) { VectorLayer vlayer = GetCurrentLayer() as VectorLayer; GeometryProvider datasource = vlayer.DataSource as GeometryProvider; foreach (Geometry geom in _SelectObjects) { if (geom.ID == id && datasource.Geometries.Contains(geom)) { SelectObject(vlayer, geom); break; } } } } }
private void Form2_Load(object sender, EventArgs e) { //TileAsyncLayer osmLayer= new TileAsyncLayer(new OsmTileSource(), "TileLayer - OSM"); TileAsyncLayer bingLayer = new TileAsyncLayer(new BingTileSource(BingRequest.UrlBing, "", BingMapType.Roads), "TileLayer - Bing"); this.mapBox1.Map.BackgroundLayer.Add(bingLayer); GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 3857); #if DotSpatialProjections var mathTransform = LayerTools.Wgs84toGoogleMercator; var geom = GeometryTransform.TransformBox( new Envelope(-9.205626, -9.123736, 38.690993, 38.740837), mathTransform.Source, mathTransform.Target); #else IMathTransform mathTransform = LayerTools.Wgs84toGoogleMercator.MathTransform; Envelope geom = GeometryTransform.TransformBox( new Envelope(-9.205626, -9.123736, 38.690993, 38.740837), mathTransform); #endif //Adds a pushpin layer VectorLayer pushPinLayer = new VectorLayer("PushPins"); List <IGeometry> geos = new List <IGeometry>(); geos.Add(gf.CreatePoint(geom.Centre)); GeometryProvider geoProvider = new GeometryProvider(geos); pushPinLayer.DataSource = geoProvider; //this.mapBox1.Map.Layers.Add(pushPinLayer); this.mapBox1.Map.ZoomToBox(geom); this.mapBox1.Map.Zoom = 8500; this.mapBox1.Refresh(); }
private void AddAffectedAreaLayer(Map map, Polygon affectedArea) { var geoms = new List <IGeometry>() { affectedArea }; if (!map.MapTransform.IsIdentity) { // affectedArea is aligned with Graphics Canvas (not with north arrow) // The following steps are simply to show this geom in world units var centreX = affectedArea.EnvelopeInternal.Centre.X; var centreY = affectedArea.EnvelopeInternal.Centre.Y; // apply negative rotation about center of polygon var rad = NetTopologySuite.Utilities.Degrees.ToRadians(map.MapTransformRotation); var trans = new AffineTransformation(); trans.Compose(AffineTransformation.TranslationInstance(-centreX, -centreY)); trans.Compose(AffineTransformation.RotationInstance(-rad)); var rotated = trans.Transform(affectedArea.Copy()); // calculate enclosing envelope var minX = rotated.Coordinates.Min(c => c.X); var minY = rotated.Coordinates.Min(c => c.Y); var maxX = rotated.Coordinates.Max(c => c.X); var maxY = rotated.Coordinates.Max(c => c.Y); var coords = new Coordinate[] { new Coordinate(minX, maxY), new Coordinate(maxX, maxY), new Coordinate(maxX, minY), new Coordinate(minX, minY), new Coordinate(minX, maxY), }; // rotate enclosing envelope back to world units trans = new AffineTransformation(); trans.Compose(AffineTransformation.RotationInstance(rad)); trans.Compose(AffineTransformation.TranslationInstance(centreX, centreY)); // construct geom to show on screen var enclosing = trans.Transform(new Polygon(new LinearRing(coords))); geoms.Add(enclosing); } var gp = new GeometryProvider(geoms); var vLayer = new VectorLayer("Affected Area") { DataSource = gp, SRID = map.SRID }; vLayer.Style.Fill = null; vLayer.Style.EnableOutline = true; //vLayer.Enabled = false; map.Layers.Add(vLayer); }
/// <summary> /// 根据选择的元素和图层添加树结构 /// </summary> private void AddTreeNode() { treeView1.Nodes.Clear(); int index = 1; foreach (ILayer layer in SelectLayers) { if (!(layer is VectorLayer)) { continue; } VectorLayer vlayer = layer as VectorLayer; TreeNode node = new TreeNode(layer.LayerName); node.Tag = layer; treeView1.Nodes.Add(node); GeometryProvider datasource = vlayer.DataSource as GeometryProvider; foreach (Geometry geom in SelectObjects) { if (datasource.Geometries.Contains(geom)) { string txt = geom.Text.Trim(); if (txt == "") { txt = "未定义" + index; index++; } TreeNode subnode = new TreeNode(txt); subnode.Tag = geom; node.Nodes.Add(subnode); } } } for (int i = treeView1.Nodes.Count - 1; i >= 0; i--) { if (treeView1.Nodes[i].Nodes.Count <= 0) { treeView1.Nodes.RemoveAt(i); } } if (treeView1.SelectedNode == null) { if (treeView1.Nodes.Count > 0) { treeView1.SelectedNode = treeView1.Nodes[0].Nodes[0]; } } if (treeView1.Nodes.Count <= 0) { dataGridView1.Rows.Clear(); comboBox1.Items.Clear(); textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; txtMessage.Text = ""; } }
public void TestMapDecorationTest() { var m = new Map(new Size(780, 540)) { BackColor = Color.White }; var p = new GeometryProvider(new List <IGeometry>()); var pts = new [] { new GeoPoint(0, 0), new GeoPoint(779, 539) }; var ls = m.Factory.CreateLineString(pts); p.Geometries.Add(ls); m.Layers.Add(new VectorLayer("t", p)); m.ZoomToExtents(); m.Decorations.Add(new TestDecoration { Anchor = MapDecorationAnchor.LeftTop, BorderColor = Color.Green, BackgroundColor = Color.LightGreen, BorderWidth = 2, Location = new Point(10, 10), BorderMargin = new Size(5, 5), RoundedEdges = true, Opacity = 0.6f }); m.Decorations.Add(new TestDecoration { Anchor = MapDecorationAnchor.RightTop, BorderColor = Color.Red, BackgroundColor = Color.LightCoral, BorderWidth = 2, Location = new Point(10, 10), BorderMargin = new Size(5, 5), RoundedEdges = true, Opacity = 0.2f }); m.Decorations.Add(new ScaleBar { Anchor = MapDecorationAnchor.Default, BorderColor = Color.Blue, BackgroundColor = Color.CornflowerBlue, BorderWidth = 2, Location = new Point(10, 10), BorderMargin = new Size(5, 5), RoundedEdges = true, BarWidth = 4, ScaleText = ScaleBarLabelText.RepresentativeFraction, NumTicks = 2, Opacity = 1f }); using (var bmp = m.GetMap()) bmp.Save(System.IO.Path.Combine(UnitTestsFixture.GetImageDirectory(this), "TestMapDecorationTest.bmp")); }
void SetVectors() { GeometryProvider.Icosahedron(vectors, indices); sphereSpacing = scale * (float)timesToSubdivide; for (var i = 0; i < timesToSubdivide; i++) { GeometryProvider.Subdivide(vectors, indices, true); } // // commented Debug.Log("start, vectorsc:"+vectors.Count); }
private void Dispose(bool disposing) { if (_isDisposed) { return; } if (disposing) { _provider = null; } }
/// <summary> /// 遍历地图中符合输入宗地名称的多边形,添加到列表中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AreaTipForm_Load(object sender, EventArgs e) { string txt = AreaName.ToLower(); DataTable table = new DataTable(); table.Columns.Add("areaname"); table.Columns.Add("layer"); List <Geometry> geos = new List <Geometry>(); List <VectorLayer> layers = new List <VectorLayer>(); for (int i = 0; i < Map.Layers.Count; i++) { if (Map.Layers[i] is VectorLayer) { VectorLayer layer = Map.Layers[i] as VectorLayer; GeometryProvider provider = (GeometryProvider)layer.DataSource; //循环图层中的多边形 foreach (Geometry geom in provider.Geometries) { if (geom.Text.ToLower().Contains(txt)) { table.Rows.Add(new object[] { geom.Text, layer.LayerName }); geos.Add(geom); layers.Add(layer); } } } } myDataGridView1.DataSource = table; for (int i = 0; i < geos.Count; i++) { myDataGridView1.Rows[i].Cells[0].Tag = geos[i]; myDataGridView1.Rows[i].Cells[1].Tag = layers[i]; } geos.Clear(); layers.Clear(); //如果查询的数据多余1条,则按名称排序后,默认选中第一条 if (myDataGridView1.RowCount > 0) { label1.Text = "记录数:" + myDataGridView1.RowCount; //myDataGridView1.Sort(myDataGridView1.Columns[0], ListSortDirection.Ascending); myDataGridView1.Rows[0].Selected = true; } //如果查询的数据只有1条或者没有查询到,则触发确定按钮 if (myDataGridView1.RowCount <= 1) { if (myDataGridView1.RowCount == 1 && myDataGridView1.GetGridValue(0, 0).ToString() == AreaName || myDataGridView1.RowCount <= 0) { btnOk_Click(null, null); } } }
private void AddItems(object sender, EventArgs e) { Random rndGen = new Random(); Collection <Geometry> geometry = new Collection <Geometry>(); VectorLayer layer = new VectorLayer(String.Empty); generatePoints(geometry, rndGen); layer.Style.Symbol = new Bitmap(@"Data\city.png");; layer.LayerName = "Planes"; GeometryProvider provider = new GeometryProvider(geometry); layer.DataSource = provider; mapWindow.MainMapImage.Map.Layers.Add(layer); }
private void addNewRandomGeometryLayer() { Random rndGen = new Random(); Collection <IGeometry> geometry = new Collection <IGeometry>(); VectorLayer layer = new VectorLayer(String.Empty); var gf = new GeometryFactory(); switch (rndGen.Next(3)) { case 0: { GeneratePoints(gf, geometry, rndGen); KeyValuePair <string, Bitmap> symbolEntry = getSymbolEntry(rndGen.Next(_symbolTable.Count)); layer.Style.Symbol = symbolEntry.Value; layer.LayerName = symbolEntry.Key; } break; case 1: { GenerateLines(gf, geometry, rndGen); KeyValuePair <string, Color> colorEntry = getColorEntry(rndGen.Next(_colorTable.Count)); layer.Style.Line = new Pen(colorEntry.Value); layer.LayerName = String.Format("{0} lines", colorEntry.Key); } break; case 2: { GeneratePolygons(gf, geometry, rndGen); KeyValuePair <string, Color> colorEntry = getColorEntry(rndGen.Next(_colorTable.Count)); layer.Style.Fill = new SolidBrush(colorEntry.Value); layer.LayerName = String.Format("{0} squares", colorEntry.Key); } break; default: throw new NotSupportedException(); } var provider = new GeometryProvider(geometry); layer.DataSource = provider; addLayer(layer); }
/// <summary> /// 将序列化的数据转化为元素,并添加到图层中 /// </summary> /// <param name="type"></param> /// <param name="data"></param> /// <param name="layer"></param> public static void Restore(string type, byte[] data, VectorLayer layer) { object obj = DeserializeObject(data); if (obj == null) { return; } GeometryProvider provider = (GeometryProvider)layer.DataSource; if (type == "GeoPoint") { GeoPoint point = (GeoPoint)obj; provider.Geometries.Add(point); } else if (type == "Point3D") { Point3D point3D = (Point3D)obj; provider.Geometries.Add(point3D); } else if (type == "Polygon") { Polygon polygon = (Polygon)obj; provider.Geometries.Add(polygon); } else if (type == "LineString") { LineString lineString = (LineString)obj; provider.Geometries.Add(lineString); } else if (type == "MultiLineString") { MultiLineString multiLineString = (MultiLineString)obj; provider.Geometries.Add(multiLineString); } else if (type == "MultiPoint") { MultiPoint multiPoint = (MultiPoint)obj; provider.Geometries.Add(multiPoint); } else if (type == "MultiPolygon") { MultiPolygon multiPolygon = (MultiPolygon)obj; provider.Geometries.Add(multiPolygon); } }
private void Form2_Load(object sender, EventArgs e) { var tileLayer = new TileAsyncLayer(KnownTileSources.Create(KnownTileSource.BingRoadsStaging, userAgent: TileLayerSample.DefaultUserAgent), "TileLayer"); this.mapBox1.Map.BackgroundLayer.Add(tileLayer); GeometryFactory gf = new GeometryFactory(new PrecisionModel(), 3857); IMathTransform mathTransform = LayerTools.Wgs84toGoogleMercator.MathTransform; Envelope geom = GeometryTransform.TransformBox( new Envelope(-9.205626, -9.123736, 38.690993, 38.740837), mathTransform); //Adds a pushpin layer VectorLayer pushPinLayer = new VectorLayer("PushPins"); List <IGeometry> geos = new List <IGeometry>(); geos.Add(gf.CreatePoint(geom.Centre)); GeometryProvider geoProvider = new GeometryProvider(geos); pushPinLayer.DataSource = geoProvider; //this.mapBox1.Map.Layers.Add(pushPinLayer); // ScaleBar this.mapBox1.Map.SRID = 3857; this.mapBox1.Map.Decorations.Add( new ScaleBar { Anchor = MapDecorationAnchor.RightCenter, Enabled = chkScaleBar.Checked }); // Graticule this.mapBox1.Map.Decorations.Add(new Graticule() { Enabled = chkGraticule.Checked, PcsGraticuleMode = PcsGraticuleMode.WebMercatorScaleLines, PcsGraticuleStyle = { NumSubdivisions = 2 } }); this.mapBox1.Map.ZoomToBox(geom); this.mapBox1.Map.Zoom = 8500; this.mapBox1.Refresh(); }
public void BuildSphere() { var vectors = new List <Vector3>(); var indices = new List <int>(); GeometryProvider.Icosahedron(vectors, indices); for (var i = 0; i < detailLevel; i++) { GeometryProvider.Subdivide(vectors, indices, true); } /// normalize vectors to "inflate" the icosahedron into a sphere. for (var i = 0; i < vectors.Count; i++) { vectors [i] = Vector3.Normalize(vectors [i]); } }
/// <summary> /// 保存图层中的元素 /// </summary> /// <param name="layer"></param> public static void SaveObject(VectorLayer layer) { GeometryProvider provider = (GeometryProvider)layer.DataSource; foreach (Geometry geometry in provider.Geometries) { string type = string.Empty; if (geometry is GeoPoint) { type = "GeoPoint"; } else if (geometry is Point3D) { type = "Point3D"; } else if (geometry is Polygon) { type = "Polygon"; } else if (geometry is LineString) { type = "LineString"; } else if (geometry is MultiLineString) { type = "MultiLineString"; } else if (geometry is MultiPoint) { type = "MultiPoint"; } else if (geometry is MultiPolygon) { type = "MultiPolygon"; } else { continue; } byte[] data = SerializeObject(geometry); } }
public void TestGeometryProvider() { string wkt; GeometryServices g = new GeometryServices(); GeometryProvider prov; IGeometry geom = g.DefaultGeometryFactory.WktReader.Read(File.ReadAllText("D:\\geometries.txt")); prov = new GeometryProvider(new[] { geom }); using (IFeatureDataReader fdr = prov.ExecuteFeatureQuery(new FeatureQueryExpression(geom.Extents, SpatialOperation.Intersects))) { while (fdr.Read()) { Debug.WriteLine(fdr.Geometry.AsText()); } } }
/// <summary> /// 添加元素 /// </summary> /// <param name="map"></param> /// <param name="tree"></param> /// <param name="cmd"></param> private void AddObject(MapImage map, MyTree tree, string[] cmd) { if (cmd.Length != 4) { return; } decimal mapid = GetId(cmd[1]); decimal layerid = GetId(cmd[2]); decimal objectid = GetId(cmd[3]); TreeNode layerNode = FindLayer(tree.Nodes[0], layerid); if (layerNode == null) { return; } if (!(layerNode.Tag is VectorLayer)) { return; } VectorLayer layer = layerNode.Tag as VectorLayer; if (!(layer.DataSource is GeometryProvider)) { return; } GeometryProvider provider = layer.DataSource as GeometryProvider; Collection <Geometry> geometries = provider.Geometries as Collection <Geometry>; //取得元素信息 DataTable objecttable = MapDBClass.GetObjectById(mapid, layerid, objectid); for (int j = 0; j < objecttable.Rows.Count; j++) { byte[] data = (byte[])objecttable.Rows[j]["ObjectData"]; Geometry geometry = (Geometry)Common.DeserializeObject(data); geometry.ID = objectid; geometry.Select = false; geometries.Add(geometry); AddGeometryToTree(layerNode, geometry, geometry.Text); } }
/// <summary> Event handler for MouseDown event. </summary> /// <param name="sender"> The sender of the MouseDown event. </param> /// <param name="e"> The event parameters. </param> #region doc:map_MouseDown handler private void map_MouseDown(object sender, MouseButtonEventArgs e) { if (!(e.ChangedButton == MouseButton.Left && e.ButtonState == MouseButtonState.Pressed)) { return; } var canvasPoint = e.GetPosition(this); System.Windows.Point wgsPoint = CanvasToGeo(canvasPoint); var ds = new FeatureDataSet(); geometries.Clear(); using (var shpFile = new SharpMap.Data.Providers.ShapeFile(shapeFilePath)) { shpFile.Open(); shpFile.ExecuteIntersectionQuery(new BoundingBox(wgsPoint.X, wgsPoint.Y, wgsPoint.X, wgsPoint.Y), ds); //if selected any object if (ds.Tables[0].Rows.Count <= 0) { return; } using (var geomProvider = new GeometryProvider(ds.Tables[0])) { geomProvider.Open(); foreach (var geoItem in geomProvider.Geometries) { var geometry = WkbToWpf.Parse(geoItem.AsBinary(), GeoToCanvas); if (geometry.FillContains(canvasPoint)) { geometries.Add(geometry); } } } } }
private ILayer CreateLayer(string layerName, int sourceSrid, int targetSrid, Envelope viewExtents, Envelope crsDomain, Brush symColour, int symSize, double interval) { var gp = new GeometryProvider(Point.Empty); gp.SRID = sourceSrid; var originX = Math.Floor(viewExtents.MinX / interval) * interval; var originY = Math.Floor(viewExtents.MinY / interval) * interval; var coord = new Coordinate(); var thisX = originX; while (thisX < viewExtents.MaxX) { var thisY = originY; while (thisY < viewExtents.MaxY) { coord.X = thisX; coord.Y = thisY; if (crsDomain.Contains(coord)) { gp.Geometries.Add(new Point(thisX, thisY)); } thisY += interval; } thisX += interval; } var vl = new VectorLayer(layerName) { DataSource = gp, TargetSRID = targetSrid, Style = { PointColor = symColour, PointSize = symSize } }; return(vl); }
/// <summary> /// 添加图层 /// </summary> /// <param name="map"></param> /// <param name="tree"></param> /// <param name="cmd"></param> private void AddLayer(MapImage map, MyTree tree, string[] cmd) { if (cmd.Length != 3) { return; } decimal mapid = GetId(cmd[1]); decimal layerid = GetId(cmd[2]); //取得图层信息 DataTable layertable = MapDBClass.GetLayerinfo(mapid, layerid); if (layertable == null || layertable.Rows.Count <= 0) { return; } string layername = layertable.Rows[0]["LayerName"].ToString(); int type = 0; Int32.TryParse(layertable.Rows[0]["LayerType"].ToString(), out type); VectorLayer layer = new VectorLayer(layername, (VectorLayer.LayerType)type); layer.ID = layerid; layer.Style.EnableOutline = layertable.Rows[0]["EnableOutline"].ToString() == "1" ? true : false; layer.Style.Fill = new SolidBrush(Color.FromArgb((int)layertable.Rows[0]["Fill"])); layer.Style.Line = new Pen(Color.FromArgb((int)layertable.Rows[0]["Line"]), (int)layertable.Rows[0]["LineWidth"]); layer.Style.Outline = new Pen(Color.FromArgb((int)layertable.Rows[0]["Outline"]), (int)layertable.Rows[0]["OutlineWidth"]); Collection <Geometry> geometries = new Collection <Geometry>(); GeometryProvider provider = new GeometryProvider(geometries); layer.DataSource = provider; TreeNode node = new TreeNode(layername); node.Tag = layer; node.Checked = true; if (SetLayerStyle != null) { SetLayerStyle(layer, layer.Style.Fill, layer.Style.Line, layer.Style.Outline, layer.Style.EnableOutline, node); } string layertext = ""; switch (layer.Type) { case VectorLayer.LayerType.BaseLayer: layertext = Resources.BaseLayer; break; case VectorLayer.LayerType.PhotoLayer: layertext = Resources.PhotoLayer; break; case VectorLayer.LayerType.ReportLayer: layertext = Resources.ReportLayer; break; case VectorLayer.LayerType.MotionLayer: layertext = Resources.MotionPointLayer; break; case VectorLayer.LayerType.SaleLayer: layertext = Resources.SaleLayer; break; case VectorLayer.LayerType.AreaInformation: layertext = Resources.AreaInfoLayer; break; case VectorLayer.LayerType.Pricelayer: layertext = Resources.PriceLayer; break; case VectorLayer.LayerType.HireLayer: layertext = Resources.RentLayer; break; case VectorLayer.LayerType.OtherLayer: layertext = Resources.OtherLayer; break; } TreeNode mainnode = new TreeNode(layertext); mainnode.Checked = true; TreeNode findnode = FindNode(tree, layertext); if (findnode != null) { mainnode = findnode; } else if (layertext == Resources.BaseLayer) { if (tree.Nodes[0].Nodes.Count > 0) { if (tree.Nodes[0].Nodes[0].Text == Resources.PhotoLayer) { tree.Nodes[0].Nodes.Insert(1, mainnode); } else { tree.Nodes[0].Nodes.Insert(0, mainnode); } } else { tree.Nodes[0].Nodes.Add(mainnode); } } else { findnode = FindNode(tree, Resources.DataLayer); if (findnode == null) { findnode = new TreeNode(Resources.DataLayer); tree.Nodes[0].Nodes.Add(findnode); } findnode.Nodes.Add(mainnode); } mainnode.Nodes.Add(node); map.Map.AddLayer(layer); //取得元素信息 DataTable objecttable = MapDBClass.GetObject(mapid, layerid); for (int j = 0; j < objecttable.Rows.Count; j++) { decimal objectid = (decimal)objecttable.Rows[j]["ObjectId"]; byte[] data = (byte[])objecttable.Rows[j]["ObjectData"]; Geometry geometry = (Geometry)Common.DeserializeObject(data); geometry.ID = objectid; geometry.Select = false; geometries.Add(geometry); AddGeometryToTree(node, geometry, geometry.Text); } }
private void btnSelect_Click(object sender, EventArgs e) { dataGridView2.Rows.Clear(); btnSelect.Checked = true; btnAll.Checked = false; 全部显示ToolStripMenuItem.Checked = false; 仅显示选中元素数据ToolStripMenuItem.Checked = true; ILayer layer = GetCurrentLayer(); if (layer is VectorLayer) { VectorLayer vlayer = layer as VectorLayer; GeometryProvider datasource = vlayer.DataSource as GeometryProvider; string id = ""; foreach (Geometry geom in _SelectObjects) { if (datasource.Geometries.Contains(geom)) { id += geom.ID + ","; } } //dataGridView1.Rows.Clear(); dataGridView1.Columns.Clear(); _PropertyType.Clear(); _PropertyName.Clear(); DataGridViewComboBoxColumn col = dataGridView2.Columns[0] as DataGridViewComboBoxColumn; col.Items.Clear(); decimal layerid = GetCurrentLayerId(); if (layerid < 0) { dataGridView1_CurrentCellChanged(null, null); return; } //取得真实属性表字段 string sql = "select * from " + MapDBClass.GetPropertyTableName(MapId, layerid) + " where 1<>1"; DataTable table = SqlHelper.Select(sql, null); for (int i = 4; i < table.Columns.Count; i++) { string colname = table.Columns[i].ColumnName.ToLower(); string stype = table.Columns[i].DataType.Name; colname = table.Columns[i].ColumnName; col.Items.Add(colname); _PropertyType.Add(colname, stype); _PropertyName.Add(colname); } col.Items.Add("日期"); _PropertyType.Add("日期", "日期"); dataGridView2.Rows.Clear(); //取得条件 string where = CreateWhere(); //取得检索字段 string select = CreateSelect(0); //取得表名 string tablename = GetTableName(); sql = select + "\r\n from \r\n" + tablename + where; if (id != "") { sql += " and ObjectId in (" + id.Substring(0, id.Length - 1) + ")"; } //查询 table = SqlHelper.Select(sql, null); dataGridView1.DataSource = table; } dataGridView1_CurrentCellChanged(sender, e); }
internal GeometryDataReader(GeometryProvider provider, BoundingBox bounds) { _provider = provider; _bounds = bounds; }
public void Initial() { if (IsModify && ProjectData != null) { string sql = SqlHelper.GetSql("SelectProjectById"); List <SqlParameter> param = new List <SqlParameter>(); param.Add(new SqlParameter("area", ProjectData.Area)); param.Add(new SqlParameter("date", ProjectData.Date)); param.Add(new SqlParameter("MapId", _Map.MapId)); DataTable table = SqlHelper.Select(sql, param); if (table == null || table.Rows.Count <= 0) { return; } int year = DateTime.Now.Year; if (!int.TryParse(table.Rows[0]["date"].ToString(), out year)) { year = DateTime.Now.Year; } txtYear.Value = year; txtQuYu.Text = table.Rows[0]["area"].ToString(); areaList.Rows.Clear(); if (table == null || table.Rows.Count <= 0) { return; } for (int i = 0; i < table.Rows.Count; i++) { int row = areaList.Rows.Add(); for (int j = 0; j < areaList.ColumnCount; j++) { for (int k = 0; k < table.Columns.Count; k++) { if (areaList.Columns[j].Name == table.Columns[k].ColumnName) { areaList.Rows[row].Cells[j].Value = table.Rows[i][k]; break; } } areaList.Rows[row].Cells["OldLayerId"].Value = table.Rows[i]["LayerId"]; areaList.Rows[row].Cells["OldObjectId"].Value = table.Rows[i]["ObjectId"]; areaList.Rows[row].Cells["modify"].Value = ""; } } for (int i = 0; i < areaList.RowCount; i++) { decimal layerid = (decimal)areaList.GetGridValue(i, "LayerId"); decimal objid = (decimal)areaList.GetGridValue(i, "ObjectId"); foreach (ILayer layer in Map.Layers) { if (layer.ID == layerid && layer is VectorLayer) { GeometryProvider provider = (GeometryProvider)((VectorLayer)layer).DataSource; foreach (Geometry geom in provider.Geometries) { if (geom.ID == objid) { areaList.Rows[i].Cells["areaname"].Tag = geom; areaList.Rows[i].Cells["areaname"].Value = geom.Text; break; } } break; } } } } for (int row = 0; row < areaList.RowCount; row++) { string data = areaList.GetGridValue(row, "低效地类型").ToString(); //areaList_CellValueInputed(areaList.Rows[row].Cells["低效地类型"], data); if (hash.ContainsKey(data)) { int index = (int)hash[data]; if (fields.Count > index && index >= 0) { for (int i = 0; i < areaList.ColumnCount; i++) { areaList.Rows[row].Cells[i].ReadOnly = true; } for (int i = 0; i < fields[index].Length; i++) { areaList.Rows[row].Cells[fields[index][i]].ReadOnly = false; } } } } _OldArea = txtQuYu.Text.Trim(); _OldYear = (int)txtYear.Value; IsModify = false; areaList.Focus(); }
private void txtQuYu_TextChanged(object sender, EventArgs e) { if (_OldArea == txtQuYu.Text.Trim() && (int)txtYear.Value == _OldYear) { return; } bool ismodify = _DeleteObject.Count > 0; if (!ismodify) { for (int i = 0; i < areaList.RowCount; i++) { string flag = areaList.GetGridValue(i, "modify").ToString(); if (flag == "0" || flag == "1") { ismodify = true; break; } } } if (ismodify) { DialogResult ret = MessageBox.Show("数据已经被更改,是否需要保存更改的数据?", "提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (ret == DialogResult.Cancel) { return; } if (ret == DialogResult.Yes) { btnOk_Click(null, null); if (!_SaveSuccess) { txtQuYu.Text = _OldArea; txtYear.Value = _OldYear; return; } } } if (txtQuYu.Text.Trim() == "") { MessageBox.Show("请选择区域。"); return; } _OldArea = txtQuYu.Text.Trim(); _OldYear = (int)txtYear.Value; string sql = SqlHelper.GetSql("SelectProjectById"); List <SqlParameter> param = new List <SqlParameter>(); param.Add(new SqlParameter("area", txtQuYu.Text.Trim())); param.Add(new SqlParameter("date", txtYear.Value.ToString())); param.Add(new SqlParameter("MapId", _Map.MapId)); DataTable table = SqlHelper.Select(sql, param); areaList.Rows.Clear(); if (table == null || table.Rows.Count <= 0) { SetControlStatus(); return; } for (int i = 0; i < table.Rows.Count; i++) { int row = areaList.Rows.Add(); for (int j = 0; j < areaList.ColumnCount; j++) { for (int k = 0; k < table.Columns.Count; k++) { if (areaList.Columns[j].Name == table.Columns[k].ColumnName) { areaList.Rows[row].Cells[j].Value = table.Rows[i][k]; break; } } areaList.Rows[row].Cells["OldLayerId"].Value = table.Rows[i]["LayerId"]; areaList.Rows[row].Cells["OldObjectId"].Value = table.Rows[i]["ObjectId"]; areaList.Rows[row].Cells["modify"].Value = ""; } } for (int i = 0; i < areaList.RowCount; i++) { decimal layerid = (decimal)areaList.GetGridValue(i, "LayerId"); decimal objid = (decimal)areaList.GetGridValue(i, "ObjectId"); foreach (ILayer layer in Map.Layers) { if (layer.ID == layerid && layer is VectorLayer) { GeometryProvider provider = (GeometryProvider)((VectorLayer)layer).DataSource; foreach (Geometry geom in provider.Geometries) { if (geom.ID == objid) { areaList.Rows[i].Cells["areaname"].Tag = geom; areaList.Rows[i].Cells["areaname"].Value = geom.Text; break; } } break; } } } for (int row = 0; row < areaList.RowCount; row++) { string data = areaList.GetGridValue(row, "低效地类型").ToString(); //areaList_CellValueInputed(areaList.Rows[row].Cells["低效地类型"], data); if (hash.ContainsKey(data)) { int index = (int)hash[data]; if (fields.Count > index && index >= 0) { for (int i = 0; i < areaList.ColumnCount; i++) { areaList.Rows[row].Cells[i].ReadOnly = true; } for (int i = 0; i < fields[index].Length; i++) { areaList.Rows[row].Cells[fields[index][i]].ReadOnly = false; } } } } _OldArea = txtQuYu.Text.Trim(); _OldYear = (int)txtYear.Value; IsModify = false; SetControlStatus(); }
private void OnUpdatePrimitive() { GeometryProvider.Build(_mesh, _builder, _settings); }
private void ImageToWorld_Rotation(float deg) { var map = new Map(new Size(1000, 500)) { BackColor = System.Drawing.Color.LightSkyBlue }; map.Zoom = 1000; map.Center = new Point(25000, 75000); double mapScale = map.GetMapScale(96); double scaleX = 1; double scaleY = 1; System.Drawing.Drawing2D.Matrix mapTransform = new System.Drawing.Drawing2D.Matrix(); mapTransform.RotateAt(deg, new PointF(map.Size.Width / 2f, map.Size.Height / 2f)); map.MapTransform = mapTransform; var env = map.Envelope; // Affine Transformation: // 1: Translate to mapViewPort centre // 2: Reflect in X-Axis // 3: Rotation about mapViewPort centre // 4: Scale to map units // 5: Translate to map centre //CLOCKWISE affine transform (negate degrees) //double rad = -1 * deg * Math.PI / 180.0; //GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = // new ProjNet.CoordinateSystems.Transformations.AffineTransform( // scaleX * Math.Cos(rad), // -scaleX * Math.Sin(rad), // -scaleX * Math.Cos(rad) * map.Size.Width / 2f + scaleX * Math.Sin(rad) * map.Size.Height / 2f + map.Center.X, // -scaleY * Math.Sin(rad), // -scaleY * Math.Cos(rad), // scaleY * Math.Sin(rad) * map.Size.Width / 2f + scaleY * Math.Cos(rad) * map.Size.Height / 2f + map.Center.Y); //ANTICLCOCKWISE affine transform double rad = deg * Math.PI / 180.0; GeoAPI.CoordinateSystems.Transformations.IMathTransform trans = new ProjNet.CoordinateSystems.Transformations.AffineTransform( scaleX * Math.Cos(rad), scaleX * Math.Sin(rad), -scaleX * Math.Cos(rad) * map.Size.Width / 2d - scaleX * Math.Sin(rad) * map.Size.Height / 2d + map.Center.X, scaleY * Math.Sin(rad), -scaleY * Math.Cos(rad), -scaleY * Math.Sin(rad) * map.Size.Width / 2d + scaleY * Math.Cos(rad) * map.Size.Height / 2d + map.Center.Y); // image coordindates var pts = new[] { new Point(map.Size.Width / 2f, map.Size.Height / 2f), // centre new Point(0, 0), // UL new Point(map.Size.Width, 0), // UR new Point(map.Size.Width, map.Size.Height), // LR new Point(0, map.Size.Height), // LL new Point(map.Size.Width * 0.05, map.Size.Height * 0.95), // LL inset 5% new Point(map.Size.Width * 0.95, map.Size.Height * 0.95), // LR inset 5% new Point(map.Size.Width * 0.95, map.Size.Height * 0.05), // UR inset 5% new Point(map.Size.Width * 0.05, map.Size.Height * 0.05) // UL inset 5% }; LineString lineString = new LineString(pts); NetTopologySuite.CoordinateSystems.Transformations.GeometryTransform.TransformLineString(new GeometryFactory(new PrecisionModel()), lineString, trans); // .Net Matrix //System.Drawing.Drawing2D.Matrix matrix; //matrix = new System.Drawing.Drawing2D.Matrix(); //matrix.Translate(-map.Size.Width / 2f, -map.Size.Height / 2f); // shift origin to viewport centre //matrix.Scale(1, -1, System.Drawing.Drawing2D.MatrixOrder.Append); // reflect in X axis //matrix.Rotate(deg, System.Drawing.Drawing2D.MatrixOrder.Append); // rotate about viewport centre //matrix.Scale((float)scaleX, (float)scaleY, System.Drawing.Drawing2D.MatrixOrder.Append); // scale //matrix.Translate((float)map.Center.X, (float)map.Center.Y, System.Drawing.Drawing2D.MatrixOrder.Append); // translate to map centre //var ptsF = new[] { new PointF(map.Size.Width / 2f, map.Size.Height / 2f), // centre // new PointF(0, 0), // UL // new PointF(map.Size.Width, 0), // UR // new PointF(map.Size.Width, map.Size.Height), // LR // new PointF(0, map.Size.Height) }; // LL //matrix.TransformPoints(ptsF); // validate ImageToWorld calcs with independent affine transformation Assert.IsTrue(lineString.GetPointN(0).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width / 2f, map.Size.Height / 2f), true), 0.001), "Centre: " + deg + " deg"); Assert.IsTrue(lineString.GetPointN(1).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, 0), true), 0.001), "Upper Left: " + deg + " deg"); Assert.IsTrue(lineString.GetPointN(2).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, 0), true), 0.001), "Upper Right: " + deg + " deg"); Assert.IsTrue(lineString.GetPointN(3).Coordinate.Equals2D(map.ImageToWorld(new PointF(map.Size.Width, map.Size.Height), true), 0.001), "Lower Right: " + deg + " deg"); Assert.IsTrue(lineString.GetPointN(4).Coordinate.Equals2D(map.ImageToWorld(new PointF(0, map.Size.Height), true), 0.001), "Lower Left: " + deg + " deg"); // validate map envelope: lineString outline = image extents, so lineString.EnvelopeInternal should equal map.Envelope // this test found long-standing bug in Map.Envelope calcs Assert.IsTrue(env.BottomLeft().Equals2D(lineString.EnvelopeInternal.BottomLeft(), 0.1)); Assert.IsTrue(env.TopLeft().Equals2D(lineString.EnvelopeInternal.TopLeft(), 0.1)); Assert.IsTrue(env.TopRight().Equals2D(lineString.EnvelopeInternal.TopRight(), 0.1)); Assert.IsTrue(env.BottomRight().Equals2D(lineString.EnvelopeInternal.BottomRight(), 0.1)); // visual checks var vl = new VectorLayer("Test Points"); var gp = new GeometryProvider(lineString); gp.Geometries.Add(new NetTopologySuite.Geometries.Point(25000, 75000)); vl.DataSource = gp; var cps = new SharpMap.Rendering.Symbolizer.CharacterPointSymbolizer(); cps.CharacterIndex = 221; cps.Font = new Font("Wingdings", 30); vl.Style.PointSymbolizer = cps; map.Layers.Add(vl); map.ZoomToBox(lineString.EnvelopeInternal); string fn = $"MapRotation_{deg:000}_{map.Zoom:0}_{map.MapScale:0}.bmp"; using (var img = map.GetMap(96)) img.Save(fn, System.Drawing.Imaging.ImageFormat.Bmp); map.Dispose(); }
protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); if (e.Button == MouseButtons.Right) { if (!_DrawEnd) { if (MainMapImage.ActiveTool == MapImage.Tools.MeasureArea || MainMapImage.ActiveTool == MapImage.Tools.DefineArea || MainMapImage.ActiveTool == MapImage.Tools.SelectPoint || MainMapImage.ActiveTool == MapImage.Tools.ZoomArea) { if (MainMapImage.ActiveTool == MapImage.Tools.ZoomArea) { this.Visible = false; if (AfterDefineArea != null) { AfterDefineArea(SelectionType, null, _R); } return; } if (marea.ExteriorRing.Vertices.Count > 0) { marea.ExteriorRing.Vertices.RemoveAt(marea.ExteriorRing.Vertices.Count - 1); } else { this.Visible = false; if (AfterDefineArea != null) { AfterDefineArea(SelectionType, null, _R); } return; } if (MainMapImage.ActiveTool == MapImage.Tools.MeasureArea) { if (SetArea != null) { SetArea(marea.Area); } } else if (MainMapImage.ActiveTool == MapImage.Tools.DefineArea || MainMapImage.ActiveTool == MapImage.Tools.SelectPoint) { Refresh(); Polygon newArea = null; string text = null; if (MainMapImage.ActiveTool == MapImage.Tools.DefineArea) { InputStringForm form = new InputStringForm("请输入区域名称:", ""); if (form.ShowDialog() == DialogResult.OK) { //text = form.InputContext; marea.Text = form.InputContext; } else { this.Visible = false; if (AfterDefineArea != null) { AfterDefineArea(SelectionType, null, _R); } return; } //取得当前图层 VectorLayer layer = (VectorLayer)MainMapImage.Map.CurrentLayer; //取得图层数据源 GeometryProvider provider = (GeometryProvider)layer.DataSource; //添加当前定义的多边形 newArea = marea.Clone(); newArea.Text = marea.Text; newArea.ID = marea.ID; provider.Geometries.Add(newArea); //强制地图刷新 MainMapImage.Refresh(); } if (AfterDefineArea != null) { AfterDefineArea(SelectionType, marea, _R); } if (newArea != null) { newArea.ID = marea.ID; } //重新初始化多边形 marea = new Polygon(); this.Visible = false; } } else if (MainMapImage.ActiveTool == MapImage.Tools.MeasureLength) { mline.Vertices.RemoveAt(mline.Vertices.Count - 1); //设置测量窗口的信息 if (SetLength != null) { SetLength(mline.Length, mline.Length - oldlength); } } Refresh(); _DrawEnd = true; } } if (e.Button == MouseButtons.Left) { if (_DrawEnd) { Initial(SelectionType); } _DrawEnd = false; //将图像坐标转化为地图坐标 EasyMap.Geometries.Point WorldPos = MainMapImage.Map.ImageToWorld(new System.Drawing.Point(e.X, e.Y)); //保存上一次的长度,以便计算出最后一段直线的长度 oldlength = mline.Length; if (SelectionType == SELECTION_TYPE.CIRCLETEMP) { //添加救援点 //double radius = 10; //double deltaDegrees = 2; //double deltaRadians = (Math.PI / 180) * deltaDegrees; EasyMap.Geometries.Point marea = new Geometries.Point(); marea = new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y); EasyMap.Geometries.Point newArea = new Geometries.Point(); //string text = null; if (MainMapImage.ActiveTool == MapImage.Tools.DefineArea) { InputStringForm form = new InputStringForm("请输入救援力量名称:", ""); if (form.ShowDialog() == DialogResult.OK) { //text = form.InputContext; marea.Text = form.InputContext; } else { this.Visible = false; if (AfterDefineArea1 != null) { AfterDefineArea1(SelectionType, null, _R); } return; } //取得当前图层 VectorLayer layer = (VectorLayer)MainMapImage.Map.CurrentLayer; //取得图层数据源 GeometryProvider provider = (GeometryProvider)layer.DataSource; //添加当前定义的多边形 marea.ID = MapDBClass.GetObjectId(MainMapImage.Map.MapId, layer.ID); newArea = marea.Clone(); newArea.Text = marea.Text; newArea.ID = marea.ID; provider.Geometries.Add(newArea); //强制地图刷新 MainMapImage.Refresh(); } if (AfterDefineArea1 != null) { AfterDefineArea1(SelectionType, marea, _R); } //强制地图刷新 MainMapImage.Refresh(); newArea.ID = marea.ID; //重新初始化多边形 //marea = new Polygon(); marea = new Geometries.Point(); this.Visible = false; ////强制地图刷新 MainMapImage.Refresh(); } else if (SelectionType == SELECTION_TYPE.PROBLEMPOINT) { EasyMap.Geometries.Point marea = new Geometries.Point(); marea = new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y); EasyMap.Geometries.Point newArea = new Geometries.Point(); if (MainMapImage.ActiveTool == MapImage.Tools.DefineArea) { InputStringForm form = new InputStringForm("请输入遇难点名称:", ""); if (form.ShowDialog() == DialogResult.OK) { //text = form.InputContext; marea.Text = form.InputContext; } else { this.Visible = false; if (AfterDefineArea1 != null) { AfterDefineArea1(SelectionType, null, _R); } return; } //取得当前图层 VectorLayer layer = (VectorLayer)MainMapImage.Map.CurrentLayer; //取得图层数据源 GeometryProvider provider = (GeometryProvider)layer.DataSource; marea.ID = MapDBClass.GetObjectId(MainMapImage.Map.MapId, layer.ID); //添加当前定义的多边形 newArea = marea.Clone(); newArea.Text = marea.Text; newArea.ID = marea.ID; provider.Geometries.Add(newArea); //强制地图刷新 MainMapImage.Refresh(); } if (AfterDefineArea1 != null) { AfterDefineArea1(SelectionType, marea, _R); } //强制地图刷新 MainMapImage.Refresh(); newArea.ID = marea.ID; marea = new Geometries.Point(); this.Visible = false; ////强制地图刷新 MainMapImage.Refresh(); } else if (SelectionType == SELECTION_TYPE.RECTANGLE || SelectionType == SELECTION_TYPE.CIRCLE) { marea.ExteriorRing.Vertices.Add(WorldPos); marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y)); if (marea.ExteriorRing.Vertices.Count > 2) { _DrawEnd = true; this.Visible = false; if (SelectionType == SELECTION_TYPE.RECTANGLE) { double x1 = marea.ExteriorRing.Vertices[0].X; double y1 = marea.ExteriorRing.Vertices[0].Y; double x3 = marea.ExteriorRing.Vertices[1].X; double y3 = marea.ExteriorRing.Vertices[1].Y; double x2 = x1; double y2 = y3; double x4 = x3; double y4 = y1; marea.ExteriorRing.Vertices.Clear(); marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(x1, y1)); marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(x2, y2)); marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(x3, y3)); marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(x4, y4)); } if (AfterDefineArea != null) { AfterDefineArea(SelectionType, marea, _R); } //Polygon newArea = null; //if (SelectionType == SELECTION_TYPE.CIRCLE) //{ // InputStringForm form = new InputStringForm("请输入区域名称:", ""); // if (form.ShowDialog() == DialogResult.OK) // { // //text = form.InputContext; // marea.Text = form.InputContext; // } // else // { // this.Visible = false; // if (AfterDefineArea != null) // { // AfterDefineArea(SelectionType, null, _R); // } // return; // } // //取得当前图层 // VectorLayer layer = (VectorLayer)MainMapImage.Map.CurrentLayer; // //取得图层数据源 // GeometryProvider provider = (GeometryProvider)layer.DataSource; // //添加当前定义的多边形 // newArea = marea.Clone(); // newArea.Text = ""; // newArea.ID = marea.ID; // provider.Geometries.Add(newArea); // //强制地图刷新 // MainMapImage.Refresh(); //} return; } } else if (SelectionType == SELECTION_TYPE.CIRCLE_RADIO) { marea.ExteriorRing.Vertices.Add(WorldPos); XYInputForm form = new XYInputForm(); form.txtX.Enabled = false; form.txtY.Enabled = false; form.XX = marea.ExteriorRing.Vertices[0].X; form.YY = marea.ExteriorRing.Vertices[0].Y; if (form.ShowDialog() == DialogResult.OK) { marea.ExteriorRing.Vertices.Add(WorldPos); marea.ExteriorRing.Vertices.Add(WorldPos); _R = (float)form.R; if (AfterDefineArea != null) { AfterDefineArea(SelectionType, marea, _R); } } _DrawEnd = true; this.Visible = false; return; } //如果是测量长度 else if (MainMapImage.ActiveTool == MapImage.Tools.MeasureLength) { //添加地图坐标 mline.Vertices.Add(WorldPos); //如果是第一次添加,那么需要追加一个点,以便在鼠标移动的时候更改这个点 if (mline.Vertices.Count < 2) { mline.Vertices.Add(new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y)); } } //如果是测量面积 else if (MainMapImage.ActiveTool == MapImage.Tools.MeasureArea || MainMapImage.ActiveTool == MapImage.Tools.DefineArea || MainMapImage.ActiveTool == MapImage.Tools.SelectPoint || MainMapImage.ActiveTool == MapImage.Tools.ZoomArea || SelectionType == SELECTION_TYPE.POLYGON) { if (MainMapImage.ActiveTool == MapImage.Tools.ZoomArea && marea.ExteriorRing.Vertices.Count == 2) { this.Visible = false; if (AfterDefineArea != null) { AfterDefineArea(SelectionType, marea, _R); } return; } //添加地图坐标 marea.ExteriorRing.Vertices.Add(WorldPos); //如果是第一次添加,那么需要追加一个点,以便在鼠标移动的时候更改这个点 if (marea.ExteriorRing.Vertices.Count < 2) { marea.ExteriorRing.Vertices.Add(new EasyMap.Geometries.Point(WorldPos.X, WorldPos.Y)); } } } }
/// <summary> /// 生成查询SQL /// </summary> /// <returns></returns> private string MakeSql(MyDataGridView view) { string sql = ""; view.DataSource = null; view.Columns.Clear(); DataGridViewTextBoxColumn c = new DataGridViewTextBoxColumn(); c.DataPropertyName = "layerid"; c.Visible = false; view.Columns.Add(c); c = new DataGridViewTextBoxColumn(); c.DataPropertyName = "objectid"; c.Visible = false; view.Columns.Add(c); c = new DataGridViewTextBoxColumn(); c.DataPropertyName = "区域名称"; c.HeaderText = "区域名称"; view.Columns.Add(c); foreach (TreeNode node in geomTree.Nodes) { ILayer layer = node.Tag as ILayer; int row = view.Rows.Add(); foreach (TreeNode subnode in node.Nodes) { if (subnode.Checked) { int col = -1; for (int i = 0; i < view.RowCount; i++) { for (int j = 0; j < view.ColumnCount; j++) { if (view.GetGridValue(i, j).ToString() == subnode.Text) { col = j; break; } } if (col >= 0) { break; } } if (col < 0) { DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn(); column.DataPropertyName = subnode.Text; column.Tag = "[" + subnode.Text + "]"; column.HeaderText = subnode.Text; col = view.Columns.Add(column); } view.Rows[row].Cells[col].Value = subnode.Text; view.Rows[row].Cells[col].Tag = "[" + GetTableName(layer) + "].[" + subnode.Text + "]"; } } } int index = 0; foreach (TreeNode node in geomTree.Nodes) { bool find = false; foreach (TreeNode subnode in node.Nodes) { if (subnode.Checked) { find = true; break; } } if (find) { string subsql = ""; VectorLayer layer = node.Tag as VectorLayer; for (int i = 3; i < view.ColumnCount; i++) { if (subsql != "") { subsql += ","; } if (view.Rows[index].Cells[i].Tag != null) { subsql += view.Rows[index].Cells[i].Tag.ToString() + " as " + view.Columns[i].Tag.ToString(); } else { subsql += "NULL as " + view.Columns[i].Tag.ToString(); } } if (subsql != "") { string tablename = GetTableName(layer); subsql = "select " + tablename + ".layerid," + tablename + ".objectid,isnull(t_object.name,'') as 区域名称," + subsql + " from " + tablename; //subsql += " and propertydate='" + dateTimePicker1.Value.ToShortDateString() + "'"; GeometryProvider datasource = layer.DataSource as GeometryProvider; string values = ""; foreach (Geometry geom in _ObjectsId) { if (datasource.Geometries.Contains(geom)) { if (values != "") { values += ","; } values += geom.ID; } } if (radioButton2.Checked) { subsql += " left join t_object on "; subsql += tablename + ".mapid=t_object.mapid "; subsql += " and " + tablename + ".layerid=t_object.layerid "; subsql += " and " + tablename + ".objectid=t_object.objectid "; subsql += " where " + tablename + ".mapid=" + _MapId; subsql += " and " + tablename + ".layerid=" + layer.ID; string sdate = Common.ConvertDateToString(dateTimePicker1.Value); subsql += " and " + tablename + ".propertydate='" + sdate + "'"; if (values != "") { subsql += " and " + tablename + ".objectid in (" + values + ")"; } else { subsql = ""; } } else { subsql += " left join t_object on "; subsql += tablename + ".mapid=t_object.mapid "; subsql += " and " + tablename + ".layerid=t_object.layerid "; subsql += " and " + tablename + ".objectid=t_object.objectid "; subsql += " inner join (select mapid,layerid,objectid,max(propertydate) as propertydate from " + tablename; subsql += " where " + tablename + ".mapid=" + _MapId; subsql += " and " + tablename + ".layerid=" + layer.ID; if (values != "") { subsql += " and " + tablename + ".objectid in (" + values + ")"; subsql += " group by mapid,layerid,objectid) t"; subsql += " on " + tablename + ".mapid=t.mapid"; subsql += " and " + tablename + ".layerid=t.layerid"; subsql += " and " + tablename + ".objectid=t.objectid"; subsql += " and " + tablename + ".propertydate=t.propertydate"; } else { subsql = ""; } } } if (subsql != "") { if (sql != "") { sql += "union all\r\n"; } sql += subsql + "\r\n"; } } index++; } return(sql); }