All Products
Search
Document Center

MaxCompute:Tipe data GEOGRAPHY

Last Updated:Aug 27, 2026

MaxCompute mendukung secara native tipe data GEOGRAPHY, yang merepresentasikan objek geografis seperti titik, garis, dan poligon pada permukaan Bumi. Tipe data ini memungkinkan Anda menyimpan, membuat, dan melakukan operasi pada data geospasial secara efisien. Tipe data GEOGRAPHY di MaxCompute menggunakan pustaka S2 Geometry.

Jenis geometri yang didukung

MaxCompute mendukung jenis geometri berikut:

Geometry type

Description

Point

Posisi pada permukaan Bumi yang didefinisikan oleh koordinat bujur dan lintang, dengan bujur ditentukan terlebih dahulu, diikuti oleh lintang. Contoh:
ST_GEOGFROMTEXT('POINT (10 20)')

LineString

Kurva satu dimensi yang terdiri dari serangkaian titik dan garis geodesik yang menghubungkannya. Contoh:
ST_GEOGFROMTEXT('LINESTRING (10 20, 30 50, 70 80)')

Polygon

Permukaan dua dimensi yang dijelaskan oleh satu atau lebih loop tertutup. Loop pertama menentukan batas luar (shell), dan loop berikutnya (jika ada) menentukan lubang di dalam poligon tersebut. Lubang menunjukkan area yang dikecualikan dalam poligon. Contoh:

-- Poligon hanya dengan batas luar tanpa lubang
ST_GEOGFROMTEXT('POLYGON ((0 0, 1 1, 1 0, 0 0))')

-- Poligon dengan satu lubang
ST_GEOGFROMTEXT('POLYGON ((-10 -10, 10 -10, 10 10, -10 10, -10 -10), (-5 -5, 5 -5, 5 5, -5 5, -5 -5))')

-- Lubang bersarang saat ini tidak didukung. Konstruksi berikut tidak valid:
ST_GEOGFROMTEXT('POLYGON ((-10 -10, 10 -10, 10 10, -10 10, -10 -10), (-5 -5, 5 -5, 5 5, -5 5, -5 -5), (-2 -2, 2 -2, 2 2, -2 2, -2 -2))')

MultiPoint

Kumpulan titik.
ST_GEOGFROMTEXT('MULTIPOINT(0 0, 1 1)')

MultiLineString

Kumpulan LineString.
ST_GEOGFROMTEXT('MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))')

MultiPolygon

Kumpulan Polygon.
ST_GEOGFROMTEXT('MULTIPOLYGON (((1 1, 1 3, 3 3, 3 1, 1 1)), ((4 3, 6 3, 6 1, 4 1, 4 3)))')

GeometryCollection

Kumpulan objek dengan berbagai jenis geometri.
ST_GEOGFROMTEXT('GEOMETRYCOLLECTION (MULTIPOINT ((0 0), (1 1)), POINT (3 4), LINESTRING (2 3, 3 4))')

  • Koordinat ditentukan sebagai (bujur, lintang) dalam satuan derajat, mengikuti sistem koordinat WGS84. Bujur harus berada dalam rentang [-180, 180], dan lintang harus berada dalam rentang [-90, 90].

  • Tipe data GEOGRAPHY MaxCompute menggunakan pustaka S2 Geometry. Berbeda dengan pustaka Geographic Information System (GIS) tradisional, S2 Geometry tidak menggunakan proyeksi peta planar seperti proyeksi Mercator. Sebaliknya, pustaka ini memperlakukan Bumi sebagai bola sempurna dan terlebih dahulu mengonversi koordinat lintang-bujur menjadi koordinat Kartesius tiga dimensi (x, y, z) pada bola tersebut. Pendekatan ini menghindari peningkatan kesalahan komputasi yang dapat disebabkan oleh proyeksi planar, terutama di dekat kutub.

  • Pustaka S2 Geometry menggunakan tipe DOUBLE untuk menggambarkan koordinat objek geografis. Saat mengonversi data masukan menjadi objek S2, mungkin terjadi kehilangan presisi yang sangat kecil, sehingga menghasilkan perbedaan yang sangat minim antara data masukan dan keluaran.

Batasan

  • Batasan versi klien: Untuk mengkueri data GEOGRAPHY, Anda harus menggunakan odpscmd versi 0.56.0 atau lebih baru. Pengaturan use_instance_tunnel=true tidak didukung.

  • Batasan tipe data: Tipe data GEOGRAPHY tidak didukung dalam sistem tipe data 1.0. Anda harus mengaktifkan sistem tipe data 2.0 di tingkat proyek atau sesi dengan mengatur odps.sql.type.system.odps2=true;.

  • Tipe data GEOGRAPHY tidak mendukung operasi perbandingan. Oleh karena itu, Anda tidak dapat menggunakannya dalam klausa SELECT DISTINCT, GROUP BY, atau ORDER BY, maupun sebagai kondisi equi-join dalam klausa JOIN.

  • Tipe data GEOGRAPHY tidak mendukung dimensi Z (elevasi) atau M (measure) untuk objek geografis.

  • Tipe data GEOGRAPHY tidak mendukung pembuatan objek geografis yang lebih besar dari satu belahan bumi. Misalnya, pernyataan SQL berikut mencoba membuat objek geografis yang mencakup hampir seluruh dunia, dari bujur 179°B hingga 179°T. Namun, hasil sebenarnya adalah objek yang lebih kecil dari satu belahan bumi dengan bujur yang membentang ke arah timur dari 179°T, melintasi meridian 180°, dan berakhir di 179°B.

    SELECT ST_GEOGFROMTEXT(
      'POLYGON ((-179 -89, 179 -89, 179 89, -179 89, -179 -89))'
    );
    
    -- Result:
    +------+
    | _c0  |
    +------+
    | POLYGON ((-179 89, 179 89, 179 -89, -179 -89, -179 89)) |
    +------+

Membuat dan menggunakan data GEOGRAPHY

Anda dapat menggunakan tipe data GEOGRAPHY sebagai tipe bidang saat membuat tabel:

SET odps.sql.type.system.odps2=true;

CREATE TABLE spatial_points (
    id BIGINT,
    name STRING,
    location GEOGRAPHY,
    region GEOGRAPHY
);

Anda dapat menggunakan fungsi bawaan, seperti ST_GEOGPOINT, ST_GEOGFROMTEXT, ST_GEOGFROMWKB, ST_MAKELINE, dan ST_MAKEPOLYGON, untuk membuat objek geografis. Untuk informasi lebih lanjut, lihat Geography function overview.

-- Masukkan data: Buat objek GEOGRAPHY menggunakan fungsi geografi.
INSERT INTO spatial_points VALUES
  (1, 'Beijing Center', ST_GEOGPOINT(116.4074, 39.9042),
                ST_GEOGFROMTEXT('POLYGON((116.3 39.8, 116.5 39.8, 116.5 40.0, 116.3 40.0, 116.3 39.8))')),
  (2, 'The Bund', ST_GEOGPOINT(121.4894, 31.2403),
                ST_MAKEPOLYGON(ST_MAKELINE(ARRAY(
                  ST_GEOGPOINT(121.4, 31.2),
                  ST_GEOGPOINT(121.5, 31.2),
                  ST_GEOGPOINT(121.5, 31.3),
                  ST_GEOGPOINT(121.4, 31.3),
                  ST_GEOGPOINT(121.4, 31.2)
                ))));

