Страница 1 из 1

Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 02:33
Vahit ogli
Всем привет. Сразу скажу, что я ламер. Возникла необходимость в сортировке населенных пунктов РФ по численности населения. Я пытаюсь использовать фильтр вида ""POPULATION" > 5000", но в результате фильтруются те населенные пункты, где число населения начинается до 5 (например, 494567). Я заметил, что при сортировке таблицы атрибутов колонка Population принимает вид
erwqwea.jpg
erwqwea.jpg (171.48 КБ) 12159 просмотров
, т.е числа идут не в прямом порядке возрастания(например,1 100 2 21 2154 22). Насколько я понял данная проблема не зависит от ПО, так как она повторялась у меня и в Map 3d, и в QGISе. Не подскажите как мне это исправить?

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 03:38
trir
Какой тип данных столбца?

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 10:56
rhot
Ага, поменяйте тип данных на числовой.

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 11:40
Vahit ogli
Мммм, а как это сделать? :)

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 11:52
Ariki
По логике, конечно, поле должно быть числовым. Но если по каким-либо причинам тип поля поменять неудобно или нежелательно, можно преобразовать на лету прямо в выражении:

Код: Выделить всё

toint("POPULATION") > 5000
Чтобы поменять тип поля, можно добавить новое поле нужного типа и использовать калькулятор полей, чтобы перенести в него значения из старого.

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 12:43
Vahit ogli
К сожалению, мне не удается использовать калькулятор полей в QGISе, так как почему то режим редактирования мне недоступен.
31af.jpg
31af.jpg (529.63 КБ) 12071 просмотр
Я пробовал использовать команды

Код: Выделить всё

ToInt64 (   POPULATION   ) 
в калькуляторе в Map 3d, но он выдает ошибку
"Failed to execute Fdo command.
The data type 'FdoDataType_Int64' is not supported by this provider."
Если я использую фильтр

Код: Выделить всё

ToInt64(POPULATION) > 5000
то результата просто нет. :(

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 13:29
Игорь Белов
Почему слой нередактируемый, неясно. Взятый отсюда редактируется.

Все функции перечислены в меню. Не надо изобретать какое-то ToInt64(), если можно выбрать из списка toint().
capture_20140930_142031.png
capture_20140930_142031.png (25.45 КБ) 12055 просмотров
Имена полей тоже можно выбрать из списка.

Открывая шейп, укажите явно кодировку UTF-8, а то кириллица не читается.
capture_20140930_142125.png
capture_20140930_142125.png (66.43 КБ) 12054 просмотра

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 13:56
trir
Странно, Civil 3D 2015 - работают ToInt64() и ToInt32()

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 14:15
Игорь Белов
trir писал(а):Странно, Civil 3D 2015 - работают ToInt64() и ToInt32()
Кто же спорит? Просто на картинках QGIS.

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 14:15
Игорь Белов
trir писал(а):Странно, Civil 3D 2015 - работают ToInt64() и ToInt32()
Кто же спорит? Просто на картинках QGIS.

Re: Сортировка таблицы атрибутов.

Добавлено: 30 сен 2014, 14:15
Игорь Белов
trir писал(а):Странно, Civil 3D 2015 - работают ToInt64() и ToInt32()
Кто же спорит? Просто на картинках QGIS.

Re: Сортировка таблицы атрибутов.

Добавлено: 01 окт 2014, 00:00
Vahit ogli
Всем спасибо. Наконец все получилось. Использовал калькулятор полей, преобразовал значения. Не все было гладко, так как в таблице значений были числа вида 1.0 или 2.0, которые пришлось вычистить вручную. После все было ОК.

Re: Сортировка таблицы атрибутов.

Добавлено: 01 окт 2014, 06:58
Игорь Белов
Vahit ogli писал(а):в таблице значений были числа вида 1.0 или 2.0, которые пришлось вычистить вручную
Лишняя работа. Просто надо было использовать функцию toreal() вместо toint().

Кроме того, QGIS выполняет неявно преобразования типов, и можно обойтись простым выражением вида

Код: Выделить всё

"POPULATION" >= 5000
Правда, здесь надо держать ухо востро: по запросу могут быть выданы неконвертируемые значения. В моей версии settlement-point в выборке оказались записи с такими значениями POPULATION: "?", "1 147" и восемь штук "К".