You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
371 lines
16 KiB
371 lines
16 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Controls; |
|
using ESRI.ArcGIS.Display; |
|
using ESRI.ArcGIS.esriSystem; |
|
using ESRI.ArcGIS.Geometry; |
|
using KGIS.Framework.Core.Services; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Framework.Utils.Utility; |
|
using Kingo.PluginServiceInterface.Helper; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.IO; |
|
using System.Windows; |
|
using System.Windows.Forms; |
|
using UserControl = System.Windows.Controls.UserControl; |
|
|
|
namespace Kingo.Plugin.SystemSetting.View.ViewSystemSetting |
|
{ |
|
/// <summary> |
|
/// ViewAuthoriza.xaml 的交互逻辑 |
|
/// </summary> |
|
public partial class ViewAuthoriza : UserControl |
|
{ |
|
private AxMapControl mapControl = null; |
|
KGIS.Framework.Core.Services.RunIDService2 SQInfo = null; |
|
public static IGeometryFactory3 GeometryFactory3 { get; set; } |
|
public ViewAuthoriza() |
|
{ |
|
InitializeComponent(); |
|
InitData(); |
|
} |
|
public void InitData() |
|
{ |
|
SQInfo = RunIDService2.Instance; |
|
txtXZQ.Text = GetXZQDic(SQInfo.Codes).ToString(); |
|
txtJZSJ.Text = SQInfo.ExpirationTime.ToString(); |
|
|
|
Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "UpdatedTime" }); |
|
} |
|
|
|
private void DispalySQ_Click(object sender, RoutedEventArgs e) |
|
{ |
|
IGeometry geo = null; |
|
try |
|
{ |
|
geo = AuthorizationVerification.DrawAuthorizationRange(MapsManager.Instance.MapService.getAxMapControl().SpatialReference); |
|
if (geo != null && !geo.IsEmpty) |
|
{ |
|
if (mapControl == null || mapControl.ActiveView == null || mapControl.ActiveView.GraphicsContainer == null) |
|
mapControl = MapsManager.Instance.MapService.getAxMapControl() as AxMapControl; |
|
mapControl.ActiveView.GraphicsContainer.DeleteAllElements(); |
|
mapControl.Refresh(); |
|
|
|
//DrawPolygonElement(geo, "授权范围"); |
|
DrawBaseGraph(geo, 150, 150, 150); |
|
AreaEnvOfeat(geo); |
|
|
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(mapControl.ActiveView.GraphicsContainer); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("执行显示授权异常:" + ex.Message); |
|
LogAPI.Debug("执行显示授权异常:" + ex.StackTrace); |
|
} |
|
} |
|
public string GetXZQDic(List<string> Codes) |
|
{ |
|
IRDBHelper rdbHelper = null; |
|
string SQXZQs = string.Empty; |
|
try |
|
{ |
|
string systemPath = SysAppPath.GetDataBasePath() + "System.mdb"; |
|
if (File.Exists(systemPath)) |
|
{ |
|
string connStr = SysConfigsOprator.GetDBConnectionByName("MDBOledbConnection"); |
|
connStr = string.Format(connStr, systemPath); |
|
rdbHelper = RDBFactory.CreateDbHelper(connStr, DatabaseType.MSAccess); |
|
string strPrWhere = "1=2"; |
|
string strWhere = string.Empty; |
|
if (Codes != null) |
|
{ |
|
foreach (var item in Codes) |
|
{ |
|
if (item.IndexOf("00") == 4) |
|
strWhere += string.Format(" or XZQ Like '{0}%'", item.Replace("00", "")); |
|
else if (item.IndexOf("0000") == 2) |
|
strWhere += string.Format(" or XZQ Like '{0}%'", item.Replace("0000", "")); |
|
else |
|
strWhere += string.Format(" or XZQ Like '{0}%'", item); |
|
} |
|
} |
|
if (!string.IsNullOrWhiteSpace(strWhere)) |
|
strWhere = strPrWhere + strWhere; |
|
else |
|
strWhere = "1=1"; |
|
string strSQL = "select OBJECTID AS ID, XZQ AS CODE,XZQMC AS NAME from XZQ Where " + strWhere + ""; |
|
DataTable dt = rdbHelper.ExecuteDatatable("Dic", strSQL, true); |
|
if (dt != null) |
|
{ |
|
foreach (var item in TBToList.ToList<DataDicTionary>(dt)) |
|
{ |
|
SQXZQs += string.Format("{0}({1}),", item.NAME, item.CODE); |
|
} |
|
SQXZQs.Trim(','); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
} |
|
finally |
|
{ |
|
if (rdbHelper != null) |
|
rdbHelper.DisConnect(); |
|
} |
|
if (!string.IsNullOrWhiteSpace(SQXZQs) && SQXZQs.Split(',').Length >= 2800) |
|
return "全国"; |
|
else |
|
return SQXZQs.Trim(','); |
|
} |
|
public void AreaEnvOfeat(IGeometry geometry) |
|
{ |
|
try |
|
{ |
|
mapControl = MapsManager.Instance.MapService.getAxMapControl() as AxMapControl; |
|
EnvelopeClass pEnvelope = new EnvelopeClass(); |
|
IEnvelope pEnvOfFeat = geometry.Envelope; |
|
//投影到当前地图坐标系定位缩放到当前要素 |
|
pEnvOfFeat.Project(mapControl.SpatialReference); |
|
IUnitConverter pUnitConverter = new UnitConverterClass(); |
|
double dScale = pUnitConverter.ConvertUnits(50, esriUnits.esriMeters, mapControl.MapUnits); |
|
pEnvelope.PutCoords(pEnvOfFeat.XMin - dScale, pEnvOfFeat.YMin - dScale, pEnvOfFeat.XMax + dScale, pEnvOfFeat.YMax + dScale); |
|
mapControl.ActiveView.Extent = pEnvelope; |
|
mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, mapControl.ActiveView.Extent); |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("操作异常!异常信息:" + ex.Message); |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
private void DrawPolygonElement(IGeometry pGeo, string pName) |
|
{ |
|
ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass |
|
{ |
|
Style = esriSimpleFillStyle.esriSFSNull |
|
}; |
|
//设置线宽和线的颜色 |
|
ISimpleLineSymbol pLineSymbol = new SimpleLineSymbolClass |
|
{ |
|
Color = Symbol.GetRGBColor(255, 0, 0), |
|
Width = 2 |
|
}; |
|
pSimpleFillSymbol.Outline = pLineSymbol; |
|
PolygonElementClass element = new PolygonElementClass |
|
{ |
|
Name = pName, |
|
Symbol = pSimpleFillSymbol, |
|
Geometry = pGeo |
|
}; |
|
IGraphicsLayer grapLayer = AddSubGraphicsLayer("TempSQFWGrapLayer"); |
|
(grapLayer as IGraphicsContainer).AddElement(element, 0); |
|
MapsManager.Instance.MapService.getAxMapControl().ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, MapsManager.Instance.MapService.getAxMapControl().ActiveView.Extent); |
|
} |
|
public IGraphicsLayer AddSubGraphicsLayer(string subgraphicsLayername) |
|
{ |
|
ICompositeGraphicsLayer pCompositeGLayer = MapsManager.Instance.MapService.getAxMapControl().Map.BasicGraphicsLayer as ICompositeGraphicsLayer; |
|
IGraphicsLayer pGLayer = null; |
|
try |
|
{ |
|
//查找是否已存在,如果不存在,跳转到catch内容. |
|
//如果查到不到,说明集合中并没有指定名称的graphicslayer |
|
pGLayer = pCompositeGLayer.FindLayer(subgraphicsLayername); |
|
} |
|
catch |
|
{ |
|
//若不存在,则添加一个指定名称的GraphicsLayer |
|
pGLayer = pCompositeGLayer.AddLayer(subgraphicsLayername, null); |
|
} |
|
return pGLayer; |
|
} |
|
|
|
private void DispalyGH_Click(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(null, "KGIS_SJJK", "400", "4x"); |
|
DialogResult dialog = lic.ShowDialog(); |
|
if (dialog == DialogResult.Yes || dialog == DialogResult.OK) |
|
{ |
|
InitData(); |
|
|
|
IGeometry geo = null; |
|
geo = AuthorizationVerification.DrawAuthorizationRange(MapsManager.Instance.MapService.getAxMapControl().SpatialReference); |
|
if (geo != null && !geo.IsEmpty) |
|
{ |
|
if (mapControl == null || mapControl.ActiveView == null || mapControl.ActiveView.GraphicsContainer == null) |
|
mapControl = MapsManager.Instance.MapService.getAxMapControl() as AxMapControl; |
|
mapControl.ActiveView.GraphicsContainer.DeleteAllElements(); |
|
mapControl.Refresh(); |
|
|
|
//DrawPolygonElement(geo, "授权范围"); |
|
DrawBaseGraph(geo, 150, 150, 150); |
|
AreaEnvOfeat(geo); |
|
|
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(mapControl.ActiveView.GraphicsContainer); |
|
} |
|
} |
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("执行更换授权异常:" + ex.Message); |
|
LogAPI.Debug("执行更换授权异常:" + ex.StackTrace); |
|
} |
|
} |
|
|
|
|
|
public IElement DrawBaseGraph(IGeometry geoDraw, int R = 255, int G = 0, int B = 0) |
|
{ |
|
try |
|
{ |
|
IElement result = null; |
|
IGraphicsContainer iGraphicsContainer = null; |
|
IElement CameraPointElm = null; |
|
IGraphicsContainer graphicsContainer = mapControl.ActiveView.GraphicsContainer; |
|
graphicsContainer.Reset(); |
|
while ((CameraPointElm = graphicsContainer.Next()) != null) |
|
{ |
|
if ((CameraPointElm as IElementProperties).Name == "BaseElement") |
|
break; |
|
} |
|
if (CameraPointElm == null) |
|
{ |
|
CameraPointElm = new GroupElementClass(); |
|
(CameraPointElm as IElementProperties).Name = "BaseElement"; |
|
mapControl.ActiveView.GraphicsContainer.AddElement(CameraPointElm, 2); |
|
} |
|
(CameraPointElm as IGroupElement).ClearElements(); |
|
if (geoDraw == null) return null; |
|
|
|
//替换Env改动---无用 |
|
//IMapControl2 axMapDraw = Env.Instance.KMap.HookHelper.Hook as IMapControl2; |
|
|
|
// 获取IRGBColor接口 |
|
IRgbColor color = new RgbColor(); |
|
// 设置颜色属性 |
|
color.Red = R; |
|
color.Green = G; |
|
color.Blue = B; |
|
switch (geoDraw.GeometryType) |
|
{ |
|
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: |
|
result = new MarkerElementClass(); |
|
IMarkerSymbol symbol = new SimpleMarkerSymbolClass(); |
|
symbol.Color = color; |
|
symbol.Size = 10; |
|
(result as IMarkerElement).Symbol = symbol; |
|
result.Geometry = geoDraw; |
|
break; |
|
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: |
|
result = new KGIS.Framework.Maps.PolygonElement() { Opacity = 100 }; |
|
// 获取ILine符号接口 |
|
ILineSymbol lineSymbol = new SimpleLineSymbol(); |
|
// 设置线符号属 |
|
lineSymbol.Width = 2; |
|
ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass(); |
|
simpleFillSymbol.Color = color; |
|
IRgbColor colorLine = new RgbColor(); |
|
colorLine.Red = 0; |
|
colorLine.Green = 0; |
|
colorLine.Blue = 0; |
|
lineSymbol.Color = colorLine; |
|
// 设置填充符号属性 |
|
simpleFillSymbol.Outline = lineSymbol; |
|
simpleFillSymbol.Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid;//esriSimpleFillStyle.esriSFSSolid; |
|
(result as IFillShapeElement).Symbol = simpleFillSymbol; |
|
result.Geometry = geoDraw; |
|
break; |
|
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: |
|
result = new LineElementClass(); |
|
// 获取ILine符号接口 |
|
ILineSymbol outline = new SimpleLineSymbol(); |
|
// 设置线符号属 |
|
outline.Width = 3; |
|
outline.Color = color; |
|
(outline as SimpleLineSymbol).Style = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid; |
|
(result as ILineElement).Symbol = outline; |
|
result.Geometry = geoDraw; |
|
break; |
|
default: |
|
break; |
|
} |
|
(CameraPointElm as IGroupElement).AddElement(result); |
|
iGraphicsContainer?.AddElement(result, 0); |
|
mapControl.ActiveView.Refresh(); |
|
return result; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("执行DrawGraph方法时异常:" + ex); |
|
return null; |
|
} |
|
} |
|
|
|
|
|
|
|
} |
|
public enum EnumSymbolType |
|
{ |
|
SimpleMarkerSymbol, |
|
SimpleLineSymbol, |
|
SimpleFillSymbol, |
|
FormattedTextSymbol |
|
} |
|
public class Symbol |
|
{ |
|
public static ISymbol CreateDefaultSymbol(EnumSymbolType pSymbolType) |
|
{ |
|
ISymbol symbol = null; |
|
IRgbColor color = new RgbColorClass(); |
|
color = GetRGBColor(0xff, 0, 0); |
|
switch (pSymbolType) |
|
{ |
|
case EnumSymbolType.SimpleMarkerSymbol: |
|
return symbol; |
|
|
|
case EnumSymbolType.SimpleLineSymbol: |
|
{ |
|
ISimpleLineSymbol symbol2 = new SimpleLineSymbolClass(); |
|
symbol2.Color = color; |
|
symbol2.Width = 1.5; |
|
return (ISymbol)symbol2; |
|
} |
|
case EnumSymbolType.SimpleFillSymbol: |
|
{ |
|
ISimpleFillSymbol symbol3 = new SimpleFillSymbolClass(); |
|
symbol3.Outline.Color = color; |
|
symbol3.Color = color; |
|
symbol3.Style = esriSimpleFillStyle.esriSFSDiagonalCross; |
|
return (ISymbol)symbol3; |
|
} |
|
} |
|
return symbol; |
|
} |
|
|
|
|
|
public static IRgbColor GetRGBColor(int pRed, int pGreen, int pBlue) |
|
{ |
|
try |
|
{ |
|
IRgbColor color = new RgbColorClass(); |
|
color.Red = pRed; |
|
color.Green = pGreen; |
|
color.Blue = pBlue; |
|
return color; |
|
} |
|
catch |
|
{ |
|
return null; |
|
} |
|
} |
|
} |
|
}
|
|
|