-- Kueri data yang telah dimasukkan.
SELECT * FROM spatial_points;
-- Result:
+------------+--------------+--------------------------+--------+
| id         | name         | location                 | region |
+------------+--------------+--------------------------+--------+
| 1          | Beijing Center | POINT (116.4074 39.9042) | POLYGON ((116.3 39.8, 116.5 39.8, 116.5 40, 116.3 40, 116.3 39.8)) |
| 2          | The Bund       | POINT (121.4894 31.2403) | POLYGON ((121.4 31.2, 121.5 31.2, 121.5 31.3, 121.4 31.3, 121.4 31.2)) |
+------------+--------------+--------------------------+--------+

Fungsi geografi

MaxCompute menyediakan serangkaian fungsi geografi dengan awalan ST_ untuk membuat, mengonversi, dan menganalisis data GEOGRAPHY. Anda dapat menggunakan fungsi-fungsi ini untuk membuat objek geografis seperti titik, garis, dan poligon dari koordinat bujur dan lintang atau dari teks WKT/WKB. Anda juga dapat mengekstrak properti seperti koordinat dan kotak pembatas, menentukan hubungan spasial seperti ketercakupan, irisan, dan cakupan, serta menghitung jarak antar objek geografis.

Untuk informasi lebih lanjut, lihat Geography function overview.

Fungsi geografi berikut didukung:

Category

Function

Description

Construction and parsing


ST_GEOGPOINT

Membuat objek geografis titik dari bujur dan lintang yang ditentukan.

ST_MAKELINE

Membuat objek geografis garis dari titik ujung yang ditentukan.

ST_MAKEPOLYGON

Membuat objek geografis poligon dari batas luar (shell) yang ditentukan dan nol atau lebih lubang.

ST_GEOGFROMTEXT

Mengonversi string dalam format WKT menjadi objek GEOGRAPHY.

ST_GEOGFROMWKB

Mengonversi nilai BINARY dalam format WKB menjadi objek GEOGRAPHY.

Formatting

ST_ASBINARY

Mengonversi nilai GEOGRAPHY menjadi nilai BINARY dalam format WKB.

ST_ASTEXT

Mengonversi nilai GEOGRAPHY menjadi nilai STRING dalam format WKT.

Property access

ST_BOUNDINGBOX

Mengembalikan kotak pembatas dari nilai GEOGRAPHY.

ST_X

Mengembalikan bujur dari objek geografis titik.

ST_Y

Mengembalikan lintang dari objek geografis titik.

Spatial operations


ST_CONTAINS

Memeriksa apakah objek geografis pertama mencakup objek kedua.

ST_COVERS

Memeriksa apakah objek geografis pertama menutupi objek kedua (semua titik objek kedua berada pada batas atau di dalam objek pertama).

ST_INTERSECTS

Memeriksa apakah dua objek geografis saling berpotongan (memiliki setidaknya satu titik yang sama).

ST_WITHIN

Memeriksa apakah objek geografis pertama berada di dalam objek kedua.

ST_DWITHIN

Memeriksa apakah jarak terpendek antara dua objek geografis kurang dari atau sama dengan jarak yang ditentukan.

ST_DISTANCE

Menghitung jarak terpendek antara dua objek geografis, dalam satuan meter.

Spatial join

Spatial join adalah operasi join non-equi antara dua tabel yang berisi data GEOGRAPHY. Kondisi join menggunakan fungsi predikat spasial (seperti ST_CONTAINS atau ST_INTERSECTS) yang mengevaluasi hubungan spasial antara objek geografis.

  • Kasus penggunaan umum adalah menggunakan fungsi geografi sebagai kondisi JOIN untuk mengevaluasi hubungan spasial antara kolom GEOGRAPHY.

  • Kasus penggunaan khas termasuk menentukan apakah suatu point of interest (POI) berada dalam area tertentu atau menganalisis irisan lintasan dengan geofence.

MaxCompute mengimplementasikan spatial join berdasarkan tabel broadcast. Anda harus menggunakan MAPJOIN HINT untuk menentukan tabel mana yang akan dibroadcast.

Untuk informasi lebih lanjut, lihat Spatial JOIN.