Помогите усовершенствовать TOC-control Silverlight

0 голосов
спросил 22 Ноя, 10 от Mitrich (13,680 баллов) в категории Программные продукты Esri
Гуру программирования, посмотрите пожалуйста, кто может помочь с Сильверлайтом.
есть вот такой контрол для TOC + легенда

подробнее и скачать на сайте разработчика


он дает возможность не перешедшим на десятку+sp1, создавать список слоев с подслоями, даже если ваш сервер 9.3.1 не выставлен наружу
однако оказалось, контрол не поддерживает тайловые слои OSM VE  и им подобные.
как бы для всех неподдерживаемых типов слоев создать минимальный функционал: добавление в список, поддержка имени слоя, смена видимости при выборе чекбокса и прозрачности  слайдером.

источником данных для списка слоев в ТОС служит набор сервисов. Вот бы создать dummy-service, чтобы можно было слой добавить в TOC


я пробовал, но у меня не получилось Cry
технические подробности, если заинтересовались:
попробовал руками создать пустой сервис для неподдерживаемого типа слоя,
в ТОС.cs
процедура
private void legend_LoadCompleted(object sender, EventArgs e)
        {
            MapService service = (MapService)sender;
            addHandlers((TreeViewItem)tocTree.ItemContainerGenerator.ContainerFromItem(service));

передает в процедуру addHandlers - null. Что нужно передать в ContainerFromItem, дабы заработало?

       private void addHandlers(TreeViewItem tvitem)
        {
            if (tvitem == null) return;

соответсвенно нет tvitem , нет к нему привязанных событий.

думаю, не только я скажу большое спасибо
(кстати, легенда в 2.1rc тоже не поддерживает OSM. и

The legend supports the following layer types: ArcGISDynamicMapServiceLayer, ArcGISTiledMapServiceLayer, FeatureLayer. If the layer is an ArcGISDynamicMapServiceLayer or ArcGISTiledMapServiceLayer created using ArcGIS Server 10.0 SP1 or higher the legend is generated using the REST Map Service legend resource.

http://mapservice-url/legend

If the layers are version 10 or lower the legend is created using the ArcGIS.com legend service. In order to use the ArcGIS.com legend service your map service needs to be publicly accessible and your application must be able to access ArcGIS.com.)




29 Ответы

0 голосов
ответил 17 Дек, 10 от Holger (19,360 баллов)
Счас попробую выложить.
Кстати, пока не нашёл, а Feature Layer можно в TOC засунуть? Или надо делать его прозрачным, а в TOC стандартно Dynamic ?
0 голосов
ответил 17 Дек, 10 от TDenis (42,620 баллов)
Кстати, пока не нашёл, а Feature Layer можно в TOC засунуть?

Да, если используете допиленный вариант ToC.
Или надо делать его прозрачным, а в TOC стандартно Dynamic ?

Не понял, что Вы имеете в виду.
0 голосов
ответил 17 Дек, 10 от Holger (19,360 баллов)
Допиленный - это какой?
Ну, в принципе может можно сделать невидимым feature layer и этот же слой подключить через ArcGIS Dynamic. Тогда селект будет работать на слое и виден в TOC. Нечто похожее работало в ArcIMS.
0 голосов
ответил 17 Дек, 10 от TDenis (42,620 баллов)
Допиленный - это какой?

Тот, который мы тут обсуждаем. На который Mitrich ссылку дал на прошлой странице.
Там feature layer не отображается разве?

Ну, в принципе может можно сделать невидимым feature layer и этот же слой подключить через ArcGIS Dynamic. Тогда селект будет работать на слое и виден в TOC. Нечто похожее работало в ArcIMS.

Можно и так. Тогда и легенда будет отображаться.
0 голосов
ответил 23 Дек, 10 от Holger (19,360 баллов)
я тут выложил сборку кажется в 2.1rc. если ее перекомпилировать (заменив ссылки на 2.1) та же ошибка? а из вышеприведенного я ничего не понимаю :(
кстати, в xaml  при включенной легенде студия не показывает дизайн страницы. но вроде работает

Да, ошибка таже, спасаюсь комментированием строки с "navigator" во время редактирования кода, компил норм.
0 голосов
ответил 23 Дек, 10 от Holger (19,360 баллов)
Да, кстати, откомпилировал допиленный пример - кроме Tiled и DynamicMapServiceLayer  ничего не увидел, хотя в ХAML описан
<esri:OpenStreetMapLayer ID="OpenStreetMap Mapnik" ....
Что-то ещё там надо подправлять, а то опыта у меня ещё мало?
0 голосов
ответил 23 Дек, 10 от TDenis (42,620 баллов)
Хольгер,
Есть ли в проекте reference на System.Windows.Controls.Data.Input?
0 голосов
ответил 23 Дек, 10 от TDenis (42,620 баллов)
Что-то ещё там надо подправлять

Вот это:

<vtforester:TOC LayersIDs=... />
0 голосов
ответил 23 Дек, 10 от Mitrich (13,680 баллов)
Хольгер,
посмотрел, вспомнил :) и разобрался..
дело в том, что слои ESRi в другой СК, нежели OSM, а тайловые слои показываются только те, что соответствуют СК карты, которая в свою очередь определяется первым описанным в ней слоем (в доме , который построил Джек...)
так что, закомментить ESRI-шный слои, раскомментировать OSM и добавить OSM в легенду

0 голосов
ответил 27 Дек, 10 от Holger (19,360 баллов)
Спасибо, счас попробую. Кстати проект с Вашими переделками  тоже начал у меня вываливаться на конструкторе. Не сразу, только пути к сервисам поменял, а в начале все нормально было. Может с системой что не так? Пользуюсь Express 2010/
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...