ServBay'de PostGIS Kullanımı: PostgreSQL'e Mekansal Yetenekler Ekleme
PostGIS
, PostgreSQL veritabanı için güçlü bir uzantıdır ve PostgreSQL'in nokta, çizgi, çokgen gibi coğrafi veri türlerini, işlevlerini ve indekslerini desteklemesini sağlar. Böylece, veritabanınızda coğrafi bilgi depolayabilir, karmaşık mekansal sorgular ve analizler gerçekleştirebilirsiniz. Harita, konum hizmetleri veya coğrafi konumla ilgili web uygulamaları geliştirenler için PostGIS vazgeçilmez bir araçtır.
ServBay, macOS için tasarlanmış bir yerel web geliştirme ortamıdır ve PostgreSQL paketini entegre olarak sunar. PostGIS uzantısı da varsayılan olarak yüklüdür. Bu sayede, PostGIS’i yerelde kullanmak için elle derleme veya ek bağımlılık yükleme gibi adımlara ihtiyaç duymazsınız.
Bu makalede, ServBay ortamında PostGIS’in nasıl etkinleştirileceğini ve kullanılmaya başlanacağını ayrıntılarıyla anlatacağız. Böylece projenize hızlıca mekansal işlevler ekleyebilirsiniz.
Ön Koşullar
PostGIS’i kullanmaya başlamadan önce aşağıdaki gereksinimleri karşıladığınızdan emin olun:
- ServBay'in Kurulumu ve Çalıştırılması: ServBay’i macOS üzerinde başarıyla kurmuş olmalısınız.
- PostgreSQL Paketinin Etkinleşmiş ve Çalışıyor Olması: ServBay kontrol panelinde PostgreSQL paketinin aktif ve çalışır durumda olduğundan emin olun. Henüz etkinleşmedi ise, kontrol panelinden PostgreSQL’i bulun, “etkinleştir”i işaretleyin ve paketi başlatın.
- PostgreSQL Veritabanına Erişim: Komut satırı aracı
psql
veya TablePlus, pgAdmin gibi grafiksel istemcilerle ServBay’de çalışan PostgreSQL’e nasıl bağlanacağınızı bilin. Varsayılan olarak,psql -U postgres
komutu ile yerel veritabanına bağlanabilirsiniz.
PostGIS Uzantısının Kurulumu ve Etkinleştirilmesi
ServBay, PostGIS uzantı dosyalarını önceden yüklemiştir; ek indirme işlemi gerekmez. Yapmanız gereken tek şey, PostGIS’i kullanmak istediğiniz belirli veritabanında bu uzantıyı “etkinleştirmektir”.
Adımlar şu şekildedir:
Hedef PostgreSQL Veritabanına Bağlanın: Terminal uygulamasını açın ve
psql
komutunu kullanarak veritabanınıza bağlanın.your_username
kısmını veritabanı kullanıcı adınız (ör.postgres
),your_database
kısmını ise PostGIS’i etkinleştirmek istediğiniz veritabanı ismiyle değiştirin.bashpsql -U your_username -d your_database
1Varsayılan
postgres
kullanıcısı ve veritabanında etkinleştirmek istiyorsanız, şu şekilde de girebilirsiniz:bashpsql -U postgres
1Veritabanında PostGIS Uzantısını Oluşturun: Bağlantı başarılı olduktan sonra,
psql
komut satırında aşağıdaki SQL komutunu çalıştırın:sqlCREATE EXTENSION postgis;
1Bu komut, mevcut veritabanına PostGIS’in gerektirdiği tüm nesneleri (yeni veri tipleri, fonksiyonlar, operatörler, vs.) yükler ve yapılandırır.
PostGIS'in Başarıyla Yüklendiğini Doğrulayın:
psql
içinde, yüklü uzantıların listesini görmek için\dx
komutunu kullanabilirsiniz.sql\dx
1PostGIS etkinleştirildiyse, listede
postgis
girdisini ve sürümünü göreceksiniz.List of installed extensions Name | Version | Schema | Description -----------+---------+------------+-------------------------------------------------------------- plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language postgis | 3.3.2 | public | PostGIS geometry and geography spatial types and functions (2 rows)
1
2
3
4
5
6(Not: PostGIS’in sürüm numarası ServBay sürümüne bağlı olarak değişebilir)
Bu noktada, seçili PostgreSQL veritabanında PostGIS’i başarıyla etkinleştirdiniz ve mekansal özellikleri kullanmaya başlayabilirsiniz.
PostGIS Verilerini Yapılandırma
PostGIS’i etkinleştirdikten sonra, coğrafi veri içeren yeni tablolar oluşturabileceğiniz veya mevcut tablolara coğrafi sütunlar ekleyebileceğiniz iki ana mekansal veri tipi sunar: geometry
ve geography
. geometry
düzlemsel koordinatlar için, geography
ise küresel (örn. Dünya yüzeyinde) koordinatlar için idealdir ve genellikle enlem-boylam tabanlı verilerde kullanılır.
Coğrafi Sütuna Sahip Tablo Oluşturma
Aşağıda, nokta konumu depolayan bir coğrafi sütuna sahip locations
isimli bir tablo yaratma örneği yer alıyor.
Tabloyu Oluşturun: Veritabanına bağlı olarak
psql
veya bir grafik istemcisinde şu SQL komutunu girin:sqlCREATE TABLE locations ( id SERIAL PRIMARY KEY, name VARCHAR(100), geom GEOMETRY(Point, 4326) );
1
2
3
4
5GEOMETRY(Point, 4326)
: Buradageom
adlı sütunun tipiGEOMETRY
ve depolanan geometrinin türü “nokta”dır.4326
ise SRID (Spatial Reference Identifier); WGS84 sistemini temsil eder ve GPS ile online haritalarda (OpenStreetMap, Google Maps gibi) yaygın olarak kullanılır.- İhtiyaca göre
LineString
,Polygon
,MultiPoint
gibi başka geometri tipleri ya da farklı SRID’ler kullanabilirsiniz.
Örnek Veri Ekleme: Geometrik nesneleri tabloya eklemek için PostGIS’in fonksiyonlarını kullanabilirsiniz. Örneğin,
ST_GeomFromText()
fonksiyonu, WKT (Well-Known Text) formatındaki dizeyi geometriye dönüştürür.sqlINSERT INTO locations (name, geom) VALUES ('ServBay Genel Merkezi', ST_GeomFromText('POINT(116.4074 39.9042)', 4326)), -- Pekin konum örneği ('ServBay Şanghay Ofisi', ST_GeomFromText('POINT(121.4737 31.2304)', 4326)); -- Şanghay konum örneği
1
2
3Not:
POINT(uzunluk enlem)
sıralaması WKT standardına göredir.
Mekansal İndeks Oluşturma
Çok sayıda coğrafi veri içeren tablolarda, özellikle alan sorguları veya en yakın komşu sorguları yapılacaksa, mekansal indeks kritik önem taşır. PostGIS’te yaygın olarak GiST (Generalized Search Tree) indeksi kullanılır.
GiST İndeks Oluşturma:
psql
ya da grafik istemcisinde aşağıdaki SQL komutunu çalıştırın:sqlCREATE INDEX idx_locations_geom ON locations USING GIST (geom);
1Bu işlem,
locations
tablosundakigeom
sütununda bir GiST indeksi oluşturur. PostgreSQL sorgu optimize edicisi, mekansal sorguları hızlandırmak için bu indeksi otomatik olarak kullanacaktır.
PostGIS ile Mekansal Sorgular
PostGIS, çok çeşitli coğrafi işlemler için yüzlerce fonksiyon sunar. Web uygulaması geliştirirken en sık kullanılan sorgulardan bazıları şunlardır:
İki Nokta Arasındaki Mesafeyi Sorgulama
İki konum arasındaki düz mesafeyi hesaplamak için:
SELECT ST_Distance(
ST_GeomFromText('POINT(116.4074 39.9042)', 4326), -- Nokta A
ST_GeomFromText('POINT(121.4737 31.2304)', 4326) -- Nokta B
);
2
3
4
ST_Distance()
: İki geometri türü nesne arasındaki mesafeyi hesaplar. SRID 4326 ile kullanılangeometry
tipinde sonuç yaklaşık olarak “derece” cinsindendir. Daha kesin ve metre cinsinden sonuç içingeography
türünü veyaST_Distance(geography_a, geography_b, use_spheroid)
fonksiyonunu kullanabilirsiniz.
İçerme İlişkisini Sorgulama
Bir geometri nesnesinin başka bir geometriyi içerip içermediğini sorgulama, örneğin bir noktanın belirli bir alanın (çokgen) içinde olup olmadığını bulma:
SELECT name FROM locations
WHERE ST_Contains(
ST_GeomFromText('POLYGON((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))', 4326), -- Dikdörtgen alan örneği
geom
);
2
3
4
5
ST_Contains(geometry A, geometry B)
: Eğer A geometrisi B geometrisini tamamen içeriyorsa, sonuç olarak true döner.
En Yakın Komşuyu Sorgulama
Bir noktaya en yakın konumu bulmak için. GiST indeksi sayesinde bu tür sorgular oldukça verimli çalışır.
SELECT name, ST_Distance(geom, ST_GeomFromText('POINT(116.4074 39.9042)', 4326)) AS distance
FROM locations
ORDER BY geom <-> ST_GeomFromText('POINT(116.4074 39.9042)', 4326) -- <-> operatörü ile GiST indeksi kullanarak mesafeye göre sıralama
LIMIT 5;
2
3
4
<->
operatörü, GiST indeksi ile birlikte çalışan özel bir “mesafe” operatörüdür ve en yakın nesneleri verimli bir şekilde bulmanızı sağlar.
PostGIS ile Mekansal Analiz
Temel sorguların ötesinde, PostGIS analiz için güçlü fonksiyonlar sunar; tampon bölge (buffer), kesişim, birleştirme vb. işlemler yapılabilir.
Tampon (Buffer) Analizi
Bir geometri nesnesinin çevresinde belirli bir mesafe ile tampon bölge (çokgen) oluşturma:
SELECT ST_Buffer(geom, 0.01) -- Derece cinsinden tampon, yaklaşık 1.1 km
FROM locations
WHERE name = 'ServBay Genel Merkezi';
2
3
ST_Buffer(geometry, distance)
: Belirtilen mesafeye göre tampon alan oluşturur.geometry
tipinde mesafe birimi, koordinat sisteminin birimidir (genellikle derece).
Kesişim Analizi
İki veya daha fazla geometrinin kesişim bölgesini hesaplama ve yeni bir geometri döndürme:
SELECT ST_Intersection(
ST_GeomFromText('POLYGON((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))', 4326),
geom
)
FROM locations
WHERE name = 'ServBay Genel Merkezi';
2
3
4
5
6
ST_Intersection(geometry A, geometry B)
: A ve B geometrilerinin kesişim alanını yeni bir geometri olarak döndürür.
Birleştirme (Union) Analizi
Çoklu geometrileri tek bir (bazen çok parçalı) geometriye birleştirme işlemi:
SELECT ST_Union(geom)
FROM locations;
2
ST_Union(geometry set)
: Girilen tüm geometri nesnelerini birleştirir.
Coğrafi Verilerin Görselleştirilmesi
PostGIS veritabanında depolanan coğrafi verilerin görselleştirilmesi, web geliştirmede yaygın bir ihtiyaçtır. Bunu masaüstü GIS uygulamalarıyla veya web harita kütüphaneleriyle yapabilirsiniz.
Masaüstü GIS Araçları ile Görselleştirme (Örneğin QGIS)
QGIS, doğrudan PostGIS veritabanlarına bağlanabilen popüler ve açık kaynaklı bir masaüstü GIS yazılımıdır.
ServBay PostgreSQL'e Bağlanın:
- QGIS’i açın.
- Menüden
Layer
(Katman) ->Add Layer
(Katman Ekle) ->Add PostGIS Layers...
(PostGIS Katmanı Ekle...)’yi seçin. - Açılan pencerede,
New
(Yeni) tuşuyla bağlantı oluşturun. - Bağlantı bilgilerini doldurun:
- Name (İsim): Örneğin
ServBay PostGIS
. - Host (Sunucu):
localhost
veya127.0.0.1
. - Port (Port): PostgreSQL’in varsayılanı
5432
(ServBay’de de genellikle böyledir). - Database (Veritabanı): PostGIS’in etkin olduğu veritabanı adı.
- Username (Kullanıcı adı): Veritabanı kullanıcı adınız (
postgres
gibi). - Password (Şifre): Veritabanı şifreniz (varsa).
- Name (İsim): Örneğin
Test Connection
(Bağlantıyı Test Et) ile bağlantıyı doğrulayın.OK
ile kaydedin ve ana penceredeConnect
(Bağlan)’a tıklayın.
Coğrafi Verilerin Yüklenmesi:
- Bağlantı başarılı olduğunda, veritabanınızdaki tüm tabloları göreceksiniz.
- Coğrafi sütuna sahip tabloyu bulun (örn.
locations
). QGIS, mekansal sütunları otomatik olarak algılar. - Yüklemek istediğiniz tabloyu seçin,
Add
(Ekle)’ye ve sonraClose
(Kapat)’a tıklayın. Veriniz QGIS harita ekranında görünecek.
Web Harita Kütüphanesi ile Görselleştirme (Örneğin Leaflet)
JavaScript tabanlı Leaflet, OpenLayers, Mapbox GL JS gibi ön uç harita kütüphaneleriyle de PostGIS verilerinizi gösterebilirsiniz. Bunu yaparken, arka uçta PostGIS’ten veri çekip (örn. PHP, Node.js, Python; tümü ServBay’de çalışır), ön yüze GeoJSON formatında göndermeniz gerekir.
Aşağıda, basit bir Leaflet haritasının nasıl gösterileceğine dair temel bir örnek sunulmuştur. HTML dosyasını ServBay’in web kök dizininde (genellikle /Applications/ServBay/www
) bir alt klasöre (örn. /Applications/ServBay/www/postgis-map/index.html
) koyup, ServBay’in yerel sitesi üzerinden açabilirsiniz (örn. postgis-map.servbay.demo
).
<!DOCTYPE html>
<html>
<head>
<title>ServBay PostGIS Leaflet Örneği</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
<style>
#map { height: 400px; width: 100%; } /* Harita konteyner boyutunu ayarlayın */
</style>
</head>
<body>
<h1>PostGIS Veri Görselleştirme Örneği (Leaflet)</h1>
<div id="map"></div>
<script>
// Haritayı başlat, merkez koordinat ve zoom ayarla
// Örnek merkez noktası Pekin civarı
var map = L.map('map').setView([39.9042, 116.4074], 10);
// OpenStreetMap katmanı ekle
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap contributors'
}).addTo(map);
// Örnek: Manuel olarak bir işaretçi ekle (pratikte, PostGIS’ten veri dinamik gelir)
// Bu nokta, yukarıdaki 'ServBay Genel Merkezi' konumuna karşılık gelir
var marker = L.marker([39.9042, 116.4074]).addTo(map)
.bindPopup('<b>ServBay Genel Merkezi</b><br>Örnek Konum')
.openPopup();
// Gerçek projede, PostGIS’ten Ajax ile GeoJSON veri çekilir ve haritaya eklenir
/*
fetch('/api/locations') // Varsayalım ki API endpoint’iniz GeoJSON döner
.then(response => response.json())
.then(data => {
L.geoJSON(data).addTo(map);
});
*/
</script>
</body>
</html>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Bu örnek, Leaflet’in temel kullanımını gösterir. PostGIS verisini yüklemek için, arka uçtan verileri GeoJSON formatında alıp HTTP ile ön yüze aktarmanız gerekir. ServBay, birçok arka uç diliyle bunu kolayca gerçekleştirmenizi sağlar.
Sıkça Sorulan Sorular (SSS)
S:
CREATE EXTENSION postgis;
komutu hata veriyor, ne yapmalıyım?- C: Öncelikle, PostgreSQL’e başarıyla bağlandığınızdan ve veritabanı kullanıcınızın uzantı oluşturma yetkisi (genellikle
postgres
kullanıcısı bu izne sahiptir) olduğundan emin olun. Ayrıca ServBay’deki PostgreSQL paketinin çalıştığını doğrulayın. Sorun devam ederse, ServBay ve PostgreSQL log dosyalarını inceleyin.
- C: Öncelikle, PostgreSQL’e başarıyla bağlandığınızdan ve veritabanı kullanıcınızın uzantı oluşturma yetkisi (genellikle
S: SRID 4326 nedir? Farklı SRID kullanabilir miyim?
- C: SRID (Spatial Reference Identifier), bir koordinat referans sistemini benzersiz şekilde tanımlayan sayısal bir koddur. 4326, WGS84 enlem/boylam sistemini temsil eder ve web haritalarında en yaygın kullanılan sistemdir. Elbette, Web Merkator (SRID 3857) gibi başka yaygın projeksiyon SRID’leri de kullanabilirsiniz. Doğru SRID seçimi, veri kaynağınıza ve uygulama ihtiyaçlarınıza bağlıdır. Web haritalarında çoğunlukla 4326 veya 3857 tercih edilir.
S:
geometry
vegeography
tipleri arasındaki fark nedir?- C:
geometry
tipi, düzlemsel (kartezjen) koordinatlarda, mesafe ve alanlar Öklidyen geometriye göre hesaplanır.geography
tipi ise küresel (Dünya yüzeyi gibi) enlem-boylam veriyle çalışır ve hesaplamalar yer kürenin eğriliği dikkate alınarak daha kesin yapılır. Küçük alanlarda, hassas kıvrım hesaplamasına gerek yoksageometry
daha kolay ve hızlıdır. Dünya çapında enlem-boylam verisiyle ve hassasiyet gerektiren işlemlerdegeography
önerilir.
- C:
Sonuç
PostGIS, PostgreSQL’e güçlü mekansal veri işleme yetenekleri katar ve konum tabanlı uygulamalar geliştirmek için temel bir araçtır. ServBay ile, macOS yerel ortamınızda PostGIS’i kolayca etkinleştirip kullanabilirsiniz – karmaşık kurulum ve yapılandırmalara gerek yoktur.
Bu makalede, ServBay’de PostGIS uzantısının nasıl etkinleştirileceğini, coğrafi veri oluşturma ve yönetimini, sık kullanılan mekansal sorgu ve analizleri, ayrıca veri görselleştirme yöntemlerini özetledik. Bunları öğrenerek, ServBay'de PostGIS ile kapsamlı coğrafi web uygulamaları geliştirmeye başlayabilirsiniz. PostGIS dökümantasyonunu keşfederek çok daha fazla güçlü fonksiyon ve imkanı bulacaksınız.