PostgreSQL veritabanı ile konumsal(spatial) verilerin yönetilebilmesini sağlayan Postgis eklentisi, geometrik nesneler üzerinde işlemler yapılabilmesini sağlayan bir çok hazır fonksiyon sunar. Bu fonksiyonların tam listesine buradan ulaşabilmek mümkündür.
Bu yazıya konu olan fonksiyon, oluşturulan geometrinin geçerli olup olmadığını bulmaya yarayan St_IsValid fonksiyonu olacaktır. Eğer geometri geçersiz ise PostgreSQL bize geometrinin neden geçersiz olduğuna dair bir de mesaj bildirimi sunacaktır. Geometrilerin geçerliliği ve basitliği konusunda OGC tarafından tanımlanan bilgilere buradan ulaşabilirsiniz.
OGC tarafından basit olarak tanımlanan geometri tipleri, kendini kesen veya kendine teğet olan anormal geometrik noktalara sahip olmayan geometrik şekillerdir.
Örneğin LINESTRING türünde basit ve geçerli bir geometri;
LINESTRING(0 0, 1 1)
Örneğin LINESTRING türünde basit olmayan ama geçerli bir geometri;
LINESTRING(0 0, 1 1, 0 0)
Bu geoemtrinin basit sınıfa girmemesinin sebebi kendini kesen bir noktaya (0 0) sahip olmasıdır.
Ancak öyle durumlar vardır ki, seçilen geometri geçersizdir. Örneğin;
LINESTRING(0 0)
Bu LINESTRING tipindeki geometri tek bir noktadan meydana gelmiştir. Oysa ki LINESTRING tipindeki geometriler en az iki noktadan meydana gelmek zorundadır.
Geçersiz bir geometriyi veri tabanında sorgulamak istediğimizde aşağıdaki gibi bir sonuç alınacaktır.
Geçerli bir geometri sorgusu için ise olumlu bir sonuç alınacaktır.
NOT:
ArcGIS desktop uygulamalarından ArcMap ile çalışırken, geçersiz geometri içeren tablolar görüntülenmek istendiğinde, uygulama “Arcgis Drawing Error” başlıklı bir uyarı mesajı vermektedir. Arcgis geçersiz geoemtriyi çizdiremediği için bu mesajı vermektedir.
Bu hatayı ortadan kaldırabilmek için geçersiz geometrileri SQL query yardımıyla seçerek sistemden silmek gerekmektedir.