Trajectory SQL, ApsaraDB RDS for PostgreSQL için geliştirilmiş bir GanosBase uzantısıdır. Nesnelerin uzay ve zaman içindeki hareketini modeller ve sorgular. Bu konu, zamansal-mekansal sorgular yazmaya başlamadan önce bilmeniz gereken temel veri türlerini ve kavramları tanıtır.
Trajectory nesneleri
Bir trajectory (hareket izi), bir nesnenin tam hareket kaydını temsil eder; nesnenin nerede olduğunu, ne zaman orada bulunduğunu ve her an neler gerçekleştiğini içerir. Trajectory SQL bu kaydı aşağıdaki bileşenlere ayırır:
| Kavram | Açıklama |
|---|---|
| Trajectory Point | Belirli bir anda hareket halindeki bir nesnenin anlık görüntüsüdür. Konumu (2B veya 3B koordinatlar) ve hız ya da yakıt seviyesi gibi herhangi bir sayıda nitelik alanını içerir. |
| Trajectory Object | Zamanı, mekanı, nitelikleri ve olayları birleştiren, hareket halindeki bir nesnenin eksiksiz yüksek boyutlu kaydıdır. |
| Trajectory Timeline | Bir trajectory içindeki zaman damgalarının sıralı dizisidir. Zaman damgaları ardışık olmalıdır. |
| Trajectory Spatial | Bir trajectory yolunun mekansal geometrisidir; genellikle bir LineString olarak temsil edilir. |
| Trajectory Leaf | Hareket halindeki bir nesnenin tek bir zaman noktasındaki mekansal konumudur. Bir Trajectory Point'in konumuna eşdeğerdir. |
| Trajectory Attributes | Trajectory boyunca her nokta için kaydedilen nitelik verileridir (hız ve yön gibi). Her niteliğin her Trajectory Point için bir değeri vardır. |
| Trajectory Attribute Field | Trajectory içindeki adlandırılmış bir nitelik sütunudur (örneğin, speed). Alan, Trajectory Point sayısı kadar değere sahiptir. |
| Trajectory Field Value | Belirli bir Trajectory Attribute Field'ın belirli bir zaman noktasındaki değeridir. |
| Trajectory Events | Trajectory boyunca gerçekleşen ayrık olaylardır. Örneğin, bir araç rotasında yakıt doldurma molası, arıza veya kapı kilitleme olayı. Her olay bir olay türü kimliği ve bir zaman damgası kaydeder. |
Örnek: Bir teslimat aracının trajectory'si düzenli aralıklarla kaydedilen Trajectory Point'ler içerir. Her Trajectory Point aracın GPS koordinatlarını (Trajectory Leaf) saklarken; speed_kmh ve engine_temp gibi Trajectory Attribute Field'lar her noktadaki sensör okumalarını kaydeder. Araç yakıt almak için durduğunda bu durak bir Trajectory Event olarak yakalanır.
Aşağıdaki şekil, hareket halindeki bir nesnenin trajectory'sini gösterir.

BoxNDF nesneleri
Ham trajectory verileri üzerinde yapılan zamansal-mekansal hesaplamalar maliyetlidir. BoxNDF veri türü, arama alanını hassas trajectory işlemlerini uygulamadan önce daraltarak sorguları hızlandıran çok boyutlu bir sınırlayıcı kutu olan hafif bir yaklaşım sunar.
Bir BoxNDF nesnesi, en fazla dört eksen üzerindeki minimum ve maksimum değerlerle tanımlanan bir küptür: x, y, z (mekan) ve t (zaman). Tüm eksenler gerekli değildir; bir BoxNDF yalnızca x ve y eksenlerini veya aynı anda tüm dört ekseni kapsayabilir.
BoxNDF kullanımı:
Sorgu bölgesi belirtin: Aramak istediğiniz mekansal ve zamansal sınırları tanımlayın.
Bir trajectory veya geometriyi yaklaşık olarak temsil edin: Hassas kesişim veya içerme kontrollerini çalıştırmadan önce hızlı bir ön filtre olarak sınırlayıcı kutuyu kullanın.
Aşağıdaki şekil, x ekseni, y ekseni ve t ekseni boyunca hareket eden bir nesnenin sınırlayıcı kutusunu gösterir.

