sql >> Database >  >> RDS >> PostgreSQL

Hoe voeg je 2 punten toe met een onderlinge afstand (SRID =32636)?

Je zou je geometry kunnen casten naar geography en ST_Project het (in de gewenste azimut). Hierdoor kunt u eenvoudig de afstand in meters opgeven:

CREATE TEMPORARY TABLE test_table (name text, geo geometry(point,(32636)));
INSERT INTO test_table VALUES ('foo','SRID=32636;POINT(2076155.32235105 4828109.18280588)');

SELECT 
 ST_AsText(
  ST_Transform(
   ST_Project(
     ST_Transform(geo,4326)::geography,10,radians(45.0))::geometry,
   32636)
 )
FROM test_table;

                st_astext                 
------------------------------------------
 POINT(2076150.11319696 4828116.26815917)
(1 Zeile)

U kunt de afstand controleren met ST_Distance :

SELECT 
  ST_Distance(
    ST_Transform(geo,4326)::geography,
    ST_Project(ST_Transform(geo,4326)::geography,10,radians(45.0))::geometry )
FROM test_table;

st_distance 
-------------
          10

OPMERKING :Ik gebruik ST_Transform om van uw geprojecteerde SRS naar een lange/latte SRS te gaan, zodat we deze naar geography kunnen casten , anders krijgen we een foutmelding:

SELECT geo::geography FROM test_table;

ERROR:  Only lon/lat coordinate systems are supported in geography.

Verder lezen:Bereken punt 50 mijl verderop (Noord, 45% NE, 45% ZW)




  1. ADO.Net SQLCommand.ExecuteReader() vertraagt ​​of loopt vast

  2. Voeg meerdere rijen in SQLite-fout in (foutcode =1)

  3. SQL Server 2008 - Voorwaardelijke query

  4. Een rails-veld dat een array van JSON-objecten is?