Coğrafi / spatial sorgu
Oracle
-- Oracle Spatial: SDO_GEOMETRY sütunu ve spatial indeks
CREATE INDEX konum_sidx ON magaza(konum)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;
-- 5 km içindeki mağazalar:
SELECT ad FROM magaza
WHERE SDO_WITHIN_DISTANCE(konum,
SDO_GEOMETRY(2001, 4326,
SDO_POINT_TYPE(32.85, 39.92, NULL), NULL, NULL),
'distance=5 unit=KM') = 'TRUE';Oracle Spatial coğrafi veriyi SDO_GEOMETRY tipiyle saklar; USER_SDO_GEOM_METADATA kaydı ve spatial index gerekir. SDO_WITHIN_DISTANCE, SDO_RELATE, SDO_NN gibi operatörler mesafe/kesişim/en yakın komşu sorgularını çözer. SRID 4326 WGS84 (enlem/boylam) sistemidir.
PostgreSQL
-- PostGIS eklentisi:
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE INDEX konum_gix ON magaza USING GIST (konum);
-- 5 km içindeki mağazalar (geography, metre):
SELECT ad FROM magaza
WHERE ST_DWithin(konum,
ST_SetSRID(ST_MakePoint(32.85, 39.92), 4326)::geography,
5000);PostGIS, PostgreSQL'i tam donanımlı bir coğrafi veritabanına dönüştürür. geometry (düzlemsel) ve geography (küresel) tipleri, ST_Distance/ST_DWithin/ST_Intersects/ST_Contains gibi yüzlerce ST_ fonksiyonu sağlar. GiST/SP-GiST index'i spatial sorguları hızlandırır.
MySQL
-- Spatial (SRID'li) sütun ve SPATIAL indeks:
ALTER TABLE magaza MODIFY konum POINT NOT NULL SRID 4326;
ALTER TABLE magaza ADD SPATIAL INDEX (konum);
-- Mesafe hesapla (metre, geography):
SELECT ad,
ST_Distance(konum,
ST_SRID(POINT(32.85, 39.92), 4326)) AS mesafe
FROM magaza
ORDER BY mesafe LIMIT 10;MySQL (5.7+) OGC uyumlu spatial veri tiplerini (POINT, POLYGON vb.) ve ST_ fonksiyonlarını destekler. SPATIAL index (R-tree) yalnız InnoDB/MyISAM'de ve NOT NULL sütunlarda kurulur; optimizer'ın kullanması için sütun SRID özniteliğiyle (SRID 4326) tanımlanmalıdır. SRID 4326 ile ST_Distance metre cinsinden jeodezik mesafe döndürür. POINT(x, y) + ST_SRID'de x boylam, y enlemdir; WKT girdisinde (ST_GeomFromText) SRID 4326 için sıra enlem-boylamdır.
SQL Server
-- geography tipi ve spatial indeks:
CREATE SPATIAL INDEX konum_sidx ON dbo.magaza(konum);
-- 5 km içindeki mağazalar (STDistance metre döndürür):
SELECT ad FROM dbo.magaza
WHERE konum.STDistance(
geography::Point(39.92, 32.85, 4326)) <= 5000;SQL Server iki spatial tip sunar: geography (küresel, enlem/boylam) ve geometry (düzlemsel). STDistance, STIntersects, STContains gibi metotlar sorguları çözer. Spatial index (grid tabanlı) performansı artırır. geography::Point(enlem, boylam, SRID) sırasına dikkat edilmelidir.
MongoDB
// 2dsphere indeksi (GeoJSON için):
db.magaza.createIndex({ konum: "2dsphere" })
// Belirli noktaya en yakın mağazalar ($near):
db.magaza.find({
konum: {
$near: {
$geometry: { type: "Point", coordinates: [32.85, 39.92] },
$maxDistance: 5000
}
}
})MongoDB coğrafi veriyi GeoJSON biçiminde saklar ve 2dsphere index'iyle küresel sorgular yapar. $near (mesafeye göre sıralı), $geoWithin (alan içinde), $geoIntersects operatörleri desteklenir. Koordinatlar [boylam, enlem] sırasındadır; $maxDistance metre cinsindendir.
Redis
# Yerleşik geospatial komutlar (sorted set üzerine kurulu):
GEOADD magazalar 32.85 39.92 "kizilay"
GEOADD magazalar 32.86 39.93 "cankaya"
# Bir noktanın 5 km çevresini ara:
GEOSEARCH magazalar FROMLONLAT 32.85 39.92
BYRADIUS 5 km ASCRedis coğrafi konumları GEOADD ile sorted set içinde saklar (boylam enlem üye). GEOSEARCH (Redis 6.2+, eski GEORADIUS yerine) yarıçap veya kutu içindeki üyeleri mesafeye göre sıralı döndürür. GEODIST iki nokta arası mesafeyi verir. Çekirdek özelliktir, modül gerekmez.
Elasticsearch
# Alanı geo_point olarak eşle:
PUT magaza
{ "mappings": { "properties": { "konum": { "type": "geo_point" } } } }
# 5 km çevresini sorgula:
GET magaza/_search
{ "query": { "geo_distance": {
"distance": "5km",
"konum": { "lat": 39.92, "lon": 32.85 } } } }Elasticsearch geo_point (nokta) ve geo_shape (çokgen/çizgi) alan tiplerini destekler. geo_distance (yarıçap), geo_bounding_box (kutu), geo_polygon sorgularıyla filtreleme; geo_distance ile sıralama ve geohash_grid/geotile_grid ile toplama yapılır. Koordinat lat/lon veya [lon, lat] dizisi olarak verilir.