Сейчас я вам открою
тайну: в 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
}
},
|

Комментариев нет:
Отправить комментарий