【发布时间】:2017-11-04 12:22:31
【问题描述】:
我有一个带有 PostGIS 扩展的 Postgres 数据库和一些地理数据。我需要使用自定义 SQL 查询(使用 ST_... 函数)生成切片,该查询返回二进制数据(bytea,如 \x1a320a0474657374121d12020000180322150946ec3f1a14453b0a09280f091413121e09091e0f1a026331220228012880207802)。我需要将这些数据从我的 Rails 控制器发送给请求者,并带有 'Content-Type: x-application/protobuf' 之类的标头。
所以,我的问题是:
1) 如何从数据库中获取二进制数据 (Sequel, ActiveRecord::Base.connection.execute ?)
2)如何在控制器动作中返回这些数据? (send_data ..., tyle: ''?)
谢谢!
【问题讨论】:
-
您的意思是,您需要使用一个 postgres 函数来生成二进制数据作为输出,然后您需要将此数据发送到客户端?
-
@AntonTkachov 完全正确!
ActiveRecord::Base.connection.execute返回PG::Result对象,我不确定是否可以从中获取原始二进制数据。 -
1.你能提供你的查询样本吗? 2. sql 控制台是否会返回您期望的正确二进制字符串?
-
@AntonTkachov 1)
SELECT ST_AsMVT(q, 'table', 512, 'geom') AS mvt FROM ( WITH a AS ( SELECT ST_AsMVTGeom( ST_Transform(public.table.wkb_geometry, 3857), TileBBox(13, 2411, 3078, 3857), 512, 256, true ) geom , columns FROM public.table WHERE ST_Intersects(TileBBox(13, 2411, 3078, 4326), public.table.wkb_geometry) ) SELECT * FROM a WHERE geom IS NOT NULL ) AS q, 2) 是的,以 Postgres 的形式(参见我的回答中的示例)。如何从 PG::Result 获取原始数据?
标签: ruby-on-rails postgis binary-data rails-postgresql vector-tiles