Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [postgis] Wybór punktów w obszarze - problem
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
szumigt
Witam.
Od jakiegoś czasu próbuję uporać się z takim to oto problemem. Mam zainstalowaną i działającą poprawnie PostgreSQL 8.3 wraz z też dobrze skonfigurowanym Postgis-em 1.3.3. W bazie znajdują się 3 tabele:

1. Odcinki - zawierająca kolumnę typu line.
2. Obszary - zawierającą kolumnę typu polygon.
3. Punkty - nie zawiera kolumny geometrycznej ale same numery punktów. Zawiera także numer odcinka do którego dany punkt przynależy.

Problem polega na tym że potrzebuję wybrać wszystkie wiersze z tabeli punkty których odcniki położone są w obszarach zdefiniowanych w tabeli obszary.

Problem rozwiązałem tylko częściowo przez zastosowanie w warunku funkcji WITHIN. Problem jednak powstał przy odcinkach newralgicznych, tzn takich gdzie odcinek położony jest na krawędzi obszaru lub czasem poprostu go przecina.

Pomóżcie cosik jeśli możecie bo mnie brakło już pomysłu sciana.gif a Google nie chce już ze mną współpracować biggrin.gif
Zbłąkany
Pokaż strukturę bazy, przykładowe dane i zapytania, których używasz smile.gif
szumigt
Struktura:

Tabela Odcinki:
Kod
+----+-------+-----------------+
| ID | Nazwa | The_Geom (LINE) |
+----+-------+-----------------+
|  1 |  E27  | 0204EDA4EDA0... |
|  2 |  B25  | 01EAC014EDA0... |
+----+-------+-----------------+


Tabela Obszary:
Kod
+----+-------+--------------------+
| ID | Numer | The_Geom (POLYGON) |
+----+-------+--------------------+
| R1 | K1R27 | 0204EDA204EDED0... |
| R2 | K1R25 | 01EAC010EAAC010... |
+----+-------+--------------------+


Tabela Punkty:
Kod
+----+--------+---------+------------------+------+
| ID | Obszar | Odcinek | The_Geom (POINT) | Opis |
+----+--------+---------+------------------+------+
|  1 |   1    |    1    | 0204EDA0146501.. | prz1 |
|  2 |   1    |    1    | 01EAC010000111.. | prz2 |
+----+--------+---------+------------------+------+


Zapytanie wybierające
  1. SELECT
  2. p.opis
  3. FROM punkty p
  4. INNER JOIN odcniki odc ON odc.id = p.odcinek
  5. INNER JOIN obszary ob ON ob.id = p.id
  6. WHERE ST_Within(odc.the_geom, ob.the_geom);


Wiem że nie powinno być w tabeli punkty id_obszaru bo to powinny załatwiać funkcje postgis-a ale na razie niech on tam pozostanie bo potrzebny on będzie mi na wypadek gdybym nie miał na innym serwerze funkcji postgis-owych (może się tak zdarzyć).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.