gdaltools экспортирует точку geojson как многоточечную

У меня есть код Python, который использует модуль Python gdaltools для преобразования файла geojson в postgis.

ogr = gdaltools.ogr2ogr()
ogr.set_encoding("UTF-8")
print("Setting Input")
ogr.set_input(file_name, srs="EPSG:4326")

gdaltools.Wrapper.BASEPATH = os.environ['GDAL_PATH']

print("Setting Conn")
conn = gdaltools.PgConnectionString(host=os.environ['DB_HOST'],
                                    port=os.environ['DB_PORT'],
                                    dbname=os.environ['DB_NAME'],
                                    user=os.environ['DB_USERNAME'],
                                    password=os.environ['DB_PASSWORD'],
                                    schema=str(self.table_prefix) + "_" + str(code))

print("Setting Output")
ogr.set_output(conn, table_name=table, srs="EPSG:27700")
print("OGR Execute")
ogr.execute()

GeoJSON содержит геометрию точки типа

"geometry": {
    "type": "Point",
    "coordinates": [
        -1.0600739160455448,
        51.53592123798526
    ]
}

Что я вижу при экспорте данных из базы данных, так это то, что они, похоже, преобразуются из типа Point в geojson в тип Multipoint в базе данных.

При загрузке геометрии из одной таблицы в другую без преобразования я получаю следующую ошибку:

Geometry type (MultiPoint) does not match column type (Point)

Любые идеи относительно того, почему ogr2ogr будет использовать Multipoint из точки?


person jpc2000    schedule 08.02.2019    source источник


Ответы (2)


Вы можете использовать параметр -nlt POINT

Это заставляет тип выходных данных иметь тип POINT, а не MULTIPOINT, как вы сейчас получаете.

person JGH    schedule 08.02.2019

Спасибо @JGH за указание на ответ.

На самом деле у модуля есть способ справиться с этим, который не был очевиден. В модуле pygdaltools любая геометрия, которая отправляется в PostgreSQL или Postgis, автоматически устанавливается в MULTIPOINT. Чтобы переопределить это, добавьте следующий фрагмент кода ogr.geom_type = 'POINT'

person jpc2000    schedule 09.02.2019