TairGIS, R-tree dizinleri üzerine kurulmuş bir GIS veri yapısıdır. İyi bilinen metin (WKT) formatını kullanarak noktaları, çizgi dizilerini ve çokgenleri depolamanıza ve sorgulamanıza olanak tanır. Yalnızca nokta sorgularını işlemek için GeoHash ve Sıralı Küme kullanan yerel Redis GEO komutlarının aksine TairGIS; tüm üç geometri türü için uzamsal ilişki sorgularını (içerir, içinde, kesişir) ve yarıçap tabanlı yakınlık aramasını destekler.
Modül açık kaynaklıdır. Daha fazla bilgi için bkz. TairGIS.
Temel kavramlar
Uzamsal ilişki sorguları: içerir, içinde ve kesişir
Bu üç komut, sağladığınız bir geometri ile bir alanda saklanan şekiller arasındaki farklı yönsel ilişkileri sorgular. Ayrım önemlidir çünkü GIS.CONTAINS ve GIS.WITHIN benzer görünür ancak zıt yönlerde çalışır:
GIS.CONTAINS — girdinizi içeren saklanan şekilleri bulur. Bir noktanız (örneğin kullanıcının GPS konumu) olduğunda ve bunun hangi saklanan bölgeleri kapsadığını bilmek istediğinizde bu komutu kullanın. Örneğin: "Bu adres hangi teslimat bölgelerinin içinde kalıyor?"
GIS.WITHIN — girdinizin içinde kalan saklanan şekilleri bulur. Büyük bir sınırlayıcı şekliniz olduğunda ve hangi saklanan şekillerin tamamen bunun içinde kaldığını bilmek istediğinizde bu komutu kullanın. Örneğin: "Bu ilçe sınırları içinde tamamen kalan otoparklar hangileridir?"
GIS.INTERSECTS — girdinizle herhangi bir koordinatı paylaşan saklanan şekilleri bulur. Kısmi örtüşmenin yeterli olduğu durumlarda bu komutu kullanın. Örneğin: "Bu inşaat alanından geçen yollar hangileridir?"
WKT geometri türleri
TairGIS geometrileri tanımlamak için iyi bilinen metni (WKT) kullanır. Üç türün tümü TYPE (coordinates) formatını izler:
| Type | WKT example | Constraint |
|---|---|---|
| POINT | 'POINT (120.086631 30.138141)' |
Önce boylam sonra enlem |
| LINESTRING | 'LINESTRING (30 10, 40 40)' |
En az iki koordinat çifti |
| POLYGON | 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' |
Üç veya daha fazla koordinat çifti; ilk ve son eşleşmelidir |
Geçerli boylam aralığı: -180 ile 180. Geçerli enlem aralığı: -90 ile 90.
MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRY ve COLLECTION türleri desteklenmez.
area parametresi
Her TairGIS komutu ilk parametre olarak bir area bağımsız değişkenini alır. Alan, ilgili geometrileri gruplayan mantıksal bir kapsayıcıdır (bir Redis anahtarı). Aynı alana eklediğiniz tüm şekiller birlikte sorgulanabilir.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
Bir Tair DRAM tabanlı örnek
Daha fazla özellik ve daha yüksek kararlılık için örneğinizi en son küçük sürüme güncelleyin. Daha fazla bilgi için bkz. Örneğin küçük sürümünü güncelleme . Küme veya okuma/yazma ayrıştırma örnekleri için tüm komutların beklendiği gibi çalışmasını sağlamak üzere proxy düğümlerini de en son küçük sürüme güncelleyin.
Kullanım notları
TairGIS verileri Tair örneğinde depolanır.
Desteklenen komutlar
| Komut | Sözdizimi | Açıklama |
|---|---|---|
| GIS.ADD | GIS.ADD area polygonName polygonWkt [polygonName polygonWkt ...] | Bir alana bir veya daha fazla WKT ile tanımlanmış geometri ekler |
| GIS.GET | GIS.GET area polygonName | Adlandırılmış bir geometrinin WKT'sini alır |
| GIS.GETALL | GIS.GETALL area [WITHOUTWKT] | Bir alandaki tüm geometri adlarını ve isteğe bağlı olarak WKT'lerini alır |
| GIS.CONTAINS | GIS.CONTAINS area polygonWkt [WITHOUTWKT] | Girdi geometrisini içeren saklanan geometrileri döndürür |
| GIS.WITHIN | GIS.WITHIN area polygonWkt [WITHOUTWKT] | Girdi geometrisinin içinde kalan saklanan geometrileri döndürür |
| GIS.INTERSECTS | GIS.INTERSECTS area polygonWkt | Girdi geometrisiyle kesişen saklanan geometrileri döndürür |
| GIS.SEARCH | GIS.SEARCH area [RADIUS lon lat dist M|KM|FT|MI] [MEMBER field dist M|KM|FT|MI] [GEOM geom] [COUNT count] [ASC|DESC] [WITHDIST] [WITHOUTWKT] | Bir yarıçap veya çokgen sınırı içindeki noktaları sorgular |
| GIS.DEL | GIS.DEL area polygonName | Bir alandan adlandırılmış bir geometriyi siler |
| DEL | DEL key [key ...] | Bir veya daha fazla TairGIS anahtarını siler (yerel Redis komutu) |
Komut sözdizimi kuralları:
UPPERCASE: komut anahtar sözcüğü*
Italics*: değişken[options]: isteğe bağlı parametre; köşeli parantez içermeyen parametreler gereklidirA|B: birbirini dışlayan — yalnızca birini belirtin...: önceki parametre tekrarlanabilir
GIS.ADD
Bir alana bir veya daha fazla WKT ile tanımlanmış geometri ekler.
Time complexity| Item | Details |
|---|---|
| Syntax | GIS.ADD area polygonName polygonWkt [polygonName polygonWkt ...] |
| O(log n) |
Parametreler
| Parameter | Description |
|---|---|
area |
İlgili geometrileri gruplayan alan (anahtar) |
polygonName |
Geometrinin adı |
polygonWkt |
WKT formatındaki geometri. Desteklenen türler: POINT, LINESTRING, POLYGON |
WKT (well-known text), vektör geometri nesnelerini, uzamsal referans sistemlerini ve uzamsal referans sistemleri arasındaki dönüşümleri temsil etmek için kullanılan standart bir metin işaretleme dilidir.
Dönüş değeri
Başarılı: eklenen veya güncellenen geometri sayısı
Başarısız: bir hata mesajı
Örnek
GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
Çıktı:
(integer) 1
GIS.GET
Bir alandaki adlandırılmış bir geometrinin WKT'sini alır.
| Item | Details |
|---|---|
| Syntax | GIS.GET area polygonName |
| Time complexity | O(1) |
Parametreler
| Parameter | Description |
|---|---|
area |
İlgili geometrileri gruplayan alan (anahtar) |
polygonName |
Alınacak geometrinin adı |
Dönüş değeri
Başarılı: geometrinin WKT temsili
Bulunamadı (alan veya geometri mevcut değil):
nilBaşarısız: bir hata mesajı
Örnek
Ön koşullar: GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' komutunu çalıştırın.
GIS.GET hangzhou campus
Çıktı:
'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'
GIS.GETALL
Bir alandaki tüm geometri adlarını varsayılan olarak WKT'leriyle birlikte alır.
| Item | Details |
|---|---|
| Syntax | GIS.GETALL area [WITHOUTWKT] |
| Time complexity | O(n) |
Parametreler
| Parameter | Description |
|---|---|
area |
İlgili geometrileri gruplayan alan (anahtar) |
WITHOUTWKT |
(İsteğe bağlı) Belirtildiğinde yalnızca geometri adlarını döndürür, WKT'lerini değil |
Dönüş değeri
Başarılı: geometri adları ve WKT (veya
WITHOUTWKTbelirtilirse yalnızca adlar)Bulunamadı (alan mevcut değil):
nilBaşarısız: bir hata mesajı
Örnek
Ön koşullar: GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' komutunu çalıştırın.
GIS.GETALL hangzhou
Çıktı:
1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.CONTAINS
Bir alanda saklanan ve girdi geometrisini içeren geometrileri döndürür.
Bir geometriniz (örneğin bir koordinat noktası) olduğunda ve bunun hangi saklanan bölgeleri kapsadığını bilmek istediğinizde GIS.CONTAINS komutunu kullanın.
| Item | Details |
|---|---|
| Syntax | GIS.CONTAINS area polygonWkt [WITHOUTWKT] |
| Time complexity | Optimal: O(log² n); worst case: O(log n) |
Parametreler
| Parameter | Description |
|---|---|
area |
İlgili geometrileri gruplayan alan (anahtar) |
polygonWkt |
WKT formatındaki girdi geometrisi. Desteklenen türler: POINT, LINESTRING, POLYGON |
WITHOUTWKT |
(İsteğe bağlı) Belirtildiğinde yalnızca geometri adlarını döndürür, WKT'lerini değil |
Dönüş değeri
Başarılı: girdiyi içeren geometrilerin sayısı ve WKT'si
Bulunamadı (alan mevcut değil):
empty list or setBaşarısız: bir hata mesajı
Örnek
Ön koşullar: GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' komutunu çalıştırın.
Aşağıdaki örnek (30, 11) noktasını içeren saklanan çokgenleri kontrol eder:
GIS.CONTAINS hangzhou 'POINT (30 11)'
Çıktı:
1) "1"
2) 1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.WITHIN
Bir alanda saklanan ve girdi geometrisinin tamamen içinde kalan geometrileri döndürür.
Bir sınırınız (örneğin bir ilçe çokgeni) olduğunda ve hangi saklanan şekillerin bunun tamamen içinde kaldığını bilmek istediğinizde GIS.WITHIN komutunu kullanın.
| Item | Details |
|---|---|
| Syntax | GIS.WITHIN area polygonWkt [WITHOUTWKT] |
| Time complexity | Optimal: O(log² n); worst case: O(log n) |
Parametreler
| Parameter | Description |
|---|---|
area |
İlgili geometrileri gruplayan alan (anahtar) |
polygonWkt |
WKT formatındaki girdi geometrisi. Desteklenen türler: POINT, LINESTRING, POLYGON |
WITHOUTWKT |
(İsteğe bağlı) Belirtildiğinde yalnızca geometri adlarını döndürür, WKT'lerini değil |
MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRY ve COLLECTION türleri desteklenmez.
Dönüş değeri
Başarılı: girdinin içinde kalan geometrilerin sayısı ve WKT'si
Bulunamadı (alan mevcut değil):
empty list or setBaşarısız: bir hata mesajı
Örnek
Ön koşullar: GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' komutunu çalıştırın.
Aşağıdaki örnek daha büyük sınırlayıcı çokgenin içinde kalan saklanan çokgenleri kontrol eder:
GIS.WITHIN hangzhou 'POLYGON ((30 5, 50 50, 20 50, 5 20, 30 5))'
Çıktı:
1) "1"
2) 1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.INTERSECTS
Bir alanda saklanan ve girdi geometrisiyle herhangi bir koordinatı paylaşan geometrileri döndürür.
Kısmi örtüşmenin yeterli olduğu durumlarda (örneğin bir inşaat alanından geçen tüm yolları bulmak için) GIS.INTERSECTS komutunu kullanın.
| Item | Details |
|---|---|
| Syntax | GIS.INTERSECTS area polygonWkt |
| Time complexity | Optimal: O(log² n); worst case: O(log n) |
Parametreler
| Parameter | Description |
|---|---|
area |
İlgili geometrileri gruplayan alan (anahtar) |
polygonWkt |
WKT formatındaki girdi geometrisi. Desteklenen türler: POINT, LINESTRING, POLYGON |
WITHOUTWKT |
(İsteğe bağlı) Belirtildiğinde yalnızca geometri adlarını döndürür, WKT'lerini değil |
Dönüş değeri
Başarılı: girdiyle kesişen geometrilerin sayısı ve WKT'si
Bulunamadı (alan mevcut değil):
empty list or setBaşarısız: bir hata mesajı
Örnek
Ön koşullar: GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' komutunu çalıştırın.
Aşağıdaki örnek (30, 10) ile (40, 40) arasındaki çizgi dizisiyle kesişen saklanan çokgenleri kontrol eder:
GIS.INTERSECTS hangzhou 'LINESTRING (30 10, 40 40)'
Çıktı:
1) "1"
2) 1) "campus"
2) "POLYGON((30 10,40 40,20 40,10 20,30 10))"
GIS.SEARCH
Belirtilen bir yarıçap veya çokgen sınırı içinde kalan bir alandaki nokta geometrilerini sorgular. Bu komut, yerel Redis GEORADIUS komutunun TairGIS eşdeğeridir.
Arama sınırını tanımlamak için RADIUS, MEMBER veya GEOM seçeneklerinden tam olarak birini belirtin.
| Öğe | Ayrıntılar |
|---|---|
| Syntax | GIS.SEARCH area [RADIUS lon lat dist M|KM|FT|MI] [MEMBER field dist M|KM|FT|MI] [GEOM geom] [COUNT count] [ASC|DESC] [WITHDIST] [WITHOUTWKT] |
| Time complexity | Optimal: O(log² n); worst case: O(log n) |
Arama sınırı seçenekleri (tam olarak birini belirtin)
| Option | Description | Example |
|---|---|---|
RADIUS lon lat dist unit |
Verilen boylam ve enlemin dist mesafesi içinde arama yapar. Birimler: M (metre), KM (kilometre), FT (fit), MI (mil) |
RADIUS 15 37 200 KM |
MEMBER field dist unit |
Saklanan bir noktayı merkez olarak kullanır ve onun dist mesafesi içinde arama yapar |
MEMBER Agrigento 100 KM |
GEOM geom |
Bir WKT dizesiyle tanımlanan çokgen içinde arama yapar | GEOM 'POLYGON((10 30,20 30,20 40,10 40))' |
Ek seçenekler
| Option | Description |
|---|---|
COUNT count |
Döndürülen sonuç sayısını sınırlar. Örnek: COUNT 3 |
ASC |
Sonuçları mesafeye göre sıralar, en yakından başlar |
DESC |
Sonuçları mesafeye göre sıralar, en uzakтан başlar |
WITHDIST |
Her sonuç noktası ile belirtilen merkez noktası arasındaki mesafeyi döndürür |
WITHOUTWKT |
Yalnızca geometri adlarını döndürür, WKT'lerini değil |
Dönüş değeri
Başarılı: eşleşen noktaların sayısı ve WKT'si
Bulunamadı (alan mevcut değil):
empty list or setBaşarısız: bir hata mesajı
Örnek
Ön koşullar: GIS.ADD Sicily "Palermo" "POINT (13.361389 38.115556)" "Catania" "POINT(15.087269 37.502669)" komutunu çalıştırın.
Aşağıdaki örnek Sicily alanında (15, 37) noktasının 200 km yarıçapı içinde kalan ve mesafeye göre sıralanan tüm noktaları bulur:
GIS.SEARCH Sicily RADIUS 15 37 200 km WITHDIST ASC
Çıktı:
1) (integer) 2
2) 1) "Catania"
2) "POINT(15.087269 37.502669)"
3) "56.4413"
4) "Palermo"
5) "POINT(13.361389 38.115556)"
6) "190.4424"
GIS.DEL
Bir alandan adlandırılmış bir geometriyi siler.
| Item | Details |
|---|---|
| Syntax | GIS.DEL area polygonName |
| Time complexity | O(log n) |
Parametreler
| Parameter | Description |
|---|---|
area |
İlgili geometrileri gruplayan alan (anahtar) |
polygonName |
Silinecek geometrinin adı |
Dönüş değeri
Başarılı:
OKBulunamadı (alan veya geometri mevcut değil):
nilBaşarısız: bir hata mesajı
Örnek
Ön koşullar: GIS.ADD hangzhou campus 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))' komutunu çalıştırın.
GIS.DEL hangzhou campus
Çıktı:
OK