Advertisement
bajamor

pbd3

Oct 22nd, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 7.71 KB | None | 0 0
  1. 1)
  2. CREATE TABLE budynki247622 (id INT NOT NULL, nazwa VARCHAR, wysokosc FLOAT);
  3. SELECT AddGeometryColumn('budynki247622', 'geometria', 0, 'POLYGON', 2);
  4. INSERT INTO budynki247622 VALUES (1,'BuildingA',5 ,'Polygon((8 4, 10.5 6, 10.5 1.5, 8 1.5, 8 4))');
  5. INSERT INTO budynki247622 VALUES (2,'BuildingB',5 ,'Polygon((4 7, 6 7, 6 5, 4 5, 4 7))');
  6. INSERT INTO budynki247622 VALUES (3,'BuildingC',5 ,'Polygon((3 8, 5 8, 5 6, 3 6, 3 8))');
  7. INSERT INTO budynki247622 VALUES (4,'BuildingD',5 ,'Polygon((9 9, 10 9, 10 8, 9 8, 9 9))');
  8. INSERT INTO budynki247622 VALUES (5,'BuildingF',5 ,'Polygon((1 2, 2 2, 2 1, 1 1, 1 2))');
  9.  
  10.  
  11. CREATE TABLE drogi247622 (id INT NOT NULL, nazwa VARCHAR);
  12. SELECT AddGeometryColumn('drogi247622', 'geometria', 0, 'LINESTRING', 2 );
  13. INSERT INTO drogi247622 VALUES (1,'RoadX','LINESTRING(0 4.5,12 4.5)');
  14. INSERT INTO drogi247622 VALUES (2,'RoadY','LINESTRING(7.5 10.5,7.5 0)');
  15.  
  16.  
  17. CREATE TABLE pktinfo247622 (id INT NOT NULL, nazwa VARCHAR, liczprac INT);
  18. SELECT AddGeometryColumn('pktinfo247622', 'geometria', 0, 'POINT', 2 );
  19. INSERT INTO pktinfo247622 VALUES (1,'K',3, 'POINT(6 9.5)');
  20. INSERT INTO pktinfo247622 VALUES (2,'J',2, 'POINT(6.5 6)');
  21. INSERT INTO pktinfo247622 VALUES (3,'I',5, 'POINT(9.5 6)');
  22. INSERT INTO pktinfo247622 VALUES (4,'G',7, 'POINT(1 3.5)');
  23. INSERT INTO pktinfo247622 VALUES (5,'H',8, 'POINT(5.5 1.5)');
  24.  
  25. 2)
  26. SELECT SUM(st_length(geometria)) FROM drogi247622; % całkowita długość dróg
  27.  
  28. 3)
  29. SELECT ST_AsText(geometria), ST_Area(geometria), ST_Perimeter(geometria) FROM budynki247622 WHERE nazwa = 'BuildingA';
  30. % geometria (WKT), pole powierzchni, obwód poligonu
  31.  
  32. 4)
  33. SELECT nazwa, ST_Area(geometria) FROM budynki247622 ORDER BY nazwa ASC;
  34. % nazwy i pola powierzchni wszystkich poligonów w warstwie budynki
  35.  
  36. 5)
  37. SELECT nazwa, ST_Perimeter(geometria) FROM budynki247622 ORDER BY ST_Perimeter(geometria) DESC LIMIT 2;
  38. % nazwy i obwody dwóch budynków o największej powierzchni
  39.  
  40. 6)
  41. SELECT ST_Distance(a.geometria, b.geometria) FROM pktinfo247622 a, budynki247622 b WHERE a.nazwa='K' AND b.nazwa='BuildingC';
  42. % najkrótsza odległość między budynkiem BuildingC a punktem G.
  43.  
  44. 8)
  45. UPDATE budynki247622 a SET nazwa = CONCAT(a.nazwa, 'X') WHERE ST_Distance(a.geometria, ST_GeomFromText('POINT(0 0)') ) < 5;
  46. % 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
  47.  
  48. 9)
  49. CREATE TABLE Odl247622 (nazwa VARCHAR, liczprac INT,odleglosc FLOAT);
  50. 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;
  51. SELECT * FROM Odl247622;
  52. % Zapisz w nowej tabeli Odl247622 nazwę punktu informacyjnego, liczbę pracowników oraz odległość od budynku BuildingA.
  53. % Wpisy mają BYć wprowadzone od najdalszego do najbliższego punktu informacyjnego (względem budynku BuildingA).
  54.  
  55. 10)
  56. INSERT INTO drogi247622 VALUES (3,'LineC','LINESTRING(1.5 3,1 1)');  
  57. SELECT st_length(ST_intersection(a.geometria, b.geometria)) FROM drogi247622 a, budynki247622 b WHERE a.nazwa='LineC' AND b.nazwa='BuildingFX';
  58. % 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.
  59.  
  60. 11)
  61. SELECT st_area(ST_SymDifference(geometria, ST_GeomFromText('Polygon((4 7, 6 7, 6 8, 4 8, 4 7))'))) FROM budynki247622 WHERE nazwa = 'BuildingC'
  62. % Oblicz pole powierzchni tych części budynku BuildingC i poligonu o współrzędnych (4 7, 6 7, 6 8, 4 8, 4 7),
  63. % które nie są wspólne dla tych dwóch obiektów.
  64.  
  65. 12)
  66. CREATE TABLE poligon1247622()  
  67. SELECT AddGeometryColumn('poligon1247622', 'polygon', 0, 'POLYGON', 2 );  
  68. SELECT * FROM poligon1247622;  
  69. 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';
  70. INSERT INTO poligon1247622 SELECT bud.geometria FROM budynki247622 bud WHERE ST_NRings(bud.geometria) = 1;
  71. % W tabeli budynki247622 zmodyfikuj geometrię budynku BuildingA tak aby poligon zawierał "okno" o współrzędnych
  72. % (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
  73. % posiadają "okna" (zakładamy, że nie wiemy że budynek BuildingA ma takie "okno").
  74.  
  75.  
  76. 13)
  77. CREATE TABLE dzialka247622 (id INT NOT NULL, nazwa VARCHAR, wlasciciel VARCHAR);  
  78. SELECT AddGeometryColumn('dzialka247622', 'geometria', 0, 'POLYGON', 2 );    
  79. INSERT INTO dzialka247622 VALUES (1,'dzialka1', 'Kowalski' ,'Polygon((3 5, 7.5 5, 7.5 7.5, 3 7.5, 3 5))');
  80. SELECT * FROM dzialka247622;  
  81. 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)
  82. % Utwórz nową tabelę o nazwie dzialka247622 (atrybuty: id, nazwa, geometria, wlasciciel). Wprowadź do tabeli rekord:
  83. % 1, dzialka1, POLIGON((3 5, 7.5 5, 7.5 7.5, 3 7.5, 3 5)), Kowalski. Wypisz wszystkie atrybuty punktów informacyjnych,
  84. % które znajdują się w obrębie działki Kowalskiego.
  85.  
  86.  
  87. 14)
  88. 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)));
  89. % Wybierz te budynki, których centroid (ST_Centroid) znajduje się powyżej drogi RoadX.
  90.  
  91.  
  92. 15)
  93. CREATE TABLE pktinfo_247622 (nazwa VARCHAR,odleglosc FLOAT);    
  94. SELECT AddGeometryColumn('pktinfo_247622', 'geometria', 0, 'POINT', 2 );  
  95. SELECT * FROM pktinfo_247622;
  96.      
  97. INSERT INTO pktinfo_247622 (nazwa, odleglosc, geometria)
  98. SELECT pkt.nazwa, st_distance(pkt.geometria, bud.geometria), pkt.geometria AS odl
  99. FROM (SELECT geometria FROM budynki247622 WHERE nazwa = 'BuildingD') bud, pktinfo247622 pkt;
  100.      
  101. CREATE TABLE gc247622 ( );
  102. SELECT AddGeometryColumn('gc247622', 'geometriabud', 0, 'POLYGON', 2 );
  103. SELECT AddGeometryColumn('gc247622', 'geometriapkt', 0, 'POINT', 2 );
  104.      
  105. SELECT * FROM gc247622;
  106. INSERT INTO gc247622
  107. SELECT bud.geometria, pkt.geometria FROM (SELECT * FROM pktinfo_247622 ORDER BY odleglosc DESC LIMIT 1) pkt, budynki247622 bud WHERE bud.nazwa = 'BuildingD';
  108. % Utwórz nową tabele pktinfo_newNU. W tabeli tej zapisz nazwy punktów informacyjnych, ich geometrię oraz odleglość
  109. % od budynku o nazwie BuildingD. Następnie w nowej tabeli gcNU zapisz obiekt, który reprezentuje budynek BuildingD
  110. % oraz punkt informacyjny położony najdalej od niego.
  111.  
  112.  
  113. 16)
  114. DELETE FROM pktinfo247622 WHERE nazwa IN (
  115. SELECT pkt.nazwa FROM (SELECT geometria FROM dzialka247622 WHERE nazwa = 'dzialka1') dzial, pktinfo247622 pkt WHERE st_intersects(dzial.geometria, pkt.geometria))
  116. % Usuń z tabeli pktinfoNU te punkty, które przecinają się z poligonem reprezentującym działkę Kowalskiego.
  117.  
  118.  
  119. 17)
  120. SELECT COUNT(*) FROM pktinfo247622 WHERE ST_Within( geometria, (SELECT ST_Buffer(geometria, 4) FROM budynki247622 ORDER BY ST_Perimeter(geometria) DESC LIMIT 1) )
  121. % Policz ile punktów informacyjnych znajduje się na obszarze oddalonym o 4 jednostki od budynku o największym obwodzie.
  122.  
  123.  
  124. 18)
  125. CREATE TABLE geom247622 (nazwa VARCHAR, geometria GEOMETRY, simple VARCHAR,valid VARCHAR);
  126. INSERT INTO geom247622 VALUES ( 'Polidon', ST_GeomFromText('Polygon((1 1, 3 1, 3 3, 1 0, 1 1))') );
  127. INSERT INTO geom247622 VALUES ( 'Linia', ST_GeomFromText('LINESTRING(3 3, 6 3, 6 6, 3 0)') );
  128. UPDATE geom247622 SET simple = ST_IsSimple(geometria), valid = ST_IsValid(geometria);
  129. % Utwórz tabelę geom247622. Do tabeli wprowadź obiekt liniowy i poligon (niech zawierają wewnętrzne przecięcia).
  130. % 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