我有一个数据库,其中包含一个企业地址表(ca_licenses)和市议会区多边形的公共模式(ca_la_la_council)中的第二个表。
我正在运行此查询,以将市议会中的区号放置在公司地址表中:
UPDATE poursafe.ca_licenses dst
SET prem_council = div_city
FROM public.ca_la_la_council src
WHERE st_within(dst.geom,src.geom) AND dst.geom&&src.geom;
我的问题是我一直得到零结果。两个geom列均为几何类型,SRID为4326。
#create poursafe.ca_licenses table
CREATE TABLE ca_licenses (
id INTEGER,
license VARCHAR,
lat DOUBLE PRECISION,
lon DOUBLE PRECISION,
geom GEOMETRY,
prem_council VARCHAR
);
#create public.ca_la_la_council table
CREATE TABLE ca_la_la_council (
gid INTEGER,
div_city VARCHAR,
shape_leng NUMERIC,
shape_area NUMERIC,
geom GEOMETRY
);
ca_licenses数据示例:https://raw.githubusercontent.com/PourSafe/data_samples/master/ca_licenses.csv
ca_la_la_council数据示例:https://raw.githubusercontent.com/PourSafe/data_samples/master/ca_la_la_council.csv
我需要用理事会区号'div_city'填充ca_licenses表列'prem_council'。为此,我运行上面的查询,查找ca_licenses点位于哪个议会区域。
我为public.ca_la_la_district表创建了spatial_ref_sys表,但是对于ca_licenses表却没有space_ref_sys表。我也需要一张桌子吗?我相信两个geom列的SRID都设置为4326。
我在centos 7设置上使用postgis 2.4.4和postgres 9.2。
答案 0 :(得分:0)
第一
我想推荐您检查QGIS
与wine完美结合 在linux机器上
秒
将多边形文件加载到qgis中后,您的代码没有任何问题 这是shapefile结构
然后我加载了点文件
问题在于它们之间没有任何交集,原因可能是这些点的构造错误。
(粉红色的小圆点是 ca_licenses.csv 点)
根据我的经验,最后最好的方法是使用ST_INTERSECT
select * from ca_licenses join ca_la_la_council on st_intersects(ca_licenses.geom,ca_la_la_council.geom)