Tag: arcgis

如何从方法内部调用javascript函数?

我在里面…… public class bgchange : IMapServerDropDownBoxAction { void IServerAction.ServerAction(ToolbarItemInfo info) { Some code… 并且在“一些代码”之后我想触发 [WebMethod] public static void DoSome() { } 哪个触发了一些javascript。 这可能吗? 好的,在这里切换方法。 我能够调用dosome(); 哪个被解雇但没有触发javascript。 我曾尝试使用registerstartupscript方法,但不完全了解如何实现它。 这是我尝试过的: public class bgchange : IMapServerDropDownBoxAction { void IServerAction.ServerAction(ToolbarItemInfo info) { …my C# code to perform on dropdown selection… //now I want to trigger some javascript… // Define […]

加载ArcGIS数字化图像

我是GIS平台的新手。 在我的项目(Windows应用程序)中,我正在尝试在PictureBox中加载图像(区域的无人机图像)是GeoTIFF格式,大约950+ MB。 此图像已数字化(标记每个房屋的边界并标记为房屋号)和在Shapefile中导入的数据。 我使用以下代码提取XY坐标数据。 我将原始图像大小缩小到大约40-45 MB,并以JPG格式转换。 现在我必须在新的缩小图像上绘制我的Windows应用程序中的XY坐标数据。 我该如何实现这种情况? 我该怎么办? 我无法加载大约950+ MB的原始图像? 代码用于从Shapefile获取XY坐标 private void ReadShapeFile(string path) { ShapeFile.MapFilesInMemory = true; // open the shapefile EGIS.ShapeFileLib.ShapeFile sf = new EGIS.ShapeFileLib.ShapeFile(path); try { sf.RenderSettings = new EGIS.ShapeFileLib.RenderSettings(path, “”, this.Font); EGIS.ShapeFileLib.DbfReader dbfr = sf.RenderSettings.DbfReader; using (System.IO.StreamWriter writer = new System.IO.StreamWriter(“output.txt”)) { EGIS.ShapeFileLib.ShapeFileEnumerator sfEnum = sf.GetShapeFileEnumerator(); int recordIndex […]

ArcGis Engine,如何选择对象?

我正在尝试创建一个独立的应用程序,它可以加载ArcGis地图,在一个图层中选择一些对象并缩放到它们。 加载和显示地图确实有效,使用以下内容: AxMapControl _mapControl; // in constructor: _mapControl = new AxMapControl(); // in loading _mapControl.LoadMxFile(@”C:\Users\me\Documents\TestProject.mxd”); 这确实很好用,并且显示完整范围的地图(当然AxMapControl嵌入到WindowsFormsHost中,但这应该不是问题)。 但现在我需要选择一个或多个对象并缩放它们。 我试图在一个层中选择进行测试,但这根本不起作用: IFeatureSelection features = _mapControl.Map.Layer[0] as IFeatureSelection; if (features != null) { QueryFilter qf = new QueryFilterClass(); qf.WhereClause = “[Name]=’FS4711000′”; features.SelectFeatures(qf, esriSelectionResultEnum.esriSelectionResultNew, false); } 在SelectFeatures调用中,我在ESRI.ArcGIS.Carto中得到一个COM错误80004005(E_Fail),没有太多解释。 可能我做错了。 也许有人有一个示例如何选择图层中的对象?

如何远程重启服务?

我可以从.net项目远程启动或停止服务。 ConnectionOptions options = new ConnectionOptions(); options.Username = @”192.168.36.22\test”; options.Password = “test”; ManagementScope scope = new ManagementScope(@”\\192.168.36.22\root\cimv2″, options); scope.Connect(); ManagementOperationObserver Stop = new ManagementOperationObserver(); Stop.Completed += new CompletedEventHandler(Stop_CallBack); try { string NameServices = “ArcGIS Server”; WqlObjectQuery query = new WqlObjectQuery(“SELECT * FROM Win32_Service WHERE Name=\”” + NameServices + “\””); ManagementObjectSearcher find = new ManagementObjectSearcher(scope, query); […]

实现用于检测自相交多边形的powershell算法

我最初实现了Hoey-Shamos算法,但是它太复杂了以至于未来的可维护性(我没有说明),并且没有正确报告,所以我将使用优化的powershell算法。 我的问题是:如何优化此代码才能使用? 就目前而言,我的代码包含一个嵌套的for循环,两次迭代相同的列表。 编辑:将线条转换为HashSet并使用两个foreach循环…扫描10,000个约45秒。 这还不够。 foreach (Line2D g in lines) { foreach (Line2D h in lines) { if (g.intersectsLine(h)) { return false; } } } // end ‘lines’ for each loop 如果我强制我的“intersectsLine()”方法返回false(出于测试目的),扫描10,000条记录仍然需要8秒(我有700,000条记录)。 这太长了,所以我需要优化这段代码。 在尝试将其与所有其他行进行比较后,我尝试从列表中删除行,但是存在准确性问题(不知道为什么)并且速度增加几乎不可察觉。 这是我的intersectsLine方法。 我在这里找到了另一种方法,但看起来所有的方法调用和诸如此类的东西都会变慢。 计算斜率对我来说似乎并不像是需要太多的计算(如果我错了,请纠正我?) public bool intersectsLine(Line2D comparedLine) { //tweakLine(comparedLine); if (this.Equals(comparedLine) || P2.Equals(comparedLine.P1) || P1.Equals(comparedLine.P2)) { return false; } double firstLineSlopeX, […]

BackgroundWorker OnWorkCompleted抛出跨线程exception

我有一个简单的UserControl用于数据库分页,它使用控制器来执行实际的DAL调用。 我使用BackgroundWorker来执行繁重的工作,并在OnWorkCompleted事件上重新启用一些按钮,更改TextBox.Text属性并为父窗体引发事件。 表单A保存我的UserControl。 当我点击打开表单B的某个按钮时,即使我没有做任何“那里”并且只是关闭它,并尝试从我的数据库引入下一页, OnWorkCompleted会在工作线程上调用(而不是我的主线程),并抛出一个跨线程exception。 目前我在那里的处理程序中添加了对InvokeRequired的检查,但是不是要在主线程上调用OnWorkCompleted的全部内容吗? 为什么不按预期工作? 编辑: 我设法将问题缩小到arcgis和BackgroundWorker 。 我有以下解决方案,它向arcmap添加一个命令,打开一个带有两个按钮的简单Form1 。 第一个按钮运行一个hibernate500毫秒的BackgroundWorker并更新计数器。 在RunWorkerCompleted方法中,它检查InvokeRequired ,并更新标题以显示方法最初在主线程或工作线程内运行。 第二个按钮只打开Form2 ,它什么都不包含。 首先,所有对RunWorkerCompletedare的调用都是在主线程内完成的(正如预期的那样 – 这就是RunWorkerComplete方法的最后一点,至少我从BackgroundWorker上的MSDN中了解到的) 打开和关闭Form2 ,始终在工作线程上调用RunWorkerCompleted 。 我想补充一点,我可以将此解决方案保留原样(在RunWorkerCompleted方法中检查InvokeRequired ),但我想了解为什么它会违背我的期望。 在我的“真实”代码中,我想知道在主线程上调用RunWorkerCompleted方法。 我设法在form.Show(); 我的BackgroundTesterBtn命令 – 如果我使用ShowDialog() ,我没有问题( RunWorkerCompleted总是在主线程上运行)。 我需要在我的ArcMap项目中使用Show() ,这样用户就不会绑定到表单了。 我还尝试在正常的WinForms项目上重现该错误。 我添加了一个简单的项目,只打开没有ArcMap的第一个表单,但在这种情况下我无法重现该错误 – RunWorkerCompleted在主线程上运行,无论我在打开Form2之前和之后使用Show()或ShowDialog() 。 我尝试在Form1之前添加第三个表单作为主表单,但它没有改变结果。 这是我的简单sln(VS2005sp1) – 它需要 ESRI.ArcGIS.ADF(9.2.4.1420) ESRI.ArcGIS.ArcMapUI(9.2.3.1380) ESRI.ArcGIS.SystemUI(9.2.3.1380)

用C#实现Hoey Shamos算法

好的,我现在从我当前的算法中获取正确的信息! 但是,要检查700,000个多边形,这太慢了! 上一期是固定的(My Line2D intersectsWith方法不正确) 现在这是确定我的瓶颈的问题! 该算法假设为O(nlog-n),因此它应该更快。 我的intersectsWith方法看起来不能更快,但我会发布它的代码,万一我错了 编辑:添加了IComparable接口 我读取线段交叉点的方法。 为了便于阅读,省略了一些代码。 public class Line2D : IComparable { public Line2D(XYPoints p1, XYPoints p2) { } public bool intersectsLine(Line2D comparedLine) { if ((X2 == comparedLine.X1) && (Y2 == comparedLine.Y1)) return false; if ((X1 == comparedLine.X2) && (Y1 == comparedLine.Y2)) return false; if (X2 == comparedLine.X1 && Y2 […]