Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1)
- CREATE TABLE budynki247622 (id INT NOT NULL, nazwa VARCHAR, wysokosc FLOAT);
- SELECT AddGeometryColumn('budynki247622', 'geometria', 0, 'POLYGON', 2);
- INSERT INTO budynki247622 VALUES (1,'BuildingA',5 ,'Polygon((8 4, 10.5 6, 10.5 1.5, 8 1.5, 8 4))');
- INSERT INTO budynki247622 VALUES (2,'BuildingB',5 ,'Polygon((4 7, 6 7, 6 5, 4 5, 4 7))');
- INSERT INTO budynki247622 VALUES (3,'BuildingC',5 ,'Polygon((3 8, 5 8, 5 6, 3 6, 3 8))');
- INSERT INTO budynki247622 VALUES (4,'BuildingD',5 ,'Polygon((9 9, 10 9, 10 8, 9 8, 9 9))');
- INSERT INTO budynki247622 VALUES (5,'BuildingF',5 ,'Polygon((1 2, 2 2, 2 1, 1 1, 1 2))');
- CREATE TABLE drogi247622 (id INT NOT NULL, nazwa VARCHAR);
- SELECT AddGeometryColumn('drogi247622', 'geometria', 0, 'LINESTRING', 2 );
- INSERT INTO drogi247622 VALUES (1,'RoadX','LINESTRING(0 4.5,12 4.5)');
- INSERT INTO drogi247622 VALUES (2,'RoadY','LINESTRING(7.5 10.5,7.5 0)');
- CREATE TABLE pktinfo247622 (id INT NOT NULL, nazwa VARCHAR, liczprac INT);
- SELECT AddGeometryColumn('pktinfo247622', 'geometria', 0, 'POINT', 2 );
- INSERT INTO pktinfo247622 VALUES (1,'K',3, 'POINT(6 9.5)');
- INSERT INTO pktinfo247622 VALUES (2,'J',2, 'POINT(6.5 6)');
- INSERT INTO pktinfo247622 VALUES (3,'I',5, 'POINT(9.5 6)');
- INSERT INTO pktinfo247622 VALUES (4,'G',7, 'POINT(1 3.5)');
- INSERT INTO pktinfo247622 VALUES (5,'H',8, 'POINT(5.5 1.5)');
- 2)
- SELECT SUM(st_length(geometria)) FROM drogi247622; % całkowita długość dróg
- 3)
- SELECT ST_AsText(geometria), ST_Area(geometria), ST_Perimeter(geometria) FROM budynki247622 WHERE nazwa = 'BuildingA';
- % geometria (WKT), pole powierzchni, obwód poligonu
- 4)
- SELECT nazwa, ST_Area(geometria) FROM budynki247622 ORDER BY nazwa ASC;
- % nazwy i pola powierzchni wszystkich poligonów w warstwie budynki
- 5)
- SELECT nazwa, ST_Perimeter(geometria) FROM budynki247622 ORDER BY ST_Perimeter(geometria) DESC LIMIT 2;
- % nazwy i obwody dwóch budynków o największej powierzchni
- 6)
- SELECT ST_Distance(a.geometria, b.geometria) FROM pktinfo247622 a, budynki247622 b WHERE a.nazwa='K' AND b.nazwa='BuildingC';
- % najkrótsza odległość między budynkiem BuildingC a punktem G.
- 8)
- UPDATE budynki247622 a SET nazwa = CONCAT(a.nazwa, 'X') WHERE ST_Distance(a.geometria, ST_GeomFromText('POINT(0 0)') ) < 5;
- % w budynki do nazw budynków których odległość jest mniejsza niż 5 od punktu o współrzędnych (0 0), dodaj na końcu literę X
- 9)
- CREATE TABLE Odl247622 (nazwa VARCHAR, liczprac INT,odleglosc FLOAT);
- INSERT INTO Odl247622 (nazwa, liczprac, odleglosc) SELECT pkt.nazwa, pkt.liczprac, st_distance(pkt.geometria, bud.geometria) AS odl FROM (SELECT geometria FROM budynki247622 WHERE nazwa = 'BuildingA') bud, pktinfo247622 pkt ORDER BY odl DESC;
- SELECT * FROM Odl247622;
- % Zapisz w nowej tabeli Odl247622 nazwę punktu informacyjnego, liczbę pracowników oraz odległość od budynku BuildingA.
- % Wpisy mają BYć wprowadzone od najdalszego do najbliższego punktu informacyjnego (względem budynku BuildingA).
- 10)
- INSERT INTO drogi247622 VALUES (3,'LineC','LINESTRING(1.5 3,1 1)');
- SELECT st_length(ST_intersection(a.geometria, b.geometria)) FROM drogi247622 a, budynki247622 b WHERE a.nazwa='LineC' AND b.nazwa='BuildingFX';
- % Do tabeli drogi247622 dodaj odcinek o nazwie LineC o początku w punkcie (1.5, 3) i końcu w punkcie (1,1). Oblicz długość LineC w obrębie budynku BuildingFX.
- 11)
- SELECT st_area(ST_SymDifference(geometria, ST_GeomFromText('Polygon((4 7, 6 7, 6 8, 4 8, 4 7))'))) FROM budynki247622 WHERE nazwa = 'BuildingC'
- % Oblicz pole powierzchni tych części budynku BuildingC i poligonu o współrzędnych (4 7, 6 7, 6 8, 4 8, 4 7),
- % które nie są wspólne dla tych dwóch obiektów.
- 12)
- CREATE TABLE poligon1247622()
- SELECT AddGeometryColumn('poligon1247622', 'polygon', 0, 'POLYGON', 2 );
- SELECT * FROM poligon1247622;
- UPDATE budynki247622 SET geometria = ST_SymDifference(geometria, ST_GeomFromText('Polygon((8.5 2, 9 2, 9 3, 8.5 3, 8.5 2))')) WHERE nazwa = 'BuildingA';
- INSERT INTO poligon1247622 SELECT bud.geometria FROM budynki247622 bud WHERE ST_NRings(bud.geometria) = 1;
- % W tabeli budynki247622 zmodyfikuj geometrię budynku BuildingA tak aby poligon zawierał "okno" o współrzędnych
- % (8.5 2,9 2,9 3,8.5 3,8.5 2). Następnie do nowej tabeli poligon1247622 zapisz tylko te poligony, które nie
- % posiadają "okna" (zakładamy, że nie wiemy że budynek BuildingA ma takie "okno").
- 13)
- CREATE TABLE dzialka247622 (id INT NOT NULL, nazwa VARCHAR, wlasciciel VARCHAR);
- SELECT AddGeometryColumn('dzialka247622', 'geometria', 0, 'POLYGON', 2 );
- INSERT INTO dzialka247622 VALUES (1,'dzialka1', 'Kowalski' ,'Polygon((3 5, 7.5 5, 7.5 7.5, 3 7.5, 3 5))');
- SELECT * FROM dzialka247622;
- SELECT pkt.nazwa, pkt.liczprac, pkt.geometria FROM (SELECT geometria FROM dzialka247622 WHERE nazwa = 'dzialka1') dzial, pktinfo247622 pkt WHERE st_contains(dzial.geometria, pkt.geometria)
- % Utwórz nową tabelę o nazwie dzialka247622 (atrybuty: id, nazwa, geometria, wlasciciel). Wprowadź do tabeli rekord:
- % 1, dzialka1, POLIGON((3 5, 7.5 5, 7.5 7.5, 3 7.5, 3 5)), Kowalski. Wypisz wszystkie atrybuty punktów informacyjnych,
- % które znajdują się w obrębie działki Kowalskiego.
- 14)
- SELECT a.nazwa FROM budynki247622 a, drogi247622 b WHERE b.nazwa = 'RoadX' AND ST_Y(ST_Centroid(ST_GeomFromEWKT(a.geometria))) > ST_Y(ST_Centroid(ST_GeomFromEWKT(b.geometria)));
- % Wybierz te budynki, których centroid (ST_Centroid) znajduje się powyżej drogi RoadX.
- 15)
- CREATE TABLE pktinfo_247622 (nazwa VARCHAR,odleglosc FLOAT);
- SELECT AddGeometryColumn('pktinfo_247622', 'geometria', 0, 'POINT', 2 );
- SELECT * FROM pktinfo_247622;
- INSERT INTO pktinfo_247622 (nazwa, odleglosc, geometria)
- SELECT pkt.nazwa, st_distance(pkt.geometria, bud.geometria), pkt.geometria AS odl
- FROM (SELECT geometria FROM budynki247622 WHERE nazwa = 'BuildingD') bud, pktinfo247622 pkt;
- CREATE TABLE gc247622 ( );
- SELECT AddGeometryColumn('gc247622', 'geometriabud', 0, 'POLYGON', 2 );
- SELECT AddGeometryColumn('gc247622', 'geometriapkt', 0, 'POINT', 2 );
- SELECT * FROM gc247622;
- INSERT INTO gc247622
- SELECT bud.geometria, pkt.geometria FROM (SELECT * FROM pktinfo_247622 ORDER BY odleglosc DESC LIMIT 1) pkt, budynki247622 bud WHERE bud.nazwa = 'BuildingD';
- % Utwórz nową tabele pktinfo_newNU. W tabeli tej zapisz nazwy punktów informacyjnych, ich geometrię oraz odleglość
- % od budynku o nazwie BuildingD. Następnie w nowej tabeli gcNU zapisz obiekt, który reprezentuje budynek BuildingD
- % oraz punkt informacyjny położony najdalej od niego.
- 16)
- DELETE FROM pktinfo247622 WHERE nazwa IN (
- SELECT pkt.nazwa FROM (SELECT geometria FROM dzialka247622 WHERE nazwa = 'dzialka1') dzial, pktinfo247622 pkt WHERE st_intersects(dzial.geometria, pkt.geometria))
- % Usuń z tabeli pktinfoNU te punkty, które przecinają się z poligonem reprezentującym działkę Kowalskiego.
- 17)
- SELECT COUNT(*) FROM pktinfo247622 WHERE ST_Within( geometria, (SELECT ST_Buffer(geometria, 4) FROM budynki247622 ORDER BY ST_Perimeter(geometria) DESC LIMIT 1) )
- % Policz ile punktów informacyjnych znajduje się na obszarze oddalonym o 4 jednostki od budynku o największym obwodzie.
- 18)
- CREATE TABLE geom247622 (nazwa VARCHAR, geometria GEOMETRY, simple VARCHAR,valid VARCHAR);
- INSERT INTO geom247622 VALUES ( 'Polidon', ST_GeomFromText('Polygon((1 1, 3 1, 3 3, 1 0, 1 1))') );
- INSERT INTO geom247622 VALUES ( 'Linia', ST_GeomFromText('LINESTRING(3 3, 6 3, 6 6, 3 0)') );
- UPDATE geom247622 SET simple = ST_IsSimple(geometria), valid = ST_IsValid(geometria);
- % Utwórz tabelę geom247622. Do tabeli wprowadź obiekt liniowy i poligon (niech zawierają wewnętrzne przecięcia).
- % Atrybutami obiektów ma BYć m.IN. informacja, czy obiekt ma poprawną i prostą geometrię.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement