SHOW:
|
|
- or go back to the newest paste.
1 | CREATE TABLE Renewable_Energy_Devices ( | |
2 | device_id NVARCHAR(26) PRIMARY KEY, | |
3 | device_status INT CHECK (device_status >= 0 AND device_status <= 6), | |
4 | device_power DECIMAL(18,0), | |
5 | company_id INT, | |
6 | device_location GEOGRAPHY, | |
7 | device_location_geom GEOMETRY, | |
8 | device_hierarchy HIERARCHYID, | |
9 | device_description XML | |
10 | ); | |
11 | ||
12 | DECLARE @latitude DECIMAL(9, 6), @longitude DECIMAL(9, 6); | |
13 | DECLARE @point GEOMETRY; | |
14 | DECLARE @device_hierarchy HIERARCHYID; | |
15 | DECLARE @device_description XML; | |
16 | ||
17 | DECLARE @i INT = 1; | |
18 | WHILE @i <= 50 | |
19 | BEGIN | |
20 | SET @latitude = RAND() * 180 - 90; | |
21 | SET @longitude = RAND() * 360 - 180; | |
22 | SET @point = GEOMETRY::Point(@latitude, @longitude, 4326); | |
23 | ||
24 | -- Tworzenie hierarchii z użyciem losowej wartości dodanej do korzenia | |
25 | IF @i = 1 | |
26 | SET @device_hierarchy = HIERARCHYID::GetRoot().GetDescendant(NULL, NULL); | |
27 | ELSE | |
28 | SET @device_hierarchy = @device_hierarchy.GetDescendant(NULL, NULL); | |
29 | ||
30 | SET @device_description = '<description>Device_' + CAST(@i AS NVARCHAR(5)) + '</description>'; | |
31 | ||
32 | INSERT INTO Renewable_Energy_Devices (device_id, device_status, device_power, company_id, device_location, device_location_geom, device_hierarchy, device_description) | |
33 | VALUES ( | |
34 | 'Device_' + CAST(@i AS NVARCHAR(5)), | |
35 | CAST(RAND() * 6 AS INT), | |
36 | CAST(RAND() * 1000 AS DECIMAL(18, 0)), | |
37 | CAST(RAND() * 10 AS INT) + 1, | |
38 | GEOGRAPHY::Point(@latitude, @longitude, 4326), | |
39 | @point, | |
40 | @device_hierarchy, | |
41 | @device_description | |
42 | ); | |
43 | ||
44 | SET @i = @i + 1; | |
45 | END; | |
46 | ||
47 | Zapytanie wybierze wszystkie urządzenia z tabeli Renewable_Energy_Devices, których geometria umiejscowienia (kolumna device_location_geom) znajduje się w odległości mniejszej niż 1000 jednostek od punktu o współrzędnych (0, 0). | |
48 | - | Przykładowe zapytanie wykorzystujące typ danych "geography" znajduje urządzenia znajdujące się w odległości mniejszej niż 100 kilometrów od określonej lokalizacji (w tym przypadku Warszawy). @search_location jest używana do określenia lokalizacji, a funkcja STDistance oblicza odległość między każdą lokalizacją urządzenia a @search_location. |
48 | + | |
49 | -- Wybierz wszystkie urządzenia, których geometria umiejscowienia jest w odległości mniejszej niż 1000 jednostek od punktu o współrzędnych (0, 0) | |
50 | SELECT * | |
51 | - | -- Znajdź urządzenia znajdujące się w odległości mniejszej niż 100 kilometrów od określonej lokalizacji |
51 | + | FROM Renewable_Energy_Devices |
52 | - | DECLARE @search_location GEOGRAPHY; |
52 | + | WHERE device_location_geom.STDistance(geometry::Point(0, 0, 4326)) < 1000; |
53 | - | SET @search_location = GEOGRAPHY::Point(52.2297, 21.0122, 4326); -- Przykładowa lokalizacja (Warszawa) |
53 | + |