2016-03-07 11 views
1

В моем проекте мне нужно импортировать некоторую геометрию из shapefiles.Размер Strip Z на GeoDjango (Force 2D geometry)

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

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

"Geometry has Z dimension but column does not"

Каков наилучший способ лишить измерение 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() 

ответ

0

Если у вас есть доступ к SQL, вы можете получить это с ST_Force2D (or ST_Force_2D for older versions).

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

ALTER TABLE my_table 
    ALTER COLUMN geom TYPE geometry(MultiPolygon,4326) USING ST_Force2D(geom); 
0

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

Дело в том, что мне нужно сделать это с помощью 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()