Значения в CFG-файлах Map-сервисов

0 голосов
спросил 13 Янв, 10 от filippov70 (5,320 баллов) в категории Программные продукты Esri
Доброго дня.

Лично меня не устраивает значение MaxRecordCount=500
мне надо 50 000, к примеру.

похожая проблема тут https://forum.esri-cis.ru/index.php?qa=28067


В моем Silverlight приложении выходит ошибка, если изменять это значение более 1000 (на 5000 уже не работет).
В онлайн документации, про лимит на это значение, нигде не написано.

Сообщение выходит в
        private void QueryTask_Failed(object sender, TaskFailedEventArgs args)
        {
            MessageBox.Show("Ошибка запроса: " + args.Error);
        }

Сам запрос:
private void loadList()
        {
            lstUse.Items.Clear();

            QueryTask q = new QueryTask("http://test_svr/ArcGIS/rest/services/zem/MapServer/1");
            q.ExecuteCompleted += QueryTask_ExecuteCompleted;
            q.Failed += QueryTask_Failed;

            Query qry = new Query();
            qry.OutFields.AddRange(new string[] { "NAME_VALUE" });
            qry.Where = "NAME_VALUE IS NOT NULL";
           
            q.ExecuteAsync(qry);// тут должно быть 23 тысячи записей
           
        }

неужто нужно делать что-то вроде
pServerContext.CreateObject("esriGeodatabase.QueryFilter")
как описано тут http://resources.esri.com/help/9.3/ArcGISServer/adf/dotnet/developer/ArcGIS/ArcObjects/limit_queryres_output.htm


ArcGIS Server 9.3 SP1

7 Ответы

0 голосов
ответил 13 Янв, 10 от PITKS1 (20,860 баллов)
1. Надаеюсь поле по которому делается query проиндексировано в базе ?
2. Ошибку выдает мгновенно, или через некоторое время ?
0 голосов
ответил 14 Янв, 10 от filippov70 (5,320 баллов)
1. Это поле присоединенное(join к слою в ArcMap) из совершенно другой БД через линк. Базы ораклевые.
2. Мгновенно. текст не информативный, ESRI.ArcGIS.Client.Task.ServiceException;

Я выгрузил весь этот слой в shape-file. Создал из него отдельный динамический Map-сервис. Работает, но оооочень долго. На мелком масштабе слой пытается очень долго грузиться, я так и не дождался его загрузки. На крупных масштабах отображается.

Собственно задача:
Есть слой в БД с присоединенными полями, кол-во записей ~25 тысяч.
При загрузке карты, я делаю Query к нему на наличие не пустых (NOT NULL) значений по конкретному присоединенному полю.
Затем я хочу выяснить уникальные значения из выборки и загрузить их в ListBox.
Потом, при клике в листбоксе, на конкретном значении надо выбрать все объекты у которых совпадает это значение. К примеру, такая выборка может содержать 15 тысяч объектов.

Это, вообще, возможно реализовать?
 

0 голосов
ответил 14 Янв, 10 от PITKS1 (20,860 баллов)
можно реализовать и есть разные пути как это сделать. join в этом случае - будет самый медленный путь.

Как вариант - можно написать промежуточный движок, к которому приложение будет обращаться раз в 10 (20-30...) сек и получать данные напрямую о непустых полях (движок будет обращаться напрямую к базе, не через ArcGIS Server). Полученные данные можно потом отображать как graphics layer.  Так как все даннЫе уже будут на стороне клиента - отрисовка будет мгновенной. Если данные меняются не очень часто  - читать их с сервера можно и раз в минуту.

Есть пример как сделать то что ты хочешь (почти) на флексе. (с выборкой непустых, построением списка и т.д.)

http://resources.esri.com/arcgisserver/apis/flex/index.cfm?fa=codeGalleryDetails&scriptID=16527

Опять таки - выборка данных сделана через .net прокси.



0 голосов
ответил 14 Янв, 10 от Alexander1 (32,520 баллов)
Если приложение написано на Silverlight, надо создать WCF сервисы и из них получать всё, что нужно.
0 голосов
ответил 15 Янв, 10 от filippov70 (5,320 баллов)
Спасибо камрады!
Что то праздники, наверно, сказываются на мозговой деятельности Clown.

0 голосов
ответил 15 Янв, 10 от TDenis (42,620 баллов)
+1 за WCF, передавать клиенту надо как можно меньше данных.
В режиме GraphicsLayer, насколько я понимаю, много тысяч объектов будут отображаться с тормозами, даже при использовании SimpleSymbol. Поскольку все эти объекты - шейпы, а не геометрия, они поддерживают кучу событий, хиттестинг и т.п.
Может можно как-то заранее предопределить возможные варианты запросов, разбить их по слоям (создавая для них соответствующие определяющие запросы), опубликовать и подключать их динамически?
0 голосов
ответил 15 Янв, 10 от Alexander1 (32,520 баллов)
Для случая с "многими тысячами объектов" возможны варианты:
1.
- Публикуется оптимизированный сервис, который будет быстро отрисовывать многие сотни тысяч обьектов.
- Результат запроса к WCF сервису получается/отображается в таблице страницами
- Графический объект создаётся только для выделенного в таблице объекта (плюс pan/zoom in на объект)

2.
- Используется clastering для всех объектов, попавших в результат выборки.
- Результат запроса к WCF сервису получается/отображается в таблице страницами
- Графический объект создаётся только для выделенного в таблице объекта (плюс pan/zoom in на объект)
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...