Сегодня я
восполню пробелы в документации к ArcGIS
Viewer for Silverlight и ArcGIS
API for Silverlight. Я покажу, как правильно
добавить в карту слой GraphicsLayer
и FeatureLayer.
Ключевое слово - «правильно».
В документации
и примерах добавление слоя выглядит
очень просто
var gl = new GraphicsLayer() {
ID = layerID,
Renderer = new SimpleRenderer() {
Symbol = new SimpleMarkerSymbol()
},
RendererTakesPrecedence = false
};
MapApplication.Current.Map.Layers.Add(gl);
MapApplication.SetLayerName(gl, layerName);
var lr = new ESRI.ArcGIS.Client.FeatureLayer() { Url = lyrUrl, ProxyUrl = proxy };
MapApplication.Current.Map.Layers.Add(lr);
MapApplication.SetLayerName(lr, layerName);
И это даже
работает, в том смысле, что картинка на
экране соответствует ожиданиям. Но,
конечно, есть «но». Если слой добавлять
таким образом, куда-то пропадает
атрибутика. Мы открываем атрибутивную
таблицу и наблюдаем пустоту. В настройках
слоя мы не можем сконфигурировать окна
popups. Почему? Потому что в вышеприведенных
примерах нет кода инициализирующего
атрибутику слоя.
Не все
догадываются, но даже примитивный
GraphicsLayer, с пометками нарисованными от
руки, может работать с атрибутивной
таблицей в стиле FeatureLayer.
Чтобы слои
инициализировались как положено, нужна
самая малость — сказать слою про его
атрибутику перед добавлением слоя к
карте. Например так
var symbIFS = new ESRI.ArcGIS.Mapping.Core.Symbols.ImageFillSymbol() {
Source = "/Images/MarkerSymbols/Basic/RedTag.png",
Size = 28,
OriginX = 0.5, OriginY = 1
};
var gl = new GraphicsLayer() {
ID = layerID,
Renderer = new SimpleRenderer() {
Symbol = symbIFS
},
RendererTakesPrecedence = false
};
gl.Graphics = new GraphicCollection(marks);
gl.Initialize();
MapApplication.Current.Map.Layers.Add(gl);
MapApplication.SetLayerName(gl, layerName);
var lr = new ESRI.ArcGIS.Client.FeatureLayer() { Url = lyrUrl, ProxyUrl = proxy };
lr.OutFields.Add("*");
lr.Mode = FeatureLayer.QueryMode.OnDemand;
lr.Initialize();
MapApplication.Current.Map.Layers.Add(lr);
MapApplication.SetLayerName(lr, layerName);
Если сделать
так, все работает как положено. Но в
документации об этом упоминаний нет.
Какая жалость.
С GraphicsLayer есть
только одна сложность — его приходится
добавлять в карту до того как в нем
появится хоть один обьект. Проблема
курицы и яйца, знаете ли. Остается только
пересоздать слой после добавления
первого же обьекта.
original post http://vasnake.blogspot.com/2013/02/graphicslayer-attribute-table.html
original post http://vasnake.blogspot.com/2013/02/graphicslayer-attribute-table.html
Добрый день, есть опыт по работе в графическим слоем GraphicsLayer
ОтветитьУдалитьЯ добавляю графику на этот слой, подсказка, символы все дела, а как сделать, что бы каждый полигональный объект был подписан... например: графический объект граница города Астана, и по центру был надпись Астана ( не подсказка)
Посмотрите на это https://developers.arcgis.com/silverlight/api-reference/#ESRI.ArcGIS.Client~ESRI.ArcGIS.Client.Symbols.TextSymbol.html
УдалитьСуть в том, что надписи надо делать ручками, определив где они будут расположены (точка вставки) и параметры типа шрифт, размер, цвет и пр. Другого способа вывести лабель на экран я не знаю. Хотя нет, знаю. Но он еще хуже.
А вообще, сильверлайт мертв, используйте Javascript API, мой вам совет.