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.
289 lines
11 KiB
289 lines
11 KiB
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Controls; |
|
using ESRI.ArcGIS.Display; |
|
using ESRI.ArcGIS.esriSystem; |
|
using ESRI.ArcGIS.Geometry; |
|
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 System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.IO; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
using System.Windows; |
|
using System.Windows.Controls; |
|
using System.Windows.Data; |
|
using System.Windows.Documents; |
|
using System.Windows.Input; |
|
using System.Windows.Media; |
|
using System.Windows.Media.Imaging; |
|
using System.Windows.Navigation; |
|
using System.Windows.Shapes; |
|
|
|
namespace Kingo.Plugin.BGSetting.View.ViewSystemSetting |
|
{ |
|
/// <summary> |
|
/// ViewAuthorizaManage.xaml 的交互逻辑 |
|
/// </summary> |
|
public partial class ViewAuthorizaManage : UserControl |
|
{ |
|
private AxMapControl mapControl = null; |
|
KGIS.Framework.Core.Services.RunIDService2 SQInfo = null; |
|
public static IGeometryFactory3 GeometryFactory3 { get; set; } |
|
public ViewAuthorizaManage() |
|
{ |
|
InitializeComponent(); |
|
InitData(); |
|
} |
|
|
|
public void InitData() |
|
{ |
|
SQInfo = KGIS.Framework.Core.Services.RunIDService2.Instance; |
|
txtXZQ.Text = GetXZQDic(SQInfo.Codes).ToString(); |
|
txtJZSJ.Text = SQInfo.ExpirationTime.ToString(); |
|
} |
|
|
|
private void DispalySQ_Click(object sender, RoutedEventArgs e) |
|
{ |
|
string SQstring = SQInfo.Area; |
|
if (!string.IsNullOrWhiteSpace(SQstring)) |
|
{ |
|
string[] rings = SQstring.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); |
|
string coord = string.Empty; |
|
if (rings.Length > 1) |
|
{ |
|
coord = "MULTIPOLYGON("; |
|
foreach (var ring in rings) |
|
{ |
|
string Temp_Coordinate = string.Empty; |
|
string[] points = ring.TrimEnd(';').Split(';'); |
|
string strRing = "(("; |
|
foreach (var item in points) |
|
{ |
|
strRing += item.Replace(',', ' ') + ","; |
|
} |
|
strRing = strRing.TrimEnd(','); |
|
strRing += ")),"; |
|
coord += strRing; |
|
} |
|
coord = coord.TrimEnd(','); |
|
coord += ")"; |
|
} |
|
else |
|
{ |
|
coord = string.Format("POLYGON(("); |
|
string[] points = SQstring.TrimEnd(';').Split(';'); |
|
foreach (var item in points) |
|
{ |
|
coord += item.Replace(',', ' ') + ","; |
|
} |
|
coord = coord.TrimEnd(','); |
|
coord += "))"; |
|
} |
|
IGeometry geo = GetPolygonFromWkt(coord); |
|
|
|
ISpatialReferenceFactory NewSpatialReference = new SpatialReferenceEnvironmentClass(); |
|
geo.SpatialReference = NewSpatialReference.CreateGeographicCoordinateSystem(4490); |
|
geo.Project(MapsManager.Instance.MapService.getAxMapControl().SpatialReference); |
|
ITopologicalOperator topo = geo as ITopologicalOperator; |
|
geo = topo.Buffer(2000); |
|
|
|
DrawPolygonElement(geo, "授权范围"); |
|
AreaEnvOfeat(geo); |
|
} |
|
//AreaEnvOfeat(ConvertWKTToIGeometry(SQstring)); |
|
} |
|
private IGeometry GetPolygonFromWkt(string pointsStr) |
|
{ |
|
try |
|
{ |
|
//OSGeo.OGR.Ogr.RegisterAll(); |
|
IGeometry geometry = new PolygonClass(); |
|
OSGeo.OGR.Geometry rstGeometry = OSGeo.OGR.Geometry.CreateFromWkt(pointsStr); |
|
byte[] geometryBytes = new byte[rstGeometry.WkbSize()]; |
|
rstGeometry.ExportToWkb(geometryBytes); |
|
IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3; |
|
int bytesLen = geometryBytes.Length; |
|
factory.CreateGeometryFromWkbVariant(geometryBytes, out geometry, out bytesLen); |
|
IPolygon polygon = geometry as IPolygon; |
|
polygon.Close(); |
|
ITopologicalOperator pBoundaryTop = polygon as ITopologicalOperator; |
|
pBoundaryTop.Simplify(); |
|
return geometry; |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
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) |
|
{ |
|
strWhere += string.Format(" or XZQ = '{0}'", item.Replace("00", "")); |
|
} |
|
} |
|
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(); |
|
} |
|
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(); |
|
pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSDiagonalCross; |
|
//设置线宽和线的颜色 |
|
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; |
|
} |
|
} |
|
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; |
|
} |
|
} |
|
} |
|
}
|
|
|