${iServer2_ServerGeometry_Title}

${iServer2_ServerGeometry_Description}

 /// <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);
 }
예제 #3
0
        /// <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;
 }