сохранить пустую строку в Postgis, используя openlayers - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь сохранить «пустую» функцию, используя openlayers (версия> = 3), например:

let defaultFeature =  new ol.Feature({
    geometry: new ol.geom.MultiLineString([]),
});

Как видите, это просто пустая многоканальная строка, ожидающая заполнения строк.

У меня есть таблица базы данных, построенная так:

CREATE TABLE md (
   id SERIAL PRIMARY KEY NOT NULL,
   name varchar(40) NOT NULL,
   geometry geometry(MULTILINESTRING, 3857)
);

затем я отправляю эту функцию крошечным хранилищам (здесь полезная нагрузка)

<Transaction
xmlns="http://www.opengis.net/wfs" service="WFS" version="1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
<Insert>
    <md
        xmlns="http://www.tinyows.org/">
        <geometry>
            <MultiLineString
                xmlns="http://www.opengis.net/gml" srsName="EPSG:3857"/>
            </geometry>
        </md>
    </Insert>
</Transaction>

но база данных возвращает ошибку:

Geometry has Z dimension but column does not

После получения этой ошибки я попытался использовать параметр "opt_layout" (http://openlayers.org/en/latest/apidoc/module-ol_geom_MultiLineString-MultiLineString.html), например:

let defaultMdFeature =  new ol.Feature({
    geometry: new ol.geom.MultiLineString([], 'XY'),
});

и полезная нагрузка:

<Transaction
xmlns="http://www.opengis.net/wfs" service="WFS" version="1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
<Insert>
    <md
        xmlns="http://www.tinyows.org/">
        <geometry>
            <MultiLineString
                xmlns="http://www.opengis.net/gml" srsName="EPSG:3857"/>
            </geometry>
        </md>
    </Insert>
</Transaction>

К сожалению, я получаю ту же ошибку, даже указав макет.

У меня вопрос: есть ли способ сохранить пустую 2d мультилинестринг в postgis?

заранее благодарю за поддержку,

G.R.

1 Ответ

0 голосов
/ 03 июля 2018

Я пробовал следующее:

// MultiLineString takes an array of array (or the constructor does not receive a valid input)
var defaultMdFeature =  new ol.Feature({
  geometry: new ol.geom.MultiLineString([[]]),
});

var wfs = new ol.format.WFS();

var transaction = wfs.writeTransaction([defaultMdFeature], null, null, {
  featureNS: 'http://www.tinyows.org/',
  featureType: 'md',
  hasZ: false,  // To be sure there are only 2 dimensions
  gmlOptions: {
    srsName: 'EPSG:3857'
  }
})

var s = new XMLSerializer();
var str = s.serializeToString(transaction);

console.log(str);

console.log(str) возвращает следующее:

<Transaction
    xmlns="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Insert>
        <md
            xmlns="http://www.tinyows.org/">
            <geometry>
                <MultiLineString
                    xmlns="http://www.opengis.net/gml" srsName="EPSG:3857">
                    <lineStringMember>
                        <LineString srsName="EPSG:3857">
                            <posList srsDimension="2"></posList>
                        </LineString>
                    </lineStringMember>
                </MultiLineString>
            </geometry>
        </md>
    </Insert>
</Transaction>

Возможно, вы захотите попробовать этот способ, поскольку видите, что XML отличается, так как тег LineString содержит <posList srsDimension="2"></posList>

...