pg_eviltransform
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
pg_eviltransform | 0.0.2 | GIS | MIT | Rust |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 1580 | pg_eviltransform | No | Yes | No | Yes | Yes | No | eviltransform_internal |
| Related | postgis postgis pgrouting pg_geohash h3 q3c earthdistance tzf geoip |
|---|
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.0.2 | 1817161514 | pg_eviltransform | postgis |
| RPM | PIGSTY | 0.0.2 | 1817161514 | pg_eviltransform_$v | postgis36_$v |
| DEB | PIGSTY | 0.0.2 | 1817161514 | postgresql-$v-eviltransform | postgresql-$v-postgis |
Build
You can build the RPM / DEB packages for pg_eviltransform using pig build:
pig build pkg pg_eviltransform # build RPM / DEB packages
Install
You can install pg_eviltransform directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
pig repo add pgsql -u # Add repo and update cache
Install the extension using pig or apt/yum/dnf:
pig install pg_eviltransform; # Install for current active PG version
pig ext install -y pg_eviltransform -v 18 # PG 18
pig ext install -y pg_eviltransform -v 17 # PG 17
pig ext install -y pg_eviltransform -v 16 # PG 16
pig ext install -y pg_eviltransform -v 15 # PG 15
pig ext install -y pg_eviltransform -v 14 # PG 14
dnf install -y pg_eviltransform_18 # PG 18
dnf install -y pg_eviltransform_17 # PG 17
dnf install -y pg_eviltransform_16 # PG 16
dnf install -y pg_eviltransform_15 # PG 15
dnf install -y pg_eviltransform_14 # PG 14
apt install -y postgresql-18-eviltransform # PG 18
apt install -y postgresql-17-eviltransform # PG 17
apt install -y postgresql-16-eviltransform # PG 16
apt install -y postgresql-15-eviltransform # PG 15
apt install -y postgresql-14-eviltransform # PG 14
Create Extension:
CREATE EXTENSION pg_eviltransform CASCADE; -- requires: postgis
Usage
pg_eviltransform: Coordinate transform between WGS84, GCJ02, and BD09
pg_eviltransform extends PostGIS ST_Transform with BD09/GCJ02 support for Chinese coordinate systems. It exposes ST_EvilTransform with the same overload interface as ST_Transform.
Custom SRIDs:
990001: GCJ02990002: BD09
Functions
ST_EvilTransform(geometry, to_srid integer)
ST_EvilTransform(geometry, to_proj text)
ST_EvilTransform(geometry, from_proj text, to_srid integer)
ST_EvilTransform(geometry, from_proj text, to_proj text)
If neither side uses custom coordinates, it delegates directly to ST_Transform. If BD09/GCJ02 is involved, it transforms via WGS84 (4326) when needed.
Examples
-- WGS84 to GCJ02 using text literal
SELECT ST_EvilTransform(ST_SetSRID('POINT(120 30)'::geometry, 4326), 'GCJ02');
-- WGS84 to BD09 using text literal
SELECT ST_EvilTransform(ST_SetSRID('POINT(120 30)'::geometry, 4326), 'BD09');
-- WGS84 to GCJ02 using numeric SRID
SELECT ST_EvilTransform(ST_SetSRID('POINT(120 30)'::geometry, 4326), 990001);
-- BD09 to Web Mercator
SELECT ST_EvilTransform(
ST_SetSRID('POINT(120.011070620552 30.0038830555128)'::geometry, 990002), 3857
);
-- from_proj / to_proj overload
SELECT ST_EvilTransform('POINT(120 30)'::geometry, 'EPSG:4326', 'GCJ02');
Performance
On PG18 with 200,000 rows, ST_EvilTransform is ~30-45x faster than the regex-based SQL approach.
Feedback
Was this page helpful?
Thanks for the feedback! Please let us know how we can improve.
Sorry to hear that. Please let us know how we can improve.