我想在Apache Superset绘制市政边界。Superset提供使用ISO-3166-2标准的地图和省份,但我想把各市划分为wel。有一个具有这些边框的形状文件,并按照在这个网站上指令将其转换为一个在这个网站上表。我使用shp2pgsql将形状文件添加到PostGIS数据库中。这就形成了一个表格,其中包含一些识别信息和一个二元宝石测量栏。
表的第一行长231.375个字符,如下所示(缩写):
"gid" "gm_code" "gm_naam" "shape_leng" "shape_area" "geom"
1 "GM0034" "Almere" 122665.358635 109562253.490 "0106000020E61000000300000001030000000100000017000000806CE7FB2F560241408B6CE73E441D41801C5A643A520...Superset无法读取这些信息,因此我通过以下查询将其转换为geojson:
CREATE TABLE gis.gemeente_2021_json AS
SELECT gm_code, gm_naam, shape_area,
json_build_object(
'type', 'Polygon',
'geometry', ST_AsGeoJSON(ST_Transform((ST_DUMP(geom)).
geom::geometry(Polygon, 4326), 4326))::json)::text as geojson
FROM gis.gemeente_2021_v1;结果是我从435个市开始,但我的新表格有1140个条目。一些示例输出如下所示。线很长,所以我剪线,用椭圆(.)代替。如您所见,市政"GM0034“突然在gejson列中有3行不同的条目,而我预计只有一行具有非常长的Geojson字符串。
gm_code gm_naam shape_area geojson
GM0034 Almere 109562253.49 {"type" : "Polygon", "geometry" : {"type":"Polygon","coordinates":[[[150213.998,479503.726],[150087.298999999,479382.379000001],[150000.420000002,479461.258000001],[150000.354600001,479461.317400001],[150000.366300002,479461.327300001],[150001.45630,...]]]}}
GM0034 Almere 109562253.49 {"type" : "Polygon", "geometry" : {"type":"Polygon","coordinates":[[[141872.969,483192.398800001],[141872.978100002,483192.398499999],[141872.984099999,483192.398499999],[141904.523899999,483191.793400001],[141912.174600001,483191.646699998],[141912.340999998, ...
GM0034 Almere 109562253.49 {"type" : "Polygon", "geometry" : {"type":"Polygon","coordinates":[[[144312.481800001,492971.460499998],[144312.557,492971.443999998],[144312.633299999,492971.445799999],[144316.953000002,492971.539999999],[144321.4701,492972.263300002],[144321.730999999,492972.305], ...虽然文档中提到多边形,但数据可能是多多边形。我试过了,但结果基本一样。
检查了postgres文档在最大的linelength,但这是大约1GB的文本每次发生,虽然行很长,250 K可以很容易地被Postgres处理。
任何关于我应该往哪里看的建议都是受欢迎的。
编辑1
正如@JGH正确地指出的那样,我在SRID中犯了一个很大的错误,形状文件的SRID是28992。我删除了表,用正确的SRID重新创建了它。它在openstreetmap上正确显示。现将其转换如下:
CREATE TABLE gis.gemeente_2021_json AS
SELECT gm_code, gm_naam, shape_area,
json_build_object(
'type', 'Polygon',
'geometry', ST_AsGeoJSON(ST_Transform((ST_DUMP(geom)).
geom::geometry(Polygon, 28992), 4326))::json)::text as geojson
FROM gis.gemeente_2021_v1;唉,同样的错误也适用。对于GM0034,仍然有3行。
编辑2
我根据@JGH的建议调整了查询:
CREATE TABLE gis.gemeente_2021_json AS
SELECT gm_code, gm_naam, shape_area,
json_build_object(
'type', 'MultiPolygon',
'geometry', ST_AsGeoJSON(ST_Transform(
geom::geometry(MultiPolygon, 28992), 4326))::json)::text as geojson
FROM gis.gemeente_2021_v1;这起作用了。
发布于 2022-11-07 15:52:52
数据显示像[150213.998,479503.726]这样的坐标,但是代码包含行geom::geometry(Polygon, 4326),后面跟着无用的transform到4326。显示的坐标是而不是,在4326中,它们可能是在没有定义的CRS的情况下加载的(因此分配了0和cast作品)。
因此,数据被声明为lat-长4326,但包含另一个CRS的值,您最终得到的是无法正确处理的艺术坐标(也许它绕地球转了好几圈,可能会转到极点和后面等等)。任何事情都有可能发生)。垃圾进来,垃圾外泄。
因此,第一步是设置适当的CRS。然后,您可能会应用一个有用的转换从这个其他CRS到4326。如果您想要单个部件,请继续使用dump并处理属性重复。如果需要多个部分,请移除dump并将geojson类型设置为MultiPolygon。
https://stackoverflow.com/questions/74348996
复制相似问题