<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Zapytanie SQL wyszukujące punkty z polygonu]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1947&amp;type=atom"/>
	<updated>2014-03-13T10:56:33Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1947</id>
		<entry>
			<title type="html"><![CDATA[Odp: Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5016#p5016"/>
			<content type="html"><![CDATA[kwalifikator && oznacza wykrywanie nakładających się obszarów więc możesz szukać punktu wewnątrz obszaru odniesienia tak jak w przykładzie, który przesłałem Ci na priv lub sprawdzić czy jeśli punkt zamienisz na kwadrat o boku zgodnie z założonym przez ciebie warunkiem. Właśnie to dokładnie robi  ten select

poniższy przykład to pokazuje
with p (koordynaty) as (values (point (0,0))
                              ,(point (1,1))
                              ,(point (0.5,0.5))
                              ,(point (1.5,1.5))
                              ,(point (3,3))
                              ,(point (2,2))
                              ,(point (-1,-1))
                              ,(point (2.1,2.1))
                              ,(point (-1.1,-1.1))
                        )
select p.koordynaty as punkt, box (koordynaty-point(1,1),koordynaty+point(1,1)) as kwadrat
     , box(point(0,0),point(1,1)) && box (koordynaty,koordynaty) as czy_punkt_wewnatrz_obszaru
     , box(point(0,0),point(1,1)) && box (koordynaty-point(1,1),koordynaty+point(1,1)) as czy_kwadrat_naklada_sie_na_obszaru
from p]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2014-03-13T10:56:33Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5016#p5016</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5015#p5015"/>
			<content type="html"><![CDATA[Michal, działa zwraca nawet dużo rekordów więc wydaje się OK mógłbyś napisać co tam się dzieje??
Rozumiem że podajesz punkt startu i mety i te -1... to offset?]]></content>
			<author>
				<name><![CDATA[hetmanJIIIS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1268</uri>
			</author>
			<updated>2014-03-13T10:05:09Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5015#p5015</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5013#p5013"/>
			<content type="html"><![CDATA[zerknij na to
select *
from points p
where box (point(19.624540,50.275550),point(19.859450,50.162140)) && box(point(longitude,latitude)-point(1,1),point(longitude,latitude)+point(1,1))]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2014-03-13T07:20:17Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5013#p5013</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5011#p5011"/>
			<content type="html"><![CDATA[Chodzi o to że mam dwa punkty: 
A - punkt startu
B - punkt mety 

A (1,1) i B (10,10) 
i chcę wszystkie punkty pośrednie ( które są pomiędzy tymi punktami) zdobyć z pośród całej mapy. Dodatkowo chcę jeszcze dodać dodatkowy offset żeby pobierać np. od (-1,-1) do (12,12) . Program wyszukuje drogi i czasem może zdarzyć się sytuacja że lepsza droga nie pójdzie bezpośrednio w stronę punktu B ale cofnie się (dlatego offset) 
napisałem zapytanie które działa pod warunkiem że punkt A jest poniżej punktu B i A jest po lewej stronie:
oto one: 
SELECT * FROM Points WHERE "longitude" >= '19.624540' AND "latitude" >= '50.275550'
AND "longitude" <= '19.859450' AND "latitude" <= '50.162140'
sorry za znaczki ale zapytanie jest robione w programie QuantumGis :) 

Programu brakuje dwóch przypadków: 
1) Punkt A jest powyzej punktu B
2) Punkt A jest po prawej stronie a punkt B po lewej (kierunek jazdy inny)
i pewnie jeszcze kilka..
Ma ktoś jakiś pomysł?? w Javie pewnie ratował bym się ifami a jak to zrobic e SQL ?]]></content>
			<author>
				<name><![CDATA[hetmanJIIIS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1268</uri>
			</author>
			<updated>2014-03-12T18:19:17Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5011#p5011</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5010#p5010"/>
			<content type="html"><![CDATA[odpowiedziałem na priv]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2014-03-12T13:32:01Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5010#p5010</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5009#p5009"/>
			<content type="html"><![CDATA[Wysłałem Ci wiadomość na privie,]]></content>
			<author>
				<name><![CDATA[hetmanJIIIS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1268</uri>
			</author>
			<updated>2014-03-12T13:04:08Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5009#p5009</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5008#p5008"/>
			<content type="html"><![CDATA[klauzula WITH w tym konkretnym wypadku jest wykorzystywana do symulowania danych w tabelach.
Jeśli nie znasz SQL-a to podeślij strukturę tabel (wszystko co jest w poleceniu CREATE TABLE) z punktami i obszarami, napisz mi też czego oczekujesz w wyniku działania zapytania, postaram Ci napisać ten select.

Ps poczytaj też dokumentacje do funkcji geometrycznych w PosgreSql [url]http://www.postgresql.org/docs/current/static/functions-geometry.html,[/url] twój błąd prawdopodobnie polega na tym, że nie umiesz swoich danych zamienić na typy geometryczne typu point i box. Jeśli chcesz sam powalczyć najpierw poczytaj dokumentacje]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2014-03-12T12:48:00Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5008#p5008</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5007#p5007"/>
			<content type="html"><![CDATA[Działami przykład i pokazuje o co mi chodziło, mógłbyś mi wytłumaczyć co tam się dzieje? , mam tabele Points a tam nie rozumiem co zawarte jest w krauzuli WITH ?
Spróbuję podpiąć moja tabele do zapytania (od miejsca select) i jakos to poustawiać- o to chodzi tak ?
Sorry ale z SQLa znam tylko z podstaw.
Dziękuję Ci Michał bardzo :)]]></content>
			<author>
				<name><![CDATA[hetmanJIIIS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1268</uri>
			</author>
			<updated>2014-03-12T12:35:31Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5007#p5007</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5006#p5006"/>
			<content type="html"><![CDATA[zerknij na poniższy przykład
with obszary (id, koordynaty_box) as (values
(1,box '((0,0),(1,1))'),
(2,box '((1,1),(2,3))')),
punkty (id,koordynaty_punkt) as (values
 (1,point '(-1,-1)'),
 (2,point '(0,0)'),
 (3,point '(1,1)'),
 (4,point '(2,2)'),
 (5,point '(0.5,1)'))
select o.id as obszar_od , o.koordynaty_box as obszar_koordynaty
      ,p.id as punkt_id  , p.koordynaty_punkt as punkty_zawarte_w_obszarze
from obszary o
join punkty p on o.koordynaty_box && box(p.koordynaty_punkt,p.koordynaty_punkt)]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2014-03-12T10:53:13Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5006#p5006</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Zapytanie SQL wyszukujące punkty z polygonu]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=5005#p5005"/>
			<content type="html"><![CDATA[Witam wszystkich,
Potrzebuję stworzyć zapytanie wyszukujące punkty, które występują w danym polygonie/prostokącie
Mam Baze punktów- Points:
-- LAT- (szerokosc Geogr- rownolezniki)
-- LON (dlugosc Geogr- poludniki)
int ID |bigint osmid |  double LAT  | double LON | degree
np. 1 | 1678695440 | 50.029162 | 19.948975 | 3

Mam takich punktów 800 000 i potrzebuje (by zoptymalizować pracę programu) wybrać tyko część punktów z polygonu o punktach: (koordynaty testowe...) 
A ( 50.028... , 19.94... )
B ( 50.029... , 19.94...)
C ( 50.029... , 19.94... )
D ( 50.029... , 19.94... )

Wymyśliłem na kartce takie zależności :
Mając prostokąt:
A (Ax, Ay) - lewy górny róg
B (Bx, By) - prawy górny róg
C (Cx, Cy) - lewy dolny róg
D (Dx, Dy) - prawy dolny róg
to:
punkt X (nasz punkt który sprawdzamy czy należy do poligonu) musi spełniać warunki:
X >= Ax  i  X<= Bx
X <= Ay i   X>= Cy
Pomożecie mi opakować to w zapytanie sqlowe ?
Z gory dziękuję i pozdrawam]]></content>
			<author>
				<name><![CDATA[hetmanJIIIS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1268</uri>
			</author>
			<updated>2014-03-12T10:09:58Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=5005#p5005</id>
		</entry>
</feed>
