-
Notifications
You must be signed in to change notification settings - Fork 0
/
cw4.sql
152 lines (109 loc) · 4 KB
/
cw4.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
create extension postgis;
--1. Znajdź budynki, które zostały wybudowane lub wyremontowane na przestrzeni roku
--(zmiana pomiędzy 2018 a 2019).
WITH
NewBuildings
AS (
SELECT t19.*
FROM t2019_kar_buildings t19
LEFT JOIN t2018_kar_buildings t18
USING (polygon_id)
WHERE t18.polygon_id IS NULL
),
RenovatedBuildings
AS (
SELECT t19.*
FROM t2018_kar_buildings t18, t2019_kar_buildings t19
WHERE t18.polygon_id = t19.polygon_id
AND (NOT ST_Equals(t18.geom, t19.geom) OR t18.height <> t19.height)
)
SELECT * INTO tnew_buildings
FROM NewBuildings
UNION
SELECT * FROM RenovatedBuildings;
SELECT * FROM tnew_buildings;
--2. Znajdź ile nowych POI pojawiło się w promieniu 500 m od wyremontowanych
--lub wybudowanych budynków, które znalezione zostały w zadaniu 1.
--Policz je wg ich kategorii.
WITH
NewPoi
AS (
SELECT p19.*
FROM t2019_kar_poi_table p19
LEFT JOIN t2018_kar_poi_table p18
USING (poi_id)
WHERE p18.poi_id IS NULL
)
SELECT np.type, COUNT(ST_DWithin(np.geom, (SELECT ST_Union(geom) FROM tnew_buildings), 500.0))
INTO new_poi_in_buffer
FROM NewPoi np
GROUP BY np.type;
--ile
SELECT SUM(count) FROM new_poi_in_buffer;
--pogrupowane
SELECT * FROM new_poi_in_buffer;
-- 3. Utwórz nową tabelę o nazwie ‘streets_reprojected’, która zawierać będzie dane z tabeli
-- T2019_KAR_STREETS przetransformowane do układu współrzędnych DHDN.Berlin/Cassini.
----------------------------------
--sprawdzam jaki to SRID
SELECT * FROM spatial_ref_sys
WHERE srtext ILIKE '%DHDN%'
AND srtext ILIKE '%Berlin%';
----------------------------------
CREATE TABLE streets_reprojected AS
SELECT * FROM t2019_kar_streets;
ALTER TABLE streets_reprojected
ALTER COLUMN geom
TYPE GEOMETRY(MULTILINESTRING, 3068)
USING ST_Transform(geom, 3068);
--sprawdzenie
SELECT ST_SRID(geom) FROM streets_reprojected;
-- 4. Stwórz tabelę o nazwie ‘input_points’ i dodaj do niej dwa rekordy o geometrii punktowej.
-- Przyjmij układ współrzędnych GPS.
CREATE TABLE input_points (
point_id INT PRIMARY KEY,
geom GEOMETRY NOT NULL);
INSERT INTO input_points VALUES
(1, ST_GeomFromText('POINT(8.36093 49.03174)', 4326)),
(2, ST_GeomFromText('POINT(8.39876 49.00644)', 4326));
--sprawdzenie
SELECT * FROM input_points;
-- 5. Zaktualizuj dane w tabeli ‘input_points’ tak, aby punkty te były w układzie współrzędnych
-- DHDN.Berlin/Cassini. Wyświetl współrzędne za pomocą funkcji ST_AsText().
ALTER TABLE input_points
ALTER COLUMN geom
TYPE GEOMETRY(POINT, 3068)
USING ST_Transform(geom, 3068);
SELECT ST_AsText(geom) FROM input_points;
-- 6. Znajdź wszystkie skrzyżowania, które znajdują się w odległości 200 m od linii zbudowanej
-- z punktów w tabeli ‘input_points’. Wykorzystaj tabelę T2019_STREET_NODE.
-- Dokonaj reprojekcji geometrii, aby była zgodna z resztą tabel.
SELECT * FROM t2019_kar_street_node
WHERE ST_DWithin(geom,
(SELECT ST_Transform((ST_MakeLine(geom)), 4326) FROM input_points),
200.0,
true); --200m mierzone na elipsoidzie; false - mierzone na sferze (wychodzi tutaj wiecej o 3 rows)
-- 7. Policz jak wiele sklepów sportowych (‘Sporting Goods Store’ - tabela POIs) znajduje się
-- w odległości 300 m od parków (LAND_USE_A).
--2018
SELECT COUNT(type)
FROM t2018_kar_poi_table
WHERE type='Sporting Goods Store'
AND ST_DWithin(geom,
(SELECT ST_Union(geom) FROM t2018_kar_land_use_a WHERE type ILIKE 'Park %'),
300.0);
--2019
SELECT COUNT(type)
FROM t2019_kar_poi_table
WHERE type='Sporting Goods Store'
AND ST_DWithin(geom,
(SELECT ST_Union(geom) FROM t2019_kar_land_use_a WHERE type ILIKE 'Park %'),
300.0);
-- 8. Znajdź punkty przecięcia torów kolejowych (RAILWAYS) z ciekami (WATER_LINES).
-- Zapisz znalezioną geometrię do osobnej tabeli o nazwie ‘T2019_KAR_BRIDGES’.
CREATE TABLE t2019_kar_bridges
AS (SELECT DISTINCT(ST_Intersection(r.geom, w.geom))
FROM t2019_kar_railways r, t2019_kar_water_lines w);
ALTER TABLE t2019_kar_bridges
ADD COLUMN bridge_id SERIAL PRIMARY KEY;
SELECT * FROM t2019_kar_bridges;