Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2013-02-15

GraphicsLayer attribute table

Сегодня я восполню пробелы в документации к 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

2 комментария:

  1. Добрый день, есть опыт по работе в графическим слоем GraphicsLayer
    Я добавляю графику на этот слой, подсказка, символы все дела, а как сделать, что бы каждый полигональный объект был подписан... например: графический объект граница города Астана, и по центру был надпись Астана ( не подсказка)

    ОтветитьУдалить
    Ответы
    1. Посмотрите на это https://developers.arcgis.com/silverlight/api-reference/#ESRI.ArcGIS.Client~ESRI.ArcGIS.Client.Symbols.TextSymbol.html
      Суть в том, что надписи надо делать ручками, определив где они будут расположены (точка вставки) и параметры типа шрифт, размер, цвет и пр. Другого способа вывести лабель на экран я не знаю. Хотя нет, знаю. Но он еще хуже.
      А вообще, сильверлайт мертв, используйте Javascript API, мой вам совет.

      Удалить

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)