Advertisement
JanuszKowalski123

10. geography 1

May 9th, 2024
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  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.  
  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.
  49.  
  50.  
  51. -- Znajdź urządzenia znajdujące się w odległości mniejszej niż 100 kilometrów od określonej lokalizacji
  52. DECLARE @search_location GEOGRAPHY;
  53. SET @search_location = GEOGRAPHY::Point(52.2297, 21.0122, 4326); -- Przykładowa lokalizacja (Warszawa)
  54.  
  55. SELECT
  56. device_id,
  57. device_location,
  58. device_description
  59. FROM
  60. Renewable_Energy_Devices
  61. WHERE
  62. device_location.STDistance(@search_location) / 1000 <= 100; -- Odległość w kilometrach
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement