在阅读了关于如何使用OpenLayers编辑WFS的非常好的教程之后,我尝试使用Geoserver自己的WFS层复制它.需要一些Javascript帮助找出它的错误.
我成功地加载了WFS和我的底图,并设法让按钮显示出来.按钮显示正确,就像在该页面的工作示例中一样,但由于某种原因,几何数据未被保存.每次用户绘制某些内容时,都会在表上创建一个新ID,但其关联的几何列将保留为空
发布的位是:
var formatWFS = new ol.format.WFS();
var formatGML = new ol.format.GML({
featureNS: 'http://geoserver.org/bftchamber',
featureType: 'bft',
srsName: 'EPSG:27700'
});
var transactWFS = function(p,f) {
switch(p) {
case 'insert':
node = formatWFS.writeTransaction([f],null,null,formatGML);
break;
case 'update':
node = formatWFS.writeTransaction(null,[f],null,formatGML);
break;
case 'delete':
node = formatWFS.writeTransaction(null,null,[f],formatGML);
break;
}
s = new XMLSerializer();
str = s.serializeToString(node);
$.ajax('http://localhost:8080/geoserver/wfs',{
type: 'POST',
dataType: 'xml',
processData: false,
contentType: 'text/xml',
data: str
}).done();
}
Run Code Online (Sandbox Code Playgroud)
小提琴与整个代码(道歉,如果它看起来凌乱,其中大部分来自工作示例2) https://jsfiddle.net/Luffydude/ex06jr1e/6/
该应用程序如下所示:
即使我在TMS中将WFS正确地显示在我在TGIS中正确显示时,在我的应用程序中,即使我指定了EPSG …
我正在尝试创建一个检查约束以防止人们将 a 更改sales_status为3除非progression_status是80。
我以为是
ALTER TABLE mytable
ADD CONSTRAINT sales_status_cant_be_3_for_nonprogressed
CHECK (((sales_status = 3 ) or (progression_status < 80)))
Run Code Online (Sandbox Code Playgroud)
但是这会返回一个错误,指出某些行违反了它。当我运行查询时
select * from mytable where sales_status = 3 and progression_status < 80
Run Code Online (Sandbox Code Playgroud)
我没有得到预期的结果。但是我似乎无法使检查约束起作用
所以基本上我是通过匹配2个表中的字符串来匹配地址
表B有500万行,所以我真的不想每次想匹配地址时都为其创建新列
因此,我考虑改为创建索引,以匹配地址的当前索引如下所示:
CREATE INDEX matchingcol_idx ON tableB USING btree (sub_building_name || ', ' || building_name )
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,它不接受连接栏
我的更新查询将等于= b.sub_building_name || ','|| b.building_name
没有新的列和索引,这将需要多个小时
有没有一种方法而无需创建新的串联列?
所以我有一列具有以下值,有时在开头有一个数字
turtle boat
10 banana split
lord Thanos
23 macbook
Run Code Online (Sandbox Code Playgroud)
如何查询去除数字和数字前面的空格,而不是字符串中间的空格?
预期输出:
turtle boat
banana split
lord Thanos
macbook
Run Code Online (Sandbox Code Playgroud)
我从这里的另一个问题中尝试的查询:
select regexp_replace(mycolumn, '[^[:alpha:]]', '', 'g')
Run Code Online (Sandbox Code Playgroud)
此查询的问题在于它完全删除了所有空格
所以我有一个tablea,我需要使用名为buffer的表来升级列highestprog
如果一个点与2个缓冲区相交,一个点有80个进展,另一个点有90个进展,则该列应该用90更新.
所以我认为应该在这里使用max运算符.我的查询如下:
UPDATE test.tablea
SET highestprog = (SELECT max(b.progression) FROM test.tablea a, test.buffer b WHERE ST_Contains(b.geom, a.geom))
Run Code Online (Sandbox Code Playgroud)
但是,这只是用100来更新整个表中的每一行,而不是每行的正确值.如何使用正确的缓冲区更新正确的值?
所以基本上我需要得到邮政编码字符串的一部分,在一个空白空间之前
我目前的查询是
select postcode, left(postcode, length(postcode) - strpos(' ', postcode))
from postcodetable
Run Code Online (Sandbox Code Playgroud)
但它只是没有正确返回邮政编码,例如:第一列是NW1 1AA,第二列应该NW1只是重复第一列
我基本上有 2 个查询来返回数据,第一个查询速度很快,但在 5% 的情况下不起作用,第二个查询适用于所有情况,但速度慢很多
如何以始终返回结果但在第一个查询产生结果时避免运行第二个查询的方式对其进行编码?我所说的结果是指 1 行到 1000 行之间的任何内容
我当前的查询仅运行第一个查询并返回空结果集,如下所示:
SELECT CASE WHEN x.column1 IS NOT NULL THEN x.column1 ELSE y.column1 END column1,
CASE WHEN x.column1 IS NOT NULL THEN x.column2 ELSE y.column2 END column2
FROM (SELECT column1, column2 FROM mytable WHERE < 1st SET OF complex conditions >) x
, (SELECT column1, column2 FROM mytable WHERE < 2nd SET OF complex conditions >) y
Run Code Online (Sandbox Code Playgroud)
我所说的复杂条件是指一系列 GIS 函数,例如 st_intersects 和 st_dwithin ,它们会使这个问题变得更加复杂。当第一个查询返回某些内容时,两个查询的输出是相同的。我不能同时运行两者,否则它运行时间太长并且用户超时。
我当前的查询没有注册 x.column1 没有返回任何内容,并且由于 y 查询返回的条件集从未被考虑在内,如何解决这个问题?
编辑:同样,预期结果是当 query1 …
基本上,我有一个 table1,其中包含一个城市的唯一特征 ID,现在我有一个 table2 来显示该国家/地区的特征。
我需要为 country 表创建新的 id(这些需要与城市共享相同的序列,以便在交叉引用表时 id 匹配)
如何使 table2 与该城市内的 table1 具有相同的 id,然后在其他地方使用新的 id?基本上共享序列
编辑:表已经创建,我如何更新 table2
我有mytable其中有3个整数字段:id,status,project_id.
我已经告诉人们,在给它赋值之前,他们不应该在4点之前进展状态project_id.当然人们不听,然后就会出现问题.
如果有人在project_id列是否尝试从状态4更新到5时有没有办法返回错误null?我仍然需要人们能够将状态从2或3更新到状态4,无论它有什么project_id.
postgresql ×8
sql ×8
string ×2
constraints ×1
function ×1
geoserver ×1
html ×1
indexing ×1
javascript ×1
jquery ×1
openlayers-3 ×1
postgis ×1
triggers ×1