Блог

Натуральная сортировка

Бывают ситуации, когда из базы данных необходимо вывести в выпадающем списке номера домов, причем отсортировать их по возрастанию. Номер дома может содержать не только цифры, но и другие символы, например, 10а или 11/1. А значит это уже не числовой тип, а текстовый. Соответственно и сортировка в SQL-запросе по этому полю будет происходить не как числа, а как текста. Таким образом, вывод значений из базы данных будет выглядеть следующим образом:

1
2
3
4
5
6
7
8
1
11
12а
13б
20а
21/1
22
30

и так далее…

Как видите, это не тот результат, который мы бы хотели видеть. Так как же сделать, чтобы номера домов в списке были отсортированы не посимвольно? После долгих поисков в рунете, чтения мануалов и собственных исследований, были найдены решения для SQLite и Firebird 2.5 и выше.

SQLite

1
SELECT NUMBER FROM addresses ORDER BY NUMBER+0

Firebird

1
2
CREATE collation ns_coll FOR utf8 FROM unicode CASE insensitive 'NUMERIC-SORT=1';
ALTER TABLE addresses ADD NUMBER VARCHAR(100) CHARACTER SET utf8 COLLATE ns_coll;

Надеюсь для кого-то данная статья будет полезной и он сэкономит время

Работа с 2ГИС через реестр

В данной статье будут описаны инструменты работы с 2ГИС через реестр.

Видимость слоев. Начнем с видимости слоев. Бывает необходимость сделать некоторые свои слои, а иногда и чужие, видимыми или не видимыми. К сожалению, с помощью АПИ 2ГИС можно лишь сделать слой невидимым. Хотя в документации есть метод VisibleState, который отвечает за видимость слоя. Об этой проблеме пишут и на форуме.
Решением может являться изменение значений в разделе реестра:

HKEY_CURRENT_USER\Software\DoubleGIS\Grym\Common\LayerVisibility

Раздел содержит список слоев с их тегами. Если необходимо сделать слой видимым нужно изменить значение на “1″ и наоборот – для того, чтобы сделать слой невидимым нужно установить значение “0″. После чего необходимо выполнить метод Invalidate. Таким образом, можно управлять видимостью всех слоев, реализованных во всех плагинах, в т.ч. и в плагине “Дополнительные слои”.

Баг с XMLInfo в API 2ГИС

Интересный мини баг обнаружился при создании модуля 2гис. Если в информации о модуле (в методе IGrymPluginInfo.Get_XMLInfo) указать XML данного вида:

1
2
3
4
5
6
7
8
9
10
11
<grym_plugin_info>
  <name>Test Plugin</name>
  <description></description>
  <copyright></copyright>
  <tag>TestPlugin</tag>
  <requirements>
  </requirements>
  <supported_languages>
    <language>ru</language>
  </supported_languages>
</grym_plugin_info>

То есть, пропустить строчку указания версии API (<requirement_api>API-1.4</requirement_api>), то 2gis самой свежей версии скажет об ошибке инициализации плагина с сообщением “для использования этого модуля требуется более свежая версия оболочки.”, а не, например, “Не указана версия API” или “Неизвестная версия API”. Что немного может запутать.

Решением этой ошибки является внимательность. При создании модуля проверяйте, правильно ли сформирован XML с информацией, а то придется ждать версии, когда этот мелкий недочет исправят.

——————————————————————————————————————————————————————————————-

Награждение от ООО “ДубльГИС”

В июне 2012 года состоялось знаковое событие для нашей команды разработчиков. Компания ООО “ДубльГИС” наградила меня (Чернявского Александра) дипломом за вклад в развитие АПИ 2ГИС. Нас пригласили в Омский филиал компании ООО “ДубльГИС”, чтобы наградить дипломом, подушкой и пледом с логотипом 2ГИС.


На фото: я с дизайнером, по совместительству с женой )

Знакомство оказалось очень приятным. Для нас провели целую экскурсию по офису компании. С первого взгляда офис показался небольшим, но переходя все в новые и новые комнаты мы поняли, что это только казалось. Мы пообщались по поводу дальнейших целей и планов ООО “ДубльГИС”, рассказали немного о себе. Интервью можно прочитать здесь.

Выражаем благодарность компании ООО “ДубльГИС” за столь теплый прием. Спасибо за подарки и плодотворное общение!