Почему я получаю неправильные значения при использовании ST_Area - PullRequest
1 голос
/ 04 марта 2020

Я создал таблицу со следующими командами:

  CREATE TABLE example (
    FIRST_NAME CHAR(20) NOT NULL,
    LAST_NAME CHAR(20),
    AGE INT,
    SEX CHAR(6),
    INCOME FLOAT,
    LOCATION geometry)

И вставил значения с помощью следующей команды:

INSERT INTO example (FIRST_NAME,LAST_NAME, AGE,SEX,INCOME,LOCATION)
            VALUES ("b", "b", 30, "M", 500,  POLYGON((10 10, 10 20, 30 20, 30 30, 10 10)))

Когда я пытаюсь отобразить содержимое с областью полигон, я получаю неправильный размер:

SELECT FIRST_NAME, ST_Area(LOCATION) AS Area FROM example

Я получаю 0 (и я ожидаю получить 200 (10 * 20))

Что я делаю не так, и как я могу это исправить?

1 Ответ

1 голос
/ 04 марта 2020

Может быть, ваш полигон недействителен? Она пересекает себя:

POLYGON((10 10, 10 20, 30 20, 30 30, 10 10))

enter image description here

ST_Area такого многоугольника неизбежно возвращаемый ноль:

SELECT 
 ST_Area('POLYGON((10 10, 20 10,20 30,30 30, 10 10))')

 st_area 
---------
       0
(1 Zeile)

На первый взгляд кажется, что вы неправильно установили значение широты четвертой пары координат. Это должно быть 30 10, а не 30 30. При этом вы получите желаемый результат 200:

POLYGON((10 10, 10 20, 30 20, 30 10, 10 10))

enter image description here

SELECT 
 ST_Area('POLYGON((10 10, 10 20, 30 20, 30 10, 10 10))')

 st_area 
---------
     200
(1 Zeile)
...