//创建饼状专题图 public static void CreatePieTheme(System.Web.UI.Page page, int nLayerID, string[] fields) { if (page == null) { return; } // 得到地图服务下的ArcObjects map对象 ESRI.ArcGIS.Server.IServerContext pServerContext = GetServerContext(page); ESRI.ArcGIS.Carto.IMapServer mapServer = (ESRI.ArcGIS.Carto.IMapServer)pServerContext.ServerObject; ESRI.ArcGIS.Carto.IMapServerObjects2 mapServerObjects = (ESRI.ArcGIS.Carto.IMapServerObjects2)mapServer; string mapName = mapServer.DefaultMapName; ESRI.ArcGIS.Carto.IMap aoMap = mapServerObjects.get_Map(mapName); ESRI.ArcGIS.Carto.ILayer pLayer = aoMap.get_Layer(nLayerID);//得到图层 ESRI.ArcGIS.Carto.IGeoFeatureLayer pGeoLayer = pLayer as IGeoFeatureLayer; //设置专题图的属性列表 ESRI.ArcGIS.Carto.IChartRenderer pCharRenderer = pServerContext.CreateObject("esriCarto.ChartRenderer") as IChartRenderer; ESRI.ArcGIS.Carto.IRendererFields pRenderFields = pCharRenderer as IRendererFields; foreach (string var in fields) { pRenderFields.AddField(var, var); } //实例化图表对象并取得元素指定属性的最大值 ESRI.ArcGIS.Display.IPieChartSymbol pPieSym = pServerContext.CreateObject("esriDisplay.PieChartSymbol") as ESRI.ArcGIS.Display.IPieChartSymbol; ESRI.ArcGIS.Display.IChartSymbol pCharSym = pPieSym as ESRI.ArcGIS.Display.IChartSymbol; pPieSym.Clockwise = true; pPieSym.UseOutline = true; pCharSym.MaxValue = GetStaMaxMin(fields, pGeoLayer)[0]; //设置饼图外围线 ISimpleLineSymbol pOutLine = pServerContext.CreateObject("esriDisplay.SimpleLineSymbol") as ISimpleLineSymbol; pOutLine.Color = GetRGB(255, 0, 128, pServerContext); pOutLine.Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid; pOutLine.Width = 1; pPieSym.Outline = pOutLine; IMarkerSymbol pMarkSym = pPieSym as IMarkerSymbol; pMarkSym.Size = 5; //设置饼状图填充效果 ESRI.ArcGIS.Display.ISymbolArray pSymArr = pPieSym as ISymbolArray; ISimpleFillSymbol pSimFillSym = pServerContext.CreateObject("esriDisplay.SimpleFillSymbol") as ESRI.ArcGIS.Display.SimpleFillSymbol; pSimFillSym.Color = GetRGB(128, 128, 128, pServerContext); pSimFillSym.Outline = pOutLine; Random randColor = new Random(); for (int i = 0; i < fields.Length; i++) { IFillSymbol pFillSym = pServerContext.CreateObject("esriDisplay.SimpleFillSymbol") as IFillSymbol; pFillSym.Color = GetRGB(randColor.Next(255), randColor.Next(255), randColor.Next(255), pServerContext); pSymArr.AddSymbol((ISymbol)pFillSym); } //设置地图图层背景 pSimFillSym = pServerContext.CreateObject("esriDisplay.SimpleFillSymbol") as ESRI.ArcGIS.Display.SimpleFillSymbol; pSimFillSym.Color = GetRGB(255, 128, 255, pServerContext); pCharRenderer.BaseSymbol = pSimFillSym as ISymbol; //设置饼状图表属性 IPieChartRenderer pPieChartRenderer = pCharRenderer as IPieChartRenderer; pPieChartRenderer.MinValue = 0.1; pPieChartRenderer.MinSize = 1; pPieChartRenderer.FlanneryCompensation = false; pPieChartRenderer.ProportionalBySum = true; pPieChartRenderer.ProportionalField = fields[0]; pCharRenderer.ChartSymbol = pPieSym as IChartSymbol; pCharRenderer.Label = "面积"; //应用饼状专题到指定图层 pCharRenderer.UseOverposter = false; pCharRenderer.CreateLegend(); pGeoLayer.Renderer = pCharRenderer as IFeatureRenderer; //刷新地图显示图表及图例 mapServerObjects.RefreshServerObjects(); // Map1.RefreshResource("MapResourceItem0"); pServerContext.ReleaseContext(); }
private byte[] ExportGeoJsonHandler(NameValueCollection boundVariables, JsonObject operationInput, string outputFormat, string requestProperties, out string responseProperties) { responseProperties = null; bool applyQuery = true; string retval = ""; string whereClause; bool found = operationInput.TryGetString("query", out whereClause); if (!found || string.IsNullOrEmpty(whereClause)) { //then no definition query applyQuery = false; } long?layerOrdinal; found = operationInput.TryGetAsLong("layer", out layerOrdinal); //.TryGetString("layer", out parm2Value); if (!found) { throw new ArgumentNullException("layer"); } string s = ""; ESRI.ArcGIS.Carto.IMapServer mapServer = (ESRI.ArcGIS.Carto.IMapServer)serverObjectHelper.ServerObject; ESRI.ArcGIS.Carto.IMapServerDataAccess mapServerObjects = (ESRI.ArcGIS.Carto.IMapServerDataAccess)mapServer; var lyr = mapServerObjects.GetDataSource(mapServer.DefaultMapName, Convert.ToInt32(layerOrdinal)); if (lyr is IFeatureClass) { IFeatureClass fclass = (IFeatureClass)lyr; retval = "{\"shape\": \"" + fclass.ShapeFieldName + "\"}"; IQueryFilter filter = new QueryFilterClass(); filter.set_OutputSpatialReference(fclass.ShapeFieldName, getWGS84()); if (applyQuery) { filter.WhereClause = whereClause; } IFeatureCursor curs = fclass.Search(filter, false); //apply extension methods here try { s = curs.ToGeoJson(); Marshal.ReleaseComObject(curs); } catch (Exception ex) { s = ex.GetBaseException().ToString(); //.StackTrace; } retval = s; } else { throw new Exception("Layer " + layerOrdinal.ToString() + " is not a feature layer."); } return(Encoding.UTF8.GetBytes(retval)); }
private byte[] ExportGeoJsonHandler(NameValueCollection boundVariables, JsonObject operationInput, string outputFormat, string requestProperties, out string responseProperties) { responseProperties = "{\"Content-Type\" : \"application/json\"}";; bool applyQuery = true; bool useBbox = true; bool useBboxSR = true; string retval = ""; string whereClause; string boxClause; int bboxSRID = 0; IPolygon queryGeom = null; Helpers helper = new Helpers(); bool found = operationInput.TryGetString("query", out whereClause); if (!found || string.IsNullOrEmpty(whereClause)) { //then no definition query applyQuery = false; } string ssrid; found = operationInput.TryGetString("bboxSR", out ssrid); if (!found || string.IsNullOrEmpty(ssrid)) { //then no definition query useBboxSR = false; } else { int srid; bool valid = int.TryParse(ssrid, out srid); if (valid) { bboxSRID = srid; } else { useBboxSR = false; } } found = operationInput.TryGetString("bbox", out boxClause); if (!found || string.IsNullOrEmpty(boxClause)) { //then no definition query useBbox = false; } if (useBbox) { try { double xmin; double ymin; double xmax; double ymax; string[] vals = boxClause.Split(new char[] { ',' }); if (vals.Length == 4) { bool bxmin = double.TryParse(vals[0], out xmin); bool bymin = double.TryParse(vals[1], out ymin); bool bxmax = double.TryParse(vals[2], out xmax); bool bymax = double.TryParse(vals[3], out ymax); if (bxmin && bymin && bxmax && bymax) { ISpatialReference sr = null; if (useBboxSR) { sr = helper.GetSpatialReference(bboxSRID); if (sr == null) { //erroneous srid, ignore bounding box useBbox = false; } } else { sr = helper.getWGS84(); } if (useBbox) { queryGeom = new Polygon() as IPolygon; IPointCollection coll = queryGeom as IPointCollection; coll.AddPoint(new Point() { X = xmin, Y = ymin, SpatialReference = sr }); coll.AddPoint(new Point() { X = xmin, Y = ymax, SpatialReference = sr }); coll.AddPoint(new Point() { X = xmax, Y = ymax, SpatialReference = sr }); coll.AddPoint(new Point() { X = xmax, Y = ymin, SpatialReference = sr }); coll.AddPoint(new Point() { X = xmin, Y = ymin, SpatialReference = sr }); queryGeom.SpatialReference = sr; } } else { useBbox = false; } } else { useBbox = false; } } catch { useBbox = false; } } long?layerOrdinal; found = operationInput.TryGetAsLong("layer", out layerOrdinal); //.TryGetString("layer", out parm2Value); if (!found) { throw new ArgumentNullException("layer"); } string s = ""; ESRI.ArcGIS.Carto.IMapServer mapServer = (ESRI.ArcGIS.Carto.IMapServer)serverObjectHelper.ServerObject; ESRI.ArcGIS.Carto.IMapServerDataAccess mapServerObjects = (ESRI.ArcGIS.Carto.IMapServerDataAccess)mapServer; var lyr = mapServerObjects.GetDataSource(mapServer.DefaultMapName, Convert.ToInt32(layerOrdinal)); if (lyr is IFeatureClass) { IFeatureClass fclass = (IFeatureClass)lyr; retval = "{\"shape\": \"" + fclass.ShapeFieldName + "\"}"; IQueryFilter filter = null; if (useBbox) { IGeoDataset gds = fclass as IGeoDataset; filter = new SpatialFilterClass(); ISpatialFilter spf = filter as ISpatialFilter; spf.Geometry = helper.TransformShapeCS(queryGeom, queryGeom.SpatialReference, gds.SpatialReference); spf.GeometryField = fclass.ShapeFieldName; spf.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; } else { filter = new QueryFilterClass(); } filter.set_OutputSpatialReference(fclass.ShapeFieldName, getWGS84()); if (applyQuery) { filter.WhereClause = whereClause; } IFeatureCursor curs = fclass.Search(filter, false); //apply extension methods here try { s = curs.ToGeoJson(); Marshal.ReleaseComObject(curs); } catch (Exception ex) { s = ex.GetBaseException().ToString(); //.StackTrace; } retval = s; } else { throw new Exception("Layer " + layerOrdinal.ToString() + " is not a feature layer."); } return(Encoding.UTF8.GetBytes(retval)); }
//创建柱状专题图 public void CreateBarRenderer(int layerID, string[] fields) { // 得到地图服务下的ArcObjects map对象 ESRI.ArcGIS.Server.IServerContext pServerContext = GetServerContext(); ESRI.ArcGIS.Carto.IMapServer mapServer = (ESRI.ArcGIS.Carto.IMapServer)pServerContext.ServerObject; ESRI.ArcGIS.Carto.IMapServerObjects2 mapServerObjects = (ESRI.ArcGIS.Carto.IMapServerObjects2)mapServer; string mapName = mapServer.DefaultMapName; ESRI.ArcGIS.Carto.IMap aoMap = mapServerObjects.get_Map(mapName); ESRI.ArcGIS.Carto.ILayer pLayer = aoMap.get_Layer(layerID);//得到图层 ESRI.ArcGIS.Carto.IGeoFeatureLayer pGeoLayer = pLayer as IGeoFeatureLayer; //设置专题图元素的属性名称列表 IChartRenderer pChartRender = pServerContext.CreateObject("esriCarto.ChartRenderer") as IChartRenderer; IRendererFields pRenderFields = pChartRender as IRendererFields; foreach (string var in fields) { pRenderFields.AddField(var, var); } //实例化图表对象并取得元素指定属性的最大值 IBarChartSymbol pBarChartSymbol = pServerContext.CreateObject("esriDisplay.BarChartSymbol") as IBarChartSymbol; IChartSymbol pChartSymbol = pBarChartSymbol as IChartSymbol; pChartSymbol.MaxValue = GetStaMaxMin(fields, pGeoLayer)[0]; pBarChartSymbol.Width = 8; IMarkerSymbol pMarkerSymbol = pBarChartSymbol as IMarkerSymbol; pMarkerSymbol.Size = 50; //设置柱状图每列填充效果 ISymbolArray pSymbolArray = pBarChartSymbol as ISymbolArray; Random ranColor = new Random(); for (int i = 0; i < fields.Length; i++) { IFillSymbol pFillSymbol = pServerContext.CreateObject("esriDisplay.SimpleFillSymbol") as IFillSymbol; pFillSymbol.Color = GetRGB(ranColor.Next(255), ranColor.Next(255), ranColor.Next(255), pServerContext); pSymbolArray.AddSymbol((ISymbol)pFillSymbol); } //设置地图图层背景 ESRI.ArcGIS.Display.ISimpleFillSymbol pFSymbol = pServerContext.CreateObject("esriDisplay.SimpleFillSymbol") as ESRI.ArcGIS.Display.SimpleFillSymbol; pFSymbol.Color = GetRGB(239, 228, 249, pServerContext); pChartRender.BaseSymbol = pFSymbol as ISymbol; //应用柱状专题到指定图层 pChartRender.ChartSymbol = pBarChartSymbol as IChartSymbol; pChartRender.Label = "Test"; pChartRender.UseOverposter = false; pChartRender.CreateLegend(); pGeoLayer.Renderer = pChartRender as IFeatureRenderer; //刷新地图显示图表及图例 mapServerObjects.RefreshServerObjects(); Map1.RefreshResource("MapResourceItem0"); Toc1.BuddyControl = "Map1"; //Toc1.Refresh(); Map1.Refresh(); pServerContext.ReleaseContext(); }
private byte[] ExportCsvHandler(NameValueCollection boundVariables, JsonObject operationInput, string outputFormat, string requestProperties, out string responseProperties) { string retval = ""; StringBuilder sb = new StringBuilder(); string s = ""; bool applyQuery = true; bool? applyHeader = true; //bool? applyGeoms = true; bool addHeader = false; //bool addGeoms = false; responseProperties = "{\"Content-Type\" : \"text/csv\"}"; string whereClause = ""; bool found = operationInput.TryGetString("query", out whereClause); if (!found || string.IsNullOrEmpty(whereClause)) { //then no definition query applyQuery = false; } long?layerOrdinal; found = operationInput.TryGetAsLong("layer", out layerOrdinal); //.TryGetString("layer", out parm2Value); if (!found) { throw new ArgumentNullException("layer"); } bool useHeader = operationInput.TryGetAsBoolean("headers", out applyHeader); if (useHeader) { if ((bool)applyHeader) { addHeader = true; } } //bool useGeoms = operationInput.TryGetAsBoolean("addgeoms", out applyGeoms); //if (useGeoms) //{ // if ((bool)applyGeoms) // { // addGeoms = true; // } //} ESRI.ArcGIS.Carto.IMapServer mapServer = (ESRI.ArcGIS.Carto.IMapServer)serverObjectHelper.ServerObject; ESRI.ArcGIS.Carto.IMapServerDataAccess mapServerObjects = (ESRI.ArcGIS.Carto.IMapServerDataAccess)mapServer; var lyr = mapServerObjects.GetDataSource(mapServer.DefaultMapName, Convert.ToInt32(layerOrdinal)); if (lyr is IFeatureClass) { IFeatureClass fclass = (IFeatureClass)lyr; IQueryFilter filter = new QueryFilterClass(); filter.set_OutputSpatialReference(fclass.ShapeFieldName, getWGS84()); if (applyQuery) { filter.WhereClause = whereClause; } IFeatureCursor curs = fclass.Search(filter, false); try { //(); s = curs.ToCSV(addHeader); Marshal.ReleaseComObject(curs); } catch (Exception ex) { s = ex.GetBaseException().ToString(); //.StackTrace; } retval = s; sb.Append(retval); } else { throw new Exception("Layer " + layerOrdinal.ToString() + " is not a feature layer."); } return(Encoding.UTF8.GetBytes(sb.ToString())); }