Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [postgis] Wybór punktów w obszarze - problem
szumigt
post 25.06.2008, 09:32:48
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.10.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował szumigt 25.06.2008, 09:35:19
Go to the top of the page
+Quote Post
Zbłąkany
post 25.06.2008, 22:56:54
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

Ostrzeżenie: (0%)
-----


Pokaż strukturę bazy, przykładowe dane i zapytania, których używasz smile.gif


--------------------
Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox
Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..."
Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL"
Go to the top of the page
+Quote Post
szumigt
post 26.06.2008, 10:32:31
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 5.10.2007

Ostrzeżenie: (0%)
-----


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ć).

Ten post edytował szumigt 26.06.2008, 10:46:18
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.06.2025 - 18:48