/// <summary>${iServer2_ServerGeometry_method_FromJson_D}</summary> /// <returns>${iServer2_ServerGeometry_method_FromJson_return}</returns> /// <param name="jsonObject">${iServer2_ServerGeometry_method_FromJson_param_jsonObject}</param> public static ServerGeometry FromJson(JsonObject jsonObject) { if (jsonObject == null) { return null; } ServerGeometry geometry = new ServerGeometry(); geometry.Feature = (ServerFeatureType)(int)jsonObject["feature"]; geometry.Id = (int)jsonObject["id"]; JsonArray parts = (JsonArray)jsonObject["parts"]; if (parts != null && parts.Count > 0) { geometry.Parts = new List<int>(); for (int i = 0; i < parts.Count; i++) { geometry.Parts.Add((int)parts[i]); } } JsonArray point2Ds = (JsonArray)jsonObject["point2Ds"]; if (point2Ds != null && point2Ds.Count > 0) { geometry.Point2Ds = new Point2DCollection(); for (int i = 0; i < point2Ds.Count; i++) { geometry.Point2Ds.Add(JsonHelper.ToPoint2D((JsonObject)point2Ds[i])); } } return geometry; }
private void query_ProcessCompleted(object sender, QueryEventArgs e) { if (e.ResultSet == null) { MessageBox.Show("No Result!"); return; } sgVegetable = e.ResultSet.RecordSets[0].Records[0].Shape; FeatureCollection fc = e.ResultSet.RecordSets[0].ToFeatureSet(); Feature f = new Feature { Geometry = fc[0].Geometry, Style = this.GreenFillStyle }; paramLayer.Features.Add(f); }
/// <summary>${iServer2_Utility_method_GeometryToServerGeometry_D}</summary> /// <param name="geo">${iServer2_Utility_method_GeometryToServerGeometry_param_geo}</param> /// <returns>${iServer2_Utility_method_GeometryToServerGeometry_return}</returns> public static ServerGeometry ToServerGeometry(this Geometry geo) { if (geo == null) { return null; } ServerGeometry sg = new ServerGeometry(); Point2DCollection list = new Point2DCollection(); List<int> parts = new List<int>(); if (geo is GeoRegion) { for (int i = 0; i < ((GeoRegion)geo).Parts.Count; i++) { for (int j = 0; j < ((GeoRegion)geo).Parts[i].Count; j++) { list.Add(new Point2D(((GeoRegion)geo).Parts[i][j].X, ((GeoRegion)geo).Parts[i][j].Y)); } parts.Add(((GeoRegion)geo).Parts[i].Count); } sg.Feature = ServerFeatureType.Polygon; } if (geo is GeoCircle) { for (int i = 0; i < ((GeoCircle)geo).Parts.Count; i++) { for (int j = 0; j < ((GeoCircle)geo).Parts[i].Count; j++) { list.Add(new Point2D(((GeoCircle)geo).Parts[i][j].X, ((GeoCircle)geo).Parts[i][j].Y)); } parts.Add(((GeoCircle)geo).Parts[i].Count); } sg.Feature = ServerFeatureType.Polygon; } if (geo is GeoLine) { for (int i = 0; i < ((GeoLine)geo).Parts.Count; i++) { for (int j = 0; j < ((GeoLine)geo).Parts[i].Count; j++) { list.Add(new Point2D(((GeoLine)geo).Parts[i][j].X, ((GeoLine)geo).Parts[i][j].Y)); } parts.Add(((GeoLine)geo).Parts[i].Count); } sg.Feature = ServerFeatureType.Line; } if (geo is GeoPoint) { list.Add(new Point2D(((GeoPoint)geo).X, ((GeoPoint)geo).Y)); parts.Add(list.Count); sg.Feature = ServerFeatureType.Point; } sg.Point2Ds = list; sg.Parts = parts; sg.Id = -1; return sg; }
//将地物添加到图层中 private void polygon_DrawCompleted(object sender, DrawEventArgs e) { //将绘制的地物显示在FeaturesLayer中 GeoRegion region = e.Geometry as GeoRegion; Feature f = new Feature(); f.Geometry = region; f.Style = new PredefinedFillStyle() { Fill = new SolidColorBrush(Colors.Green) }; drawLayer.Features.Add(f); //记录所绘制地物的点坐标 Point2DCollection ps = new Point2DCollection(); for (int i = 0; i < region.Parts.Count; i++) { for (int j = 0; j < region.Parts[i].Count; j++) { ps.Add(new Point2D(region.Parts[i][j].X, region.Parts[i][j].Y)); } } //将客户端地物转换成服务端几何类型 ServerGeometry Addshape = new ServerGeometry { Feature = ServerFeatureType.Polygon, Point2Ds = ps }; Entity entity = new Entity { Shape = Addshape }; AddEntityParameters parameters = new AddEntityParameters { MapName = "Changchun", LayerName = "Vegetable@Changchun", Entity = entity }; //与服务器交互 AddEntityService editService = new AddEntityService("http://localhost:7080/demo"); editService.ProcessAsync(parameters); editService.Failed += new EventHandler<ServiceFailedEventArgs>(Service_Failed); editService.ProcessCompleted += new EventHandler<EditEventArgs>(Service_ProcessCompleted); }
//获取选中地物属性 private void getEntityService_ProcessCompleted(object sender, GetEntityEventArgs e) { //隐藏DataGrid dgVegetable.Visibility = Visibility.Collapsed; //将得到的地物当前属性与DataGrid绑定 listVegetable = new List<VegetableData>(); listVegetable.Add(new VegetableData() { SmID = e.Result.FieldValues[0], SmUserID = e.Result.FieldValues[1], SmArea = e.Result.FieldValues[2], SmPerimeter = e.Result.FieldValues[3], ClassID = e.Result.FieldValues[4] }); dgVegetable.ItemsSource = listVegetable; //显示DataGrid,由于SmID、SmArea(面积)、SmPerimeter(周长)不能修改故设置这三项为只读 dgVegetable.Visibility = Visibility.Visible; dgVegetable.Columns[0].IsReadOnly = true; dgVegetable.Columns[2].IsReadOnly = true; dgVegetable.Columns[3].IsReadOnly = true; //获取选中地物的几何信息、属性表字段和地物ID号,为更新地物做准备 entityID = e.Result.ID; getEntityFieldNames = e.Result.FieldNames; shape = e.Result.Shape; //编辑地物形状 SuperMap.Web.Actions.Edit editEntity = new SuperMap.Web.Actions.Edit(MyMap, drawLayer); MyMap.Action = editEntity; editEntity.GeometryEdit += new EventHandler<SuperMap.Web.Actions.Edit.GeometryEditEventArgs>(editEntity_GeometryEdit); }
//编辑地物形状 private void editEntity_GeometryEdit(object sender, SuperMap.Web.Actions.Edit.GeometryEditEventArgs e) { if (e.Action == SuperMap.Web.Actions.Edit.GeometryEditAction.EditCompleted) { Point2DCollection ps = new Point2DCollection(); //记录编辑后的地物结点 GeoRegion region = e.Feature.Geometry as GeoRegion; for (int i = 0; i < region.Parts.Count; i++) { for (int j = 0; j < region.Parts[i].Count; j++) { ps.Add(new Point2D(region.Parts[i][j].X, region.Parts[i][j].Y)); } } shape = new ServerGeometry { Feature = ServerFeatureType.Polygon, Point2Ds = ps }; Entity entity = new Entity { Shape = shape, ID = entityID }; UpdateEntityParameters parameters = new UpdateEntityParameters { MapName = "Changchun", LayerName = "Vegetable@changchun", Entity = entity }; //与服务器交互更新地物形状 UpdateEntityService updateEntityService = new UpdateEntityService("http://localhost:7080/demo"); updateEntityService.ProcessAsync(parameters); updateEntityService.Failed += new EventHandler<ServiceFailedEventArgs>(Service_Failed); updateEntityService.ProcessCompleted += new EventHandler<EditEventArgs>(Service_ProcessCompleted); } }
private void request_Completed(object sender, RequestEventArgs e) { JsonObject jsonObject = (JsonObject)JsonObject.Parse(e.Result); ServerGeometry result = ServerGeometry.FromJson(jsonObject); LastResult = result; SpatialOperateEventArgs args = new SpatialOperateEventArgs(result, e.Result, e.UserState); OnProcessCompleted(args); }
internal static string ToJson(ServerGeometry serverGeometry) { if (serverGeometry == null) { return null; } string json = "{"; List<string> list = new List<string>(); list.Add(string.Format("\"feature\":{0}", (int)serverGeometry.Feature)); list.Add(string.Format("\"id\":{0}", serverGeometry.Id)); if (serverGeometry.Parts != null && serverGeometry.Parts.Count > 0) { List<string> parts = new List<string>(); foreach (int i in serverGeometry.Parts) { parts.Add(i.ToString()); } list.Add(string.Format("\"parts\":[{0}]", string.Join(",", parts.ToArray()))); } else //if (Parts == null) { list.Add(string.Format("\"parts\":null")); } if (serverGeometry.Point2Ds != null && serverGeometry.Point2Ds.Count > 0) { List<string> ps = new List<string>(); foreach (Point2D p in serverGeometry.Point2Ds) { ps.Add(JsonHelper.FromPoint2D(p)); } list.Add(string.Format("\"point2Ds\":[{0}]", string.Join(",", ps.ToArray()))); } else //if (Point2Ds == null) { list.Add(string.Format("\"point2Ds\":null")); } json += string.Join(",", list.ToArray()); json += "}"; return json; }
private void residential_Click(object sender, RoutedEventArgs e) { DrawPoint point = new DrawPoint(MyMap); MyMap.Action = point; point.DrawCompleted += (s2, e2) => { QueryByCenterParameters parameters = new QueryByCenterParameters { CenterPoint = e2.Geometry.Bounds.Center, Tolerance = 5, MapName = "Changchun", QueryParam = new QueryParam { QueryLayerParams = new List<QueryLayerParam>() { qlpResidentialArea } } }; QueryByCenterService query = new QueryByCenterService("http://localhost:7080/demo"); query.ProcessAsync(parameters); query.Failed += (s, args) => { MessageBox.Show(args.Error.ToString()); }; query.ProcessCompleted += (s3, e3) => { if (e3.ResultSet == null) { MessageBox.Show("No Result!"); return; } sgResidentialArea = e3.ResultSet.RecordSets[0].Records[0].Shape; FeatureCollection fc = e3.ResultSet.RecordSets[0].ToFeatureSet(); Feature f = new Feature { Geometry = fc[0].Geometry, Style = this.RedFillStyle }; paramLayer.Features.Add(f); }; }; }
/// <summary>${iServer2_SpatialOperateEventArgs_constructor_D}</summary> public SpatialOperateEventArgs(ServerGeometry result, string originResult, object token) : base(token) { Result = result; OriginResult = originResult; }