Измерение Z полосы на GeoDjango (геометрия Force 2D)

В моем проекте мне нужно импортировать некоторую геометрию из shapefiles.

Некоторые из них относятся к типу MULTIPOLYGON Z, но все координаты Z имеют значение 0.

Когда я пытаюсь сохранить геометрию, я получаю сообщение об ошибке:

«Геометрия имеет размерность Z, а столбец — нет»

Каков наилучший способ снять измерение Z?

Мой код:

ds = DataSource(file_path, encoding='ISO-8859-1')
layers = ds[0]

#need something HERE to coerce geometry to 2D

obj=MyModel(geometry=GEOSGeometry(layers[0].geom.hex))
obj.save()

person Jônatas Castro    schedule 07.03.2016    source источник


Ответы (2)


Спасибо за ответ, Майк Т.

Дело в том, что мне нужно сделать это с помощью GeoDjango framework , без прямого доступа к базе данных Postgis.

Собственно, после тяжелой работы я нашел решение. Мне нужно использовать метод .clone() из OGRGeometry объект. Теперь я могу изменить свойство coord_dim. Если я изменю coord_dim в исходном объекте, ничего не произойдет.

Вот мой код:

ds = DataSource(file_path, encoding='ISO-8859-1')
layers = ds[0]

#HERE IS THE TRICK
new_layer = layers[0].geom.clone() 
new_layer.coord_dim = 2

obj=MyModel(geometry=GEOSGeometry(layers[0].geom.hex))
obj.save()
person Jônatas Castro    schedule 08.03.2016

Если у вас есть доступ к SQL, вы можете получить его с помощью ST_Force2D (или ST_Force_2D для более старых версий).

Вы также можете исправить исходную таблицу, изменив тип, например:

ALTER TABLE my_table
  ALTER COLUMN geom TYPE geometry(MultiPolygon,4326) USING ST_Force2D(geom);
person Mike T    schedule 07.03.2016