geldigim en son noktayi paylaşayım çoğrafi yakınlıklarla boğuşan
arkadaşlar rahatlar hem benim 2 haftamı aldı :)
CREATE OR REPLACE FUNCTION yakin_ilceler(integer, integer)
RETURNS SETOF "ILCELER" AS
$BODY$
SELECT *
FROM "ILCELER"
WHERE 3956 * 2 * ASIN(SQRT(POWER(SIN(( (SELECT "LATITUDE" FROM "ILCELER"
WHERE "ID"=$2) - ABS("ILCELER"."LATITUDE")) * pi()/180/2),2)+ COS(
(SELECT "LATITUDE" FROM "ILCELER" WHERE "ID"=$2) *pi()/180)*
COS(ABS("ILCELER"."LATITUDE") * pi()/180)
* POWER(SIN(( (SELECT "LONGITUDE" FROM "ILCELER" WHERE "ID"=$2) -
"ILCELER"."LONGITUDE") * pi()/180/2),2))) <= $1
$BODY$
LANGUAGE 'sql' VOLATILE;
MP
On Tue, 2008-06-03 at 19:37 +0300, Zekeriye Bozkurt wrote:
>
> > SELECT *,
> > (3956 * 2 * ASIN(SQRT(POWER(SIN((41.087115 -
> ABS("ILCELER"."LATITUDE"))
> > * pi()/180/2),2)+ COS(41.087115*pi()/180)*
> COS(ABS("ILCELER"."LATITUDE")
> > * pi()/180) * POWER(SIN((29.023132 - "ILCELER"."LONGITUDE") *
> > pi()/180/2),2)))) as mesafe
> > FROM "ILCELER"
> > HAVING mesafe > 10
>
> Bir öneri olarak;
>
> Bu kadar uzun hesabı tek select cümleciği içerisinde yapmak yerine bu
> hesabı veritabanında bir alana kayıt ederek yapsanız ve
> select cümleciğinde sadece bu alanı kullansanız diyorum (Bildiğim
> kadarıyla Postgresql de computed field -hesaplanmış alan- kullanma
> imkanı var. Yani bir veya daha fazla alana girilen değerler üzerinden
> otomatik olarak ilgili alanın değeri hesaplanıp kayıt edilebiliyor. )
>
ilginiz icin cok tesekkurler veritabanindaki rastgele cografi
koordinatlara (n km) yakinliktaki kayitlari listelemek icin
kullanacagimdan bu cozum pek ise yaramayabilir diye dusunuyorum.
> Zekeriya BOZKURT
_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Wed 04 Jun 2008 - 11:54:16 EEST