проблема с тулбоксом.мерж

0 голосов
спросил 08 Фев, 11 от sergiy (4,180 баллов) в категории Программные продукты Esri
есть 5000 шейп файлов.
их надо замержить в один.
открываю тулбокс, сначала сделал repairGeometry затем делаю merge получаю следующее сообщение.

Executing: Merge
.... перечисление всех шейпов участвующих в процессе.....

Start Time: Tue Feb 08 12:49:53 2011
Failed to execute. Parameters are not valid.
ERROR 000468: Input shape types are not equal
Failed to execute (Merge).
End Time: Tue Feb 08 12:52:08 2011 (Elapsed Time: 2 minutes 15 seconds)

Не понятно на каком шейпе споткнулся, хотя я уверен что они все полигоны. Не поштучно ж мне их слепливать??

5 Ответы

0 голосов
ответил 08 Фев, 11 от geouser (9,040 баллов)
Можно попробовать посмотреть "историю" геопроцессинговых операций.
Внизу окна АркТулбокс'а есть закладка Results (самая правая), где хранятся результаты геопроцессинговых сессий (кстати выставите чтобы они сохранялись там две недели, день или сколько надо).
Нажмите на день, потом на операцию (название инструмента) и потом подробно разверните все + плюсики. Там обычно красным крестом помечены провальные операции, на уровне "шейпов".
Когда у меня geoprocessing даёт сбой, я туда лезу изучать причину.
Это первое что приходит в голову. Приятно что ArcGIS отслеживает и документирует все операции в геопроцессинге.
(P.S. Мне также кажется, что MXD файл разрастается от хранения этих результатов, поэтому я 2 недели заменил на 1 день либо вообще история стирается при выходе из ArcGIS. Это так, на заметку, если начнут расти MXD файлы).
0 голосов
ответил 09 Фев, 11 от sergiy (4,180 баллов)
Можно попробовать посмотреть "историю" геопроцессинговых операций.
Внизу окна АркТулбокс'а есть закладка Results (самая правая), где хранятся результаты геопроцессинговых сессий (кстати выставите чтобы они сохранялись там две недели, день или сколько надо).
Нажмите на день, потом на операцию (название инструмента) и потом подробно разверните все + плюсики. Там обычно красным крестом помечены провальные операции, на уровне "шейпов".
Когда у меня geoprocessing даёт сбой, я туда лезу изучать причину.
Это первое что приходит в голову. Приятно что ArcGIS отслеживает и документирует все операции в геопроцессинге.
(P.S. Мне также кажется, что MXD файл разрастается от хранения этих результатов, поэтому я 2 недели заменил на 1 день либо вообще история стирается при выходе из ArcGIS. Это так, на заметку, если начнут расти MXD файлы).


до этого я вызывал функцию программно, а тут по вашему совету попробовал замержить через тулбокс. Как оказалось эта ошибка вываливается еще до начала процесса мерж - программе не нравятся входные данные. Соответственно в Results ничего не пишется. А на какой конкретно шейп ругается не говорит.
0 голосов
ответил 09 Фев, 11 от geouser (9,040 баллов)
до этого я вызывал функцию программно, а тут по вашему совету попробовал замержить через тулбокс. Как оказалось эта ошибка вываливается еще до начала процесса мерж - программе не нравятся входные данные. Соответственно в Results ничего не пишется. А на какой конкретно шейп ругается не говорит.


Я тоже вызываю функцию программно, разницы никакой, всё равно результаты сохраняются.
Нужно всё же изучить Results.
Как-то была подобная проблема с одним-двумя дефектными шейпфайлами (они были пусты!, то есть без записей) и слияние не работало.
Тогда я вручную открыл каждый шейп и посмотрел на вшивость.
Теперь разумеется я для этого напишу программу. Smile
0 голосов
ответил 09 Фев, 11 от sergiy (4,180 баллов)
спасибо geouser  за помощь, решил задачку следующим образом, может кому - то поможет:
string DirectoryPath = @"D:\temp";
            object outputs = @"D:\temp1\0000.shp";
            string input = "";
            object sev = 2;
            ArrayList arr = new ArrayList();
            TextWriter tw = new StreamWriter("date.txt");
            string[] fileEntries = Directory.GetFiles(DirectoryPath, "*.shp");
            foreach (string s in fileEntries)
            {
                input = s;
                ESRI.ArcGIS.DataManagementTools.Append myShpMerge = new Append(input, outputs);
                myShpMerge.schema_type = "NO_TEST";
            try
                {
                Geoprocessor GP = new Geoprocessor();
                IGeoProcessorResult result = (IGeoProcessorResult)GP.Execute(myShpMerge, null);
                if (result == null)
                {
                    string sss = GP.GetMessages(ref sev);
                    arr.Add(sss + input);
                }
               
                                    
                }
            catch (Exception ex)
                {
                  MessageBox.Show(ex.ToString());
                }
            }
            for (int i = 0; i < arr.Count; i++)
            {
                tw.WriteLine(arr);
            }      
            tw.Close();
        }

Заранее прошу прощения, что код не вычищен. Я ловлю от резалта все ответы равные нулу. и уже к этой строчке дописываю имя шейпа.
0 голосов
ответил 09 Фев, 11 от geouser (9,040 баллов)
У меня никак не получается программно получить ошибку от Геопроцессора, не знаю как это работает. Но и не сильно парюсь - когда что-то не работает, можно просто залезть и посмотреть Results.

Я имел в виду проверку шейпфайлов на вшивость - например пакетный перебор всех на предмет типа геометрии (точка, линия и т.п.), количества записей (чтобы отбраковать пустые) и ещё много чего можно проверить. То есть выловить наиболее типичные ошибки которые сбивают операцию слияния.

Тем более если шейпов 5000! Стоит что-то автоматизировать типа контроля качества. Не вручную же их перебирать!

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...