即使安装了 JSON-C 也无法使用 ST_GeomFromGeoJSON
Cannot use ST_GeomFromGeoJSON even when JSON-C is installed
我有一个 Postgres 数据库,上面创建了 Postgis 扩展。
我想使用ST_GeomFromGeoJSON function。文档状态:
If you do not have JSON-C enabled, you will get an error notice instead of seeing an output. To enable JSON-C, run configure --with-jsondir=/path/to/json-c. See Section 2.2.3, “Build configuration” for details.
所以我确保安装了 JSON-C 并使用它配置 Postgis...
# install json-c
curl -L --output /tmp/json-c.tar.gz https://s3.amazonaws.com/json-c_releases/releases/json-c-0.10-nodoc.tar.gz
tar -xvf /tmp/json-c.tar.gz -C /tmp/
mkdir -p /var/lib/include
cp -r /tmp/json-c-0.10 /var/lib/include/json-c
# install postgis
curl https://download.osgeo.org/postgis/source/postgis-3.0.3.tar.gz -o ./postgis-3.0.3.tar.gz \
&& tar xvzf postgis-3.0.3.tar.gz
# configure postgis
cd /tmp/postgis-3.0.3
./configure --without-raster --with-jsondir=/var/lib \
&& make \
&& make install
然后,我在数据库运行下面
postgres=# create extension postgis;
CREATE EXTENSION
postgres=# select ST_GeomFromGeoJSON('{"type": "Point", "coordinates": [0,0]}');
ERROR: You need JSON-C for ST_GeomFromGeoJSON
为什么会出现该错误?我在配置 postgis 时包含 JSON-C,不是吗?我的安装步骤是否遗漏了什么?
Postgres: 12.7
Postgis: 3.0.3
你能运行 SELECT PostGIS_Full_Version();
postgis_full_version
POSTGIS="3.0.0dev r17211" [EXTENSION] PGSQL="110" GEOS="3.8.0dev-CAPI-1.11.0 df24b6bb" SFCGAL="1.3.6" PROJ="Rel. 5.2.0 , 2018 年 9 月 15 日》
GDAL="GDAL 2.3.2,2018/09/21 发布" LIBXML="2.9.9" LIBJSON="0.13.1" LIBPROTOBUF="1.3.1" WAGYU="0.4 .3(内部)”拓扑光栅
(1 行)
显示是否集成了LIBJSON。尝试升级到下一个服务包版本的 postgis
原来我安装错了json-c。当我这样安装它时:
apt-get install libjson-c-dev
并将以下内容与 ./configure
一起使用:
--with-jsondir=/usr
成功了。
可以看到json-c头文件安装在/usr/include/json-c
ls /usr/include/json-c
arraylist.h json_c_version.h json_object_iterator.h linkhash.h
bits.h json.h json_object_private.h printbuf.h
debug.h json_inttypes.h json_tokener.h random_seed.h
因此,/usr
成为您的 --with-jsondir
我有一个 Postgres 数据库,上面创建了 Postgis 扩展。
我想使用ST_GeomFromGeoJSON function。文档状态:
If you do not have JSON-C enabled, you will get an error notice instead of seeing an output. To enable JSON-C, run configure --with-jsondir=/path/to/json-c. See Section 2.2.3, “Build configuration” for details.
所以我确保安装了 JSON-C 并使用它配置 Postgis...
# install json-c
curl -L --output /tmp/json-c.tar.gz https://s3.amazonaws.com/json-c_releases/releases/json-c-0.10-nodoc.tar.gz
tar -xvf /tmp/json-c.tar.gz -C /tmp/
mkdir -p /var/lib/include
cp -r /tmp/json-c-0.10 /var/lib/include/json-c
# install postgis
curl https://download.osgeo.org/postgis/source/postgis-3.0.3.tar.gz -o ./postgis-3.0.3.tar.gz \
&& tar xvzf postgis-3.0.3.tar.gz
# configure postgis
cd /tmp/postgis-3.0.3
./configure --without-raster --with-jsondir=/var/lib \
&& make \
&& make install
然后,我在数据库运行下面
postgres=# create extension postgis;
CREATE EXTENSION
postgres=# select ST_GeomFromGeoJSON('{"type": "Point", "coordinates": [0,0]}');
ERROR: You need JSON-C for ST_GeomFromGeoJSON
为什么会出现该错误?我在配置 postgis 时包含 JSON-C,不是吗?我的安装步骤是否遗漏了什么?
Postgres: 12.7
Postgis: 3.0.3
你能运行 SELECT PostGIS_Full_Version(); postgis_full_version
POSTGIS="3.0.0dev r17211" [EXTENSION] PGSQL="110" GEOS="3.8.0dev-CAPI-1.11.0 df24b6bb" SFCGAL="1.3.6" PROJ="Rel. 5.2.0 , 2018 年 9 月 15 日》 GDAL="GDAL 2.3.2,2018/09/21 发布" LIBXML="2.9.9" LIBJSON="0.13.1" LIBPROTOBUF="1.3.1" WAGYU="0.4 .3(内部)”拓扑光栅 (1 行)
显示是否集成了LIBJSON。尝试升级到下一个服务包版本的 postgis
原来我安装错了json-c。当我这样安装它时:
apt-get install libjson-c-dev
并将以下内容与 ./configure
一起使用:
--with-jsondir=/usr
成功了。
可以看到json-c头文件安装在/usr/include/json-c
ls /usr/include/json-c
arraylist.h json_c_version.h json_object_iterator.h linkhash.h
bits.h json.h json_object_private.h printbuf.h
debug.h json_inttypes.h json_tokener.h random_seed.h
因此,/usr
成为您的 --with-jsondir