PostGIS将图层转换为完整的GeoJSON格式文件

GeoJSON是一种用于存储地理空间数据的开放标准格式,它使用JSON对象表示地理特征和属性。PostgreSQL/PostGIS是一个功能强大的关系型数据库管理系统,它具有丰富的地理空间数据处理功能,可以轻松地将数据转换为GeoJSON格式。

将数据转换为GeoJSON格式

使用PostgreSQL和PostGIS,可以轻松地将数据转换为GeoJSON格式。下面是一些用到的转换函数和操作符:

  • ST_AsGeoJSON:将地理空间数据转换为GeoJSON格式。
  • json_build_object:将指定的键值对合并为一个 JSON 对象。该函数的语法如下: sql json_build_object(key text, value any [, ...]),其中,key 是 JSON 对象中的键名,可以是一个字符串或标识符。value 则是键值,可以是任何数据类型(例如数值、字符串、数组、JSON 对象等)。如果有多个键值对,可以在 key 和 value 之间添加逗号分隔。
  • ST_SRID: 返回在 Spatial_ref_sys 表中定义的对象的空间参考标识符。
  • array_to_json: 把数组作为一个 JSON 数组返回。一个 PostgreSQL 多维数组会成为一个数组 的 JSON 数组。
  • array_agg: 聚合函数,它可以将多个行的值合并成一个数组。
  • row_to_json:把行作为一个 JSON 对象返回。

1、构建坐标参考信息:

select
	json_build_object('type', 'name', 'properties', json_build_object('name', 'EPSG:' || st_srid(p.geometry))) as crs
from
	tzgz20240605_112242 as p
limit 1

2、将图层转为json:

select
	'FeatureCollection' as "type",
	array_to_json(array_agg(f)) as "features"
from
	(
	select
		'Feature' as "type",
		st_asgeojson(p.geometry)::json as "geometry",
		json_build_object('id', p.id, 'lsxm', p.lsxm) as "properties"
	from
		tzgz20240605_112242 as p) as f

完整的:

with spref as (
select
	json_build_object('type', 'name', 'properties', json_build_object('name', 'EPSG:' || st_srid(p.geometry))) as crs
from
	tzgz20240605_112242 as p
limit 1),
fc as (
select
	'FeatureCollection' as "type",
	array_to_json(array_agg(f)) as "features"
from
	(
	select
		'Feature' as "type",
		st_asgeojson(p.geometry)::json as "geometry",
		json_build_object('id', p.id, 'lsxm', p.lsxm) as "properties"
	from
		tzgz20240605_112242 as p) as f),
fulldata as (
select
	*
from
	spref,
	fc)
select
	row_to_json(fulldata)
from
	fulldata

附:

PostGIS中关于json创建的一些函数:

函数描述例子例子结果

to_json(anyelement)

to_jsonb(anyelement)

把该值返回为json或者jsonb。数组和组合 会被(递归)转换成数组和对象;对于不是数组和组合的值,如果有 从该类型到json的造型,造型函数将被用来执行该 转换;否则将产生一个标量值。对于任何不是数字、布尔、空值的标 量类型,将使用文本表达,在这种风格下它是一个合法的 json或者jsonb值。to_json('Fred said "Hi."'::text)"Fred said \"Hi.\""
array_to_json(anyarray [, pretty_bool])把数组作为一个 JSON 数组返回。一个 PostgreSQL 多维数组会成为一个数组 的 JSON 数组。如果pretty_bool为真,将在 第 1 维度的元素之间增加换行。array_to_json('{{1,5},{99,100}}'::int[])[[1,5],[99,100]]
row_to_json(record [, pretty_bool])把行作为一个 JSON 对象返回。如果pretty_bool为真,将在第1层元素之间增加换行。row_to_json(row(1,'foo')){"f1":1,"f2":"foo"}

json_build_array(VARIADIC "any")

jsonb_build_array(VARIADIC "any")

从一个可变参数列表构造一个可能包含异质类型的 JSON 数组。json_build_array(1,2,'3',4,5)[1, 2, "3", 4, 5]

json_build_object(VARIADIC "any")

jsonb_build_object(VARIADIC "any")

从一个可变参数列表构造一个 JSON 对象。通过转换,该参数列表由交替 出现的键和值构成。json_build_object('foo',1,'bar',2){"foo": 1, "bar": 2}

json_object(text[])

jsonb_object(text[])

从一个文本数组构造一个 JSON 对象。该数组必须可以是具有偶数个成员的 一维数组(成员被当做交替出现的键/值对),或者是一个二维数组(每一个 内部数组刚好有 2 个元素,可以被看做是键/值对)。

json_object('{a, 1, b, "def", c, 3.5}')

json_object('{{a, 1},{b, "def"},{c, 3.5}}')

{"a": "1", "b": "def", "c": "3.5"}

json_object(keys text[], values text[])

jsonb_object(keys text[], values text[])

json_object的这种形式从两个独立的数组得到键/值对。在其 他方面和一个参数的形式相同。json_object('{a, b}', '{1,2}'){"a": "1", "b": "2"}

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值