sql - dziedziczenie cech obiektu na podstawie lokalizacji

0

Potrzebuję pomocy w napisaniu rozwiązania dla poniższego zapytania:

Istnieje obszar, w którym zawierają się linie. Obszar ma zmienić status na "zakończony", wtedy kiedy wszystkie linie w nim w całości zawarte (takie które go przecinają albo się stykają nie powinny być brane pod uwagę) zmienią status na "zakończony"

1

Domyślam się, że brakuje paru słów kluczowych, które mogą pomóc uzyskać odpowiedź. Zapewne chodzi o systemy GIS.
Zarówno obszar jak i linie będą reprezentowane jako geometrie i można stosować operatory dla geometrii.

Słowa kluczowe: GIS, SQL/MM, ST_Within, ST_Contains.

0

Chodzi mniej więcej o całą konstrukcję tego kodu. Dopiero zaczynam przygodę z SQL, wiem jak użyć ST_CONTAIN i ok, zwraca mi prawdę i fałsz, tylko teraz potrzebuję użyć funkcji która by w przypadku prawdy pobrała wartość min z linii i przypisała do wartości poligonu

1

Można kombinować tak:

Dla danego polygonu możesz wyciągnąć ile jest linii + ile jest linii w określonym statusie ('FINALNY'). Jak porównasz te wielkości to będzie wiadomo czy wszystkie są w finalnym i czy dany obszar wymaga aktualizacji.

SELECT 
  COUNT(r.status) liczba_wszystkich,
  SUM(CASE WHEN r.status='FINALNY' THEN 1 ELSE 0 end)  liczba_finalnych 
FROM 
  rury r
WHERE 
  ST_WITHIN(r.rura,obszar);

gdzie:

rura - geometria opisujaca linie
obszar - geometria opisująca ten Twój wybrany zamknięty obszar, np. działkę

np. obszar=ST_GEOMFROMTEXT('POLYGON((p1.x p1.y, p2.x p2.y, ...))')
p1,p2, ... - punkty formujące wielokąt domknięty (p1=pN)

  1. Aktualizacja statusu
UPDATE 
  dzialki d 
SET 
  d.status='FINALNY' 
WHERE 
  EXISTS 
  (SELECT 1 FROM 
     (SELECT 
        (r.status) liczba_wszystkich,
        SUM(CASE WHEN r.status='FINALNY' THEN 1 ELSE 0 END)  liczba_finalnych 
      FROM 
        rury r
      WHERE 
        ST_WITHIN(r.rura,d.obszar)
     ) 
   WHERE 
     liczba_wszystkich=liczba_finalnych
);

To tylko taki szkic. Co w przypadku, gdy dla danego obszaru nie będzie linii ? Aktualizować status obszaru na finalny czy nie?
I pewnie wyjdzie jeszcze trochę innych detali.

edycja:
Jeszcze bardzo ważna rzecz. Nie jestem specjalistą od GIS, więc w GIS może się da inaczej/lepiej i powyższa koncepcja może być 'pod prąd' ;)

0

Dzięki, to już zdecydowanie rozjaśniło mi pracę :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1