VK Cloud logo

PostgreSQL жүйесінде PostGIS кеңейтімін пайдалану

Кеңістіктік сұрауды қалай құруға болады?

Кеңістіктік сұрауды құру үшін geometry типті бағаны бар кесте жасауыңыз керек, онда сіздің ГАЖ деректеріңіз сақталады. PSQL көмегімен дерекқорыңызға қосылып, SQL орындаңыз:

CREATE TABLE gtest ( ID int4, NAME varchar(20) ); SELECT AddGeometryColumn('', 'gtest','geom',-1,'LINESTRING',2);

Егер геометрия бағанын қосу мүмкін болмаса, онда сіз PostGIS функциялары мен объектілерін өз дерекқорыңызға жүктемеген болуыңыз ықтимал. Орнату жөніндегі нұсқаулықты қараңыз.

Одан кейін SQL-дің insert командасы арқылы геометрияны кестеге енгізе аласыз. ГАЖ объектісі OpenGIS консорциумының well-known text форматына сәйкес пішімделеді:

INSERT INTO gtest (ID, NAME, GEOM) VALUES ( 1, 'Первая геометрия', GeomFromText('LINESTRING(2 3,4 5,6 5,7 8)', -1) );

Басқа ГАЖ объектілері туралы толық ақпаратты объектілер анықтамалығынан көруге болады. Кестедегі ГАЖ деректеріңізді қарау:

SELECT id, name, AsText(geom) AS geom FROM gtest;

Нәтиже шамамен мынадай болуы керек:

id | name           | geom --- +----------------+------------------------------ 1  | First geometry | line(2 3,4 5,6 5,7 8) (1 row)

ГАЖ объектісін дерекқорға қалай енгізуге болады?

Бұл басқа дерекқор сұрауларын құрастырғандағыдай жасалады: мәндерді, функцияларды және логикалық тексерулерді алу үшін SQL-сұрауды пайдаланыңыз.

Кеңістіктік сұрауларды құру кезінде мыналарды ескеру керек:

  • пайдалануға болатын кеңістіктік индекс бар ма;
  • геометриялардың көп санына күрделі есептеулер жүргізу қажет пе.

Көбінесе сізге объектілердің шекаралары қиылысатынын тексеретін «қиылысу операторы» (&&) қажет болады. && операторының пайдасы — егер бар болса, ол кеңістіктік индексті пайдалана алады. Бұл сұраудың орындалуын жылдамдатады.

Сонымен қатар, іздеу нәтижелерін тарылту үшін Distance(), ST_Intersects(), ST_Contains() and ST_Within() және басқа кеңістіктік функцияларды пайдалануға болады. Кеңістіктік сұраулардың көпшілігі индекс сынағын және кеңістіктік функция сынағын қамтиды. Индекс сынағы тек талап етілетін жиынға түсуі мүмкін мәндерді ғана тексеруге мүмкіндік беретіндіктен пайдалы. Одан кейін шартты түпкілікті тексеру үшін кеңістіктік функциялар қолданылады.

SELECT id, the_geom FROM thetable WHERE the_geom && 'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))' AND _ST_Contains(the_geom,'POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))');