Более

Передаете полигон в сервис геообработки?

Передаете полигон в сервис геообработки?


У нас есть служба геообработки, которая уже 6 месяцев находится в подвешенном состоянии. Наконец, после отличного решения об устранении одного элемента службы, мы заставили его работать на этой неделе. Теперь я нахожусь в точке, где я могу «убить» вызов службы, просто передавая полигоны, как лампочка, которая включается и выключается. Кажется, теперь мы сосредоточились на том, как я передаю многоугольник сервису. Я смотрел на него, пока не посинел и не увидел в нем ничего плохого. Симптомы следующие:

Служба сервера принимает вызов. Он отлично получает объемные данные. Серверная служба находит класс для вызова и создает экземпляр. Вызывается информация о параметрах, и он начинает обрабатывать параметры для вызова Execute. Он возвращает Fail.

Я понял все это, переведя логирование сервера в режим отладки. Итак, теперь бомбардировка кода. Он берет исходную точку, цели и блокировки (многоугольники) и подготавливает их к вызову службы.

Начало точки = (Точка) GeometryOperations.Project (Point.CreateFromLatitudeLongitude (Convert.ToDouble (SelectedStation ["lat"]), Convert.ToDouble (SelectedStation ["long"])), ESRI.ArcGISExplorer.Geometry.CoordinateSystem.Projecteds.Coordinates.Coordinate .WGS1984WebMercatorAmentarySphere); Список target = selected.Select (location => (Point) GeometryOperations.Project (Point.CreateFromLatitudeLongitude (location.Latitude, location.Longitude), ESRI.ArcGISExplorer.Geometry.CoordinateSystem.ProjectedCoordinateSystems.World.WGS1984WebMercator). BlockagesAndDelays bandd = Functions.GetBlockagesAndDelays (); Список blockages = новый список(); foreach (элемент многоугольника в bandd.Blockages) {blockages.Add ((Polygon) GeometryOperations.Project (item, ESRI.ArcGISExplorer.Geometry.CoordinateSystem.ProjectedCoordinateSystems.World.WGS1984WebMercatorA AdditionalSphere)); } helper.UpdateMessage («Служба вызова»); double [] results = Geoprocessing.GetLaunchPointDistanceToTargets (помощник, источник, targets.ToArray (), blockages.ToArray ());

Вызываемый метод теперь преобразует необработанные данные в формат для отправки на сервер и выполняет вызов. Здесь я могу как-то облажаться.

используя (CalculateDistances_GPServer service = new CalculateDistances_GPServer ()) {try {List results = новый список(); progressDialog.UpdateMessage («Установка параметров»); service.Url = Functions.GetGPServiceEndpoint ("CalculateDistances"); CalculateDistances.GPToolInfo toolinfo = service.GetToolInfo ("Рассчитать расстояния"); CalculateDistances.GPParameterInfo [] parameters = toolinfo.ParameterInfo; CalculateDistances.GPFeatureRecordSetLayer firstParameterLayer = (CalculateDistances.GPFeatureRecordSetLayer) parameters [0] .Value; CalculateDistances.GPFeatureRecordSetLayer secondParameterLayer = (CalculateDistances.GPFeatureRecordSetLayer) параметры [1] .Value; CalculateDistances.GPFeatureRecordSetLayer thirdParameterLayer = (CalculateDistances.GPFeatureRecordSetLayer) параметры [2] .Value; CalculateDistances.PointN newPoint = SoapConverter.GeometryToSoap(точка запуска); CalculateDistances.Record [] firstParameter = новый CalculateDistances.Record [1]; объект [] recordValues ​​= новый объект [2]; recordValues ​​[0] = 1; // OBJECTID recordValues ​​[1] = newPoint; // ФОРМА firstParameter [0] = new CalculateDistances.Record {Values ​​= recordValues}; firstParameterLayer.RecordSet.Records = firstParameter; CalculateDistances.Record [] secondParameter = новый CalculateDistances.Record [targets.Length]; for (int index = 0; index (цели [индекс]); recordValues ​​= новый объект [2]; recordValues ​​[0] = индекс + 1; // OBJECTID recordValues ​​[1] = targetPoint; // ФОРМА secondParameter [индекс] = новый CalculateDistances.Record {Values ​​= recordValues}; } secondParameterLayer.RecordSet.Records = secondParameter; CalculateDistances.Record [] thirdParameter = новый CalculateDistances.Record [blockages.Length]; for (int index = 0; index (завалы [индекс]); recordValues ​​[0] = индекс + 1; // OBJECTID recordValues ​​[1] = blockageArea; // ФОРМА thirdParameter [index] = new CalculateDistances.Record {Values ​​= recordValues}; } thirdParameterLayer.RecordSet.Records = thirdParameter; CalculateDistances.GPValue [] values ​​= {firstParameterLayer, secondParameterLayer, thirdParameterLayer}; progressDialog.UpdateMessage («Служба звонков»); строка jobId = service.SubmitJob (toolinfo.Name, values, null, null); CalculateDistances.esriJobStatus jobStatus = service.GetJobStatus (jobId);

Кто-нибудь может увидеть, что не так?


Параметр для передачи многоугольника требует заполнения двух других полей ESRI в списке параметров. Если поля отсутствуют (даже если они не имеют значимого значения), тогда служба ESRI вернет результат FAIL без каких-либо журналов или исключений.

for (int fieldIndex = 0; fieldIndex 

Смотреть видео: How to Select Features by Attributes in ArcMap Tutorial