【问题标题】:save empty multilinestring into postgis using openlayers使用 openlayers 将空的多行字符串保存到 postgis
【发布时间】:2018-12-11 18:36:23
【问题描述】:

我正在尝试使用 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)
);

然后我将功能发送到 tinyows 进行存储,(此处为有效负载)

<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.

【问题讨论】:

  • 你能在 postgresql 日志文件中检查哪个 sql 语句被发送到数据库吗?
  • 顺便说一句,如果它适用于您的几何图形,您是否尝试过使用geometry geometry(MULTILINESTRINGZ, 3857) 而不是geometry geometry(MULTILINESTRING, 3857)
  • 嗨,吉姆,我也尝试了 geometry(MULTILINESTRINGZ, 3857),但是当我使用 2d 线串时,当我尝试更新多线串时出现另一个错误 2018-07-03 14:38:30.501 CEST [17816] ERREUR: Column has Z dimension but geometry does not
  • 我不知道它是否有帮助,我检查了 postgresql 日志并看到了这个:2018-07-03 14:12:25.315 CEST [9372] ERREUR: Geometry has Z dimension but column does not 2018-07-03 14:12:25.315 CEST [9372] INSTRUCTION : INSERT INTO "public"."md" ("id","geometry") VALUES ('1','01050000A0110F000000000000')
  • 您的代码正在生成一个MULTILINESTRING Z EMPTY,它与您的表结构不匹配 -> 检查:select st_astext('01050000A0110F000000000000') as z,st_astext('010500000000000000') as notz

标签: postgresql openlayers postgis web-feature-service


【解决方案1】:

我尝试了以下方法:

// 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 标签包含&lt;posList srsDimension="2"&gt;&lt;/posList&gt; 不同

【讨论】:

    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多