Zaman değeri veri türleri
PostgreSQL üç adet zamanla ilgili veri türünü destekler. Kullanım durumunuza göre seçim yapın:
| Tür | Açıklama | Ne zaman kullanılır |
|---|---|---|
| TIMESTAMP | Saat dilimi bilgisi içermeyen bir zaman noktasıdır. | GanosBase trajectory modülünde bunu kullanın. Tüm trajectory zaman damgaları TIMESTAMP türünü kullanır. |
| TIMESTAMPTZ | Saat dilimi bilgisi içeren bir zaman noktasıdır. | Uygulamanız birden fazla saat dilimindeki verileri işlemek zorundaysa kullanın. |
| INTERVAL | Bir süredir (örneğin, 30 gün, 1 ay). | Bir TIMESTAMP değerine süre eklemek veya çıkarmak gibi tarih aritmetiği işlemleri için kullanın. |
GanosBase trajectory modülü, zaman damgalarını TIMESTAMP türü kullanarak depolar ve sorgular.
Bir TIMESTAMP değeri YYYY-MM-DD HH:MM:SS formatını kullanır; örneğin 2000-01-01 10:00:00.
Yaygın zaman değeri işlemleri:
-- Create a TIMESTAMP value.
SELECT '2000-01-01 10:00:00'::timestamp;
-- Convert a UNIX timestamp to TIMESTAMP. Requires the ganos_trajectory extension.
SELECT ST_UnixEpochToTS(1649765331);
-- Convert a TIMESTAMP to a UNIX timestamp.
SELECT ST_TsToUnixEpoch('2022-04-12 12:08:51');
-- Add an INTERVAL to a TIMESTAMP.
SELECT '2000-01-01 10:00:00'::timestamp + '30 day'::interval;
-- Subtract an INTERVAL from a TIMESTAMP.
SELECT '2000-01-01 10:00:00'::timestamp - '1 month'::interval;
Geometri türleri
GanosBase, hem 2B hem de 3B uzayda noktaları, çizgileri ve çokgenleri destekler. Geometri türü PostGIS arayüzleriyle uyumludur ve trajectory modülü, trajectory'ler ile geometri nesneleri arasındaki mekansal hesaplamaları destekler.
Temel geometri oluşturma
Aşağıdaki örneklerde geometri nesnelerini oluşturmak için Well-Known Text (WKT) notasyonu kullanılmaktadır:
-- Construct a point at (2, 4).
SELECT 'POINT(2 4)'::geometry;
-- Construct a line through (2,4), (0,0), and (5,3).
SELECT 'LINESTRING(2 4, 0 0, 5 3)';
-- Construct a triangular polygon with vertices at (3,3), (5,5), and (2,2).
SELECT 'POLYGON(3 3, 5 5, 2 2, 3 3)';
-- Approximate a circle: center (0,1), radius 3.
-- For circular range queries, use ST_DistanceWithin instead of ST_Buffer.
SELECT ST_Buffer('POINT(0 1)', 3);
Koordinatlar ve mekansal referans sistemleri
Verilerinizin kapsadığı alana göre koordinat yaklaşımınızı seçin:
Düz Kartezyen koordinatlar (SRID yok): Verileriniz yüzeyi düz kabul edebileceğiniz küçük, sınırlı bir alandaysa kullanın. Öklid mesafe hesaplamaları yerel ölçekli veriler için yeterince hızlı ve doğrudur.
SRID 4326 (WGS84) ile coğrafi koordinatlar: Verileriniz enlem ve boylam kullanıyorsa (örneğin, geniş alanları kapsayan GPS koordinatları) kullanın. Coğrafi koordinatlarda Öklid mesafesi anlamlı değildir; bunun yerine Dünya yüzeyi mesafe hesaplamalarını kullanın.
-- Construct a point at longitude 2, latitude 4, using WGS84.
SELECT 'SRID=4326;POINT(2 4)'::geometry;
-- Construct a line with WGS84 coordinates.
SELECT 'SRID=4326;LINESTRING(2 4, 0 0, 5 3)';
-- Construct a polygon with WGS84 coordinates.
SELECT 'SRID=4326;POLYGON(3 3, 5 5, 2 2, 3 3)';
-- Approximate a circle at (0,1) with radius 3, then assign SRID 4326.
SELECT ST_SetSRID(ST_Buffer('POINT(0 1)', 3), 4326);
Projekte koordinat sistemleri
Coğrafi koordinatlar (enlem ve boylam) konumları mesafe olarak değil, açı olarak ifade eder. Mesafeleri metre cinsinden ölçmek için ST_Transform kullanarak projekte koordinat sistemine (PCS) dönüştürün.
İki yaygın projeksiyon:
| Projeksiyon | EPSG kodu | Açıklama | En uygun kullanım |
|---|---|---|---|
| Spherical Mercator | EPSG:3857 | Metre cinsinden ölçüm yapar; web haritalama hizmetlerinde yaygın olarak kullanılır | Genel web harita uygulamaları |
| Gauss-Kruger | EPSG:4479 | Çin için daha doğru, metre tabanlı bir projeksiyondur | Çin'deki yüksek doğruluklu mesafe hesaplamaları |
-- Convert WGS84 coordinates to Spherical Mercator (meters).
SELECT ST_Transform('SRID=4326;POINT(114 39)'::geometry, 3857);
-- Convert WGS84 coordinates to Gauss-Kruger (meters, accurate for China).
SELECT ST_Transform('SRID=4326;POINT(114 39)'::geometry, 4479);