Сейчас я вам открою
тайну: в ArcGis
Viewer for Silverlight есть глупая бага. При
выводе табличных данных в grid
нельзя допускать пустых значений
в первой колонке.
Сколько я времени убил
на эту багу — ужас. В эталонном примере
окно фильтра данных работает — показывает
атрибутивные данные слоя, а для слоя из
Mapfeatureserver
окно фильтра крутит песочные часы
вместо вывода таблички. Чего я только
не перепробовал, какие только гипотезы
не проверял, все бестолку. А оказалось
— примитив, если в первой колонке данных
попадаются значения «null»,
то табличка не выводится. В эталонных
примерах первой колонкой всегда идет
OBJECTID, который по определению
не может быть пустым. Поэтому проблема
вывода атрибутики в табличку никогда
не проявляется.
В Mapfeatureserver
я использую словари Python
из которых генерируется текст JSON.
Использование словарей означает
произвольный порядок вывода ключей,
если не применять сортировку. Казалось
бы, порядок следования ключей в словаре
не имеет значения. Во всяком случае, в
спецификации
это никак не оговорено. Ан нет. значение
есть и весомое.
Короче, от сортировки
ключей пришлось отказаться, а для обьекта
attributes я теперь использую
collections.OrderedDict.
Это позволяет выводить ключи в JSON
в том порядке, в каком они добавлялись
в словарь. Что позволяет управлять
очередностью полей в выдаче путем
формирования запроса SQL, где
поля перечислены в нужном порядке.
Пример:
attributes = collections.OrderedDict() geometry = {} for colnum, col in columns(cur.description): fldname = unicode(col.name).lower() if fldname == u'shape': # geometry shape = simplejson.loads(rec[colnum]) geometryType, geometry = esri.geoJson2agJson(shape) continue if fldname == lyrinfo.geomfield: continue if fldname not in lyrinfo.fields: # unknown field ufields[fldname] = '' continue attributes[lyrinfo.fields[fldname]['name']] = rec[colnum] |
Неправильно:
"features": [ { "attributes": { "descr": null, "gid": 1, "ptchlenght": 3, "pthcdeptht": 5, "regdaterec": "2012.07.23", "regdaterep": null, "roadcarpet": "Асфальт", "testtimestamp": null }, "geometry": { "x": 36.49966537, "y": 52.88048986900003 } }, |
Правильно:
"features": [ { "attributes": { "gid": 1, "descr": null, "ptchlenght": 3, "pthcdeptht": 5, "regdaterec": "2012.07.23", "regdaterep": null, "roadcarpet": "Асфальт", "testtimestamp": null }, "geometry": { "x": 36.49966537, "y": 52.88048986900003 } }, |
Комментариев нет:
Отправить комментарий