问题
在创建主键元数据表方面,我遵循在GeoServer文档中的指示,但是我无法使用WFS请求中同名的属性的值为分配地理特性的主键(存储在PostGIS存储中)。
具体来说,我正在创建一个UUID客户端(这是必要的),然后将它作为WFS请求XML的'uuid‘属性发送到GeoServer。一旦落入GeoServer手中,我希望将该UUID插入到几何学表的主键列中,也称为“uuid”。相反,GeoServer会自动创建自己的主键,如下所示:
fid--46a202d5_15320520551_-7ffe
语境
以下是我的几何表SQL:
CREATE TABLE test_points (uuid VARCHAR(60) PRIMARY KEY NOT NULL);
ALTER TABLE test_points ADD COLUMN title VARCHAR(30) NOT NULL;
ALTER TABLE test_points ADD COLUMN body TEXT NOT NULL;
SELECT AddGeometryColumn('public', 'test_points', 'geometry', '4326', 'POINT', 2);下面是我的主键元数据表SQL,与docs中的基本相同:
CREATE TABLE public.gt_pk_metadata_table (
table_schema VARCHAR(32) NOT NULL,
table_name VARCHAR(32) NOT NULL,
pk_column VARCHAR(32) NOT NULL,
pk_column_idx INTEGER,
pk_policy VARCHAR(32),
pk_sequence VARCHAR(64),
unique (table_schema, table_name, pk_column),
check (pk_policy in ('sequence', 'assigned', 'autoincrement'))
);
INSERT INTO gt_pk_metadata_table (
table_schema,
table_name,
pk_column,
pk_policy
) VALUES (
'public',
'test_points',
'uuid',
'assigned'
);我已经让WFS-t插入操作正常工作(没有主键分配),但这里有一个WFS请求XML的典型示例,以防有帮助:
<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>
<test_points xmlns="my points">
<geometry>
<Point xmlns="http://www.opengis.net/gml" srsName="EPSG:3857">
<pos>-11828783.001187595 4559315.863154193</pos>
</Point>
</geometry>
<uuid>18984168-27cc-4fc8-8dea-bfbd39c42b22</uuid>
<title>A Perfect Example</title>
<body>Here's my body.</body>
</test_points>
</Insert>
</Transaction>就我的GeoServer配置而言,在我使用的数据存储的配置页面上,启用了“公开主键”标志,主键元数据表参数的值保留为空白(请参阅下面的其他值。)
失败尝试
以下是我尝试过的其他事情的清单:
每次更改之后,我删除了test_points层,然后重新发布它。此外,我尝试删除和重新创建商店几次。
如你所见,我有点绝望了。任何帮助都是非常感谢的!
更新: GeoServer插入日志
好主意啊,我相信这会有帮助的!下面是GeoServer在插入过程中记录的内容的一个示例。除了idgen设置为GenerateNew这一事实(我认为这表明GeoServer认为它应该生成一个新的pk )之外,在我看来,这一切都很好。但是,这是我使用GeoServer的第一个项目,所以这可能并不意味着什么。提示: UUID、标题、正文和几何学与上面的XML示例不同。
2016-03-01 16:14:29,755 INFO [geoserver.gwc] - DataStoreChange:{/mypoints}test_points PreInsert
2016-03-01 16:14:29,760 INFO [geoserver.gwc] - DataStoreChange: {/mypoints}test_points PostInsert
2016-03-01 16:14:29,763 INFO [geoserver.wfs] -
Request: transaction
service = WFS
version = 1.1.0
baseUrl = http://127.0.0.1:8080/geoserver/
group[0] = wfs:insert=net.opengis.wfs.impl.InsertElementTypeImpl@5b886147 (feature: [SimpleFeatureImpl:test_points=[SimpleFeatureImpl.Attribute: uuid<uuid id=fid-4f745b22_1532fc9fb1c_-7ffa>=853596f8-9de1-477a-b287-f3cd114db90a, SimpleFeatureImpl.Attribute: title<title id=fid-4f745b22_1532fc9fb1c_-7ffa>=Another Test, SimpleFeatureImpl.Attribute: body<body id=fid-4f745b22_1532fc9fb1c_-7ffa>=For you!, SimpleFeatureImpl.Attribute: geometry<geometry id=fid-4f745b22_1532fc9fb1c_-7ffa>=POINT (-12044029.67283865 4265797.674539117)]], handle: null, idgen: <unset>, inputFormat: <unset>, srsName: null)
insert[0]:
feature[0] = SimpleFeatureImpl:test_points=[SimpleFeatureImpl.Attribute: uuid<uuid id=fid-4f745b22_1532fc9fb1c_-7ffa>=853596f8-9de1-477a-b287-f3cd114db90a, SimpleFeatureImpl.Attribute: title<title id=fid-4f745b22_1532fc9fb1c_-7ffa>=Another Test, SimpleFeatureImpl.Attribute: body<body id=fid-4f745b22_1532fc9fb1c_-7ffa>=For you!, SimpleFeatureImpl.Attribute: geometry<geometry id=fid-4f745b22_1532fc9fb1c_-7ffa>=POINT (-12044029.67283865 4265797.674539117)]
idgen = GenerateNew
inputFormat = text/xml; subtype=gml/3.1.1
releaseAction = ALL发布于 2017-05-04 22:25:35
向特性添加fid="your_target_id"属性和向wfs:Insert添加idgen="UseExisting"属性使我能够分配一个uuid。
下面是是我在idgen上能找到的最好的文档。我不清楚WFS 1.0.0和2.0.0中的类似物。
https://stackoverflow.com/questions/35713831
复制相似问题