标签: arcgis

BackgroundWorker OnWorkCompleted抛出跨线程异常

我有一个简单的UserControl用于数据库分页,它使用控制器来执行实际的DAL调用.我使用a BackgroundWorker来执行繁重的工作,并在OnWorkCompleted事件中重新启用一些按钮,更改TextBox.Text属性并为父表单引发事件.

表单A保存我的UserControl.当我点击打开表单B的某个按钮时,即使我没有做任何"那里"并且只是关闭它,并尝试从我的数据库中引入下一页,OnWorkCompleted在工作线程上调用它(而不是我的主线程),并抛出一个跨线程异常.

目前我InvokeRequired在那里的处理程序中添加了一个检查,但是不是OnWorkCompleted要在主线程上调用的全部内容?为什么不按预期工作?

编辑:

我已经设法将问题缩小到arcgis和BackgroundWorker.我有以下解决方案,它添加了一个命令到arcmap,打开一个简单Form1的两个按钮.

第一个按钮运行BackgroundWorker睡眠500毫秒并更新计数器.在该RunWorkerCompleted方法中,它检查InvokeRequired并更新标题,以显示该方法最初在主线程或工作线程内运行.第二个按钮刚打开Form2,不包含任何内容.

首先,所有调用RunWorkerCompletedare都在主线程内完成(正如预期的那样 - 这就是RunWorkerComplete方法的最后一点,至少我从MSDN上了解到的BackgroundWorker)

打开和关闭后Form2,RunWorkerCompleted始终在工作线程上调用.我想补充一点,我可以将此解决方案保留原样(InvokeRequiredRunWorkerCompleted方法中检查),但我想了解为什么它会违背我的期望.在我的"真实"代码中,我想知道该RunWorkerCompleted方法是在主线程上调用的.

我设法form.Show();在我的命令中指出问题BackgroundTesterBtn- 如果我使用ShowDialog(),我没有问题(RunWorkerCompleted总是在主线程上运行).我需要Show()在我的ArcMap项目中使用,以便用户不会绑定到表单.

我还尝试在正常的WinForms项目上重现该错误.我添加了一个简单的项目,只打开没有ArcMap的第一个表单,但在这种情况下我无法重现错误 - RunWorkerCompleted主线程上的运行,无论是我使用的Show()还是ShowDialog()在打开之前和之后Form2.我尝试在我之前添加第三个表单作为主要表单Form1,但它没有改变结果.

是我的简单sln(VS2005sp1) - 它需要

ESRI.ArcGIS.ADF(9.2.4.1420)

ESRI.ArcGIS.ArcMapUI(9.2.3.1380) …

c# multithreading arcgis backgroundworker winforms

3
推荐指数
1
解决办法
1万
查看次数

GIS:何时以及为何使用ArcObjects而不是GDAL编程来使用ArcGIS栅格和向量?

我刚刚开始使用GDAL + python来支持使用ArcGIS python地理处理脚本无法完成的操作.主要是我正在进行栅格和矢量数据的空间建模/分析/编辑.

当需要ArcObject开发而不是GDAL可以使用时,我有点困惑?是否有GDAL不具备的ArcObjects功能?反之亦然吗?我假设ArcObjects在开发在线工具与桌面分析和建模方面更有用,其中差异更多地与偏好有关?在我的情况下,我更喜欢GDAL,因为python支持,我相信ArcObjects缺乏.

谢谢!

python gis arcgis gdal

3
推荐指数
1
解决办法
3172
查看次数

栅格转换为ASCII - 在Python中添加处理多个文件的代码段

我在python中编写了一段代码,将光栅文件转换为ascii.现在,我需要让它处理文件夹中的所有文件.另外,最后保存ascii文件,其名称与添加后缀的原始文件相同.我是python中的新手,我保证我做了功课,我不能让我自己完成批处理工作.任何帮助将非常感谢!!

import arcpy
from arcpy import env
env.workspace = "C:/Data"
inRaster = ("test.img")
outASCII = "c:/output/test3.asc"
arcpy.RasterToASCII_conversion(inRaster, outASCII)
Run Code Online (Sandbox Code Playgroud)

python ascii raster batch-file arcgis

3
推荐指数
1
解决办法
2488
查看次数

Python - 从文件夹中读取所有文件(.shp,.dbf,.mxd等)

谁能帮我?我正在尝试编写一个代码来读取数据文件夹中的所有文件.这些文件都有不同的扩展名:.shp,.dbf,.sbx,.mxd)我正在使用Windows.谢谢.

我有:

import os    
path=r'C:\abc\def\ghi\'    
folderList = os.listdir(path)
Run Code Online (Sandbox Code Playgroud)

现在我需要读取文件夹中的所有文件,所以我知道我需要类似的东西

f.open(path)

python arcgis

3
推荐指数
1
解决办法
2万
查看次数

ArcGis javascript api,需要更改Graphics层的Wkid

我正在使用arcgis javascript apis 3.5,我的代码是

 function init() {           
        map = new esri.Map("mapDiv", {
            basemap: "streets",
            center: [-112.07102547942392, 46.75909704205151],
            zoom: 12,
            slider: false               
        });           


        var featureLayer = new esri.layers.FeatureLayer("http://abc/arcgis/rest/services/MTARNG/MapServer/0", {
            mode: esri.layers.FeatureLayer.MODE_SNAPSHOT,               
            outFields: ["*"]
        });
Run Code Online (Sandbox Code Playgroud)

而在这一层搜索我正在使用findtask.代码在这里

  findTask = new esri.tasks.FindTask("http://abc/arcgis/rest/services/MTARNG/MapServer");
        findParams = new esri.tasks.FindParameters();
        findParams.returnGeometry = true;
        findParams.layerIds = [0];
        findParams.searchFields = ["LOCATION", "PROJECT_PARCEL_NAME"];           
        findParams.searchText = "north portion";
        findTask.execute(findParams, showResults);
 function showResults(results) {

        var markerSymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 1), new dojo.Color([0, 255, 0, 0.25])); 
        map.graphics.clear(); …
Run Code Online (Sandbox Code Playgroud)

javascript arcgis arcgis-js-api

3
推荐指数
1
解决办法
2354
查看次数

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

我最初实现了Hoey-Shamos算法,但它对于将来的可维护性来说太复杂了(我在这里没有说法),并且没有正确报告,因此我将使用优化的强力算法.

我的问题是:如何优化此代码才能使用?

就目前而言,我的代码包含一个嵌套的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
Run Code Online (Sandbox Code Playgroud)

如果我强制我的"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, firstLineSlopeY, secondLineSlopeX, secondLineSlopeY;

firstLineSlopeX = X2 - X1;
firstLineSlopeY = Y2 - Y1;

secondLineSlopeX = comparedLine.X2 - comparedLine.X1;
secondLineSlopeY = comparedLine.Y2 - comparedLine.Y1;

double s, …
Run Code Online (Sandbox Code Playgroud)

c# algorithm arcgis shapefile polygons

3
推荐指数
1
解决办法
2678
查看次数

dojo解析器和使用ArcGIS JS API的TypeError

我收到这个错误:

TypeError:'undefined'不是函数(评估'parser.parse()')

这是我的代码.

<script> 
    require([
      "esri/map", 
      "esri/layers/FeatureLayer", 
      "esri/dijit/Legend",
      "esri/digit/HomeButton",
      "dojo/_base/array", 
      "dojo/parser",
      "dijit/layout/BorderContainer", 
      "dijit/layout/ContentPane", 
      "dijit/layout/AccordionContainer", 
      "dojo/domReady!"
], function(
  Map, FeatureLayer, Legend, arrayUtils, parser, HomeButton
) {
    parser.parse();

    var map = new Map("map", {
        basemap: "streets",
        center: [-87.702733, 41.998508],
        zoom: 15
    });

    var home = new HomeButton ({
        map: map
    }, "HomeButton");
    home.startup();

  var circuits = new FeatureLayer("http://54.243.188.50:6080/arcgis/rest/services/TYLIN/Streetlights_Pilot/MapServer/6", {
    mode: FeatureLayer.MODE_ONDEMAND,
    outFields:["*"]
  });

  var power = new FeatureLayer("http://54.243.188.50:6080/arcgis/rest/services/TYLIN/Streetlights_Pilot/MapServer/2", {
    mode: FeatureLayer.MODE_ONDEMAND,
    outFields:["*"]
  });


  //add the legend
  map.on("layers-add-result", function (evt) {
    var layerInfo …
Run Code Online (Sandbox Code Playgroud)

javascript dojo parsing arcgis

3
推荐指数
1
解决办法
4153
查看次数

为什么HTTP图像不出现在HTTPS应用程序中?

我已经安全(HTTPS)使用不安全(HTTP)ArcGIS地图服务的ASP.Net MVC 4应用程序.使用JavaScript调用这些服务以获取相关的地图图像.

如果我为我的应用程序使用HTTP,一切都按预期工作.但是,如果我使用HTTPS,IE10和Chrome不显示请求的地图图像(IE提示显示不安全的内容),但Safari显示图像,没有问题.

作为一个例子,说我的应用是HTTPS://app.mydomain.com和我的地图服务是在HTTP://gis.mydomain.com

我运行fiddler并看到响应类似(删除了一些参数以简化):http://gis.mydomain.com/arcgis/rest/services/Energy/BaseService/MapServer/export?....&f = image但图像未显示.如果我将此URL直接输入我的地址栏,则会显示预期的图像.

任何地方都没有报告错误,包括IIS 7.5日志.我意识到混合内容并不理想,但目前我没有选择.关于这类问题,我发现了很多关于SilverLight的引用,但我只使用了javascript和ASP.Net.我还比较了https和http的页面源 - 没有区别.

javascript asp.net https image arcgis

3
推荐指数
1
解决办法
2208
查看次数

使用 docx 模块使用 Python 检查 .docx 形式的复选框

我正在尝试使用 Python 2.7 的 docx 模块填写 Word 文档表单。我可以很好地修改文本元素,但我很难弄清楚如何选中是或否复选框。

我如何去检查表单中的复选框。我尝试了几种不同的方法,但我认为这一切都是因为我不知道在复选框方面 docx xml 是如何构建的。

我可以使用 Bookmark 属性来查找特定的复选框并如下图所示进行检查吗?

在此处输入图片说明

我已在此处将测试表格的副本上传到 Google Drive 。

python arcgis python-2.7 python-docx

3
推荐指数
1
解决办法
4280
查看次数

如何触发Graphic的点击事件?

我使用的是 Esri Javascript API 4.5

当地图加载时,我从外部源获取点坐标,然后使用Graphic类将其绘制在地图上并PopupTemplate为该图形分配一个。

案子

图形已成功绘制在地图上。但是为了查看弹出模板,我需要单击图形。

问题

有没有办法在将图形添加到地图时触发图形的单击事件,以便自动显示弹出模板?

编码

require([    
"esri/PopupTemplate",     
"esri/Graphic",
.
.
.
.
"dojo/domReady!"
],
function (
    PopupTemplate, Graphic, ....) {

var point = {
    type: "point",
    x: <some x>,
    y: <some y>
 };    

var symbol = {
   type: "picture-marker",
   url: "/euf/assets/nl/images/red-pin.png",
   width: "30px",
   height: "30px"
};

var template = new PopupTemplate({
    title: "New Title",
    content: "New Content"
});

var graphic = new Graphic({
    geometry: point,
    symbol: symbol,
    popupTemplate: template
}); …
Run Code Online (Sandbox Code Playgroud)

javascript esri arcgis arcgis-js-api

3
推荐指数
1
解决办法
2098
查看次数