Data Spasial - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Data Spasial

Amazon Neptunus sekarang mendukung kueri spasial, memungkinkan Anda untuk menyimpan dan menganalisis data geometris dalam grafik Anda. Meskipun umumnya digunakan untuk lokasi geografis (seperti koordinat pada peta), fitur spasial bekerja dengan data dua dimensi di mana posisi dan kedekatan penting. Gunakan fitur ini untuk menjawab pertanyaan seperti “Toko mana yang berada dalam jarak 5 mil dari pelanggan ini?” , “Temukan semua rute pengiriman yang bersinggungan dengan area layanan ini,” atau “Komponen mana dalam denah lantai ini yang tumpang tindih dengan zona HVAC?” Neptunus mengimplementasikan dukungan spasial menggunakan fungsi Tipe Spasial standar industri yang bekerja dengan titik, poligon, dan bentuk geometris lainnya. Anda dapat menyimpan data spasial sebagai properti pada node dan tepi, kemudian menggunakan fungsi spasial untuk menghitung jarak, memeriksa apakah titik berada dalam batas, atau menemukan wilayah yang tumpang tindih, semua dalam kueri OpenCypher Anda.

Kasus penggunaan umum:

  • Aplikasi geografis: Rekomendasi berbasis lokasi, geofencing, perencanaan rute, dan analisis wilayah

  • Manajemen fasilitas dan ruang: Tata letak denah lantai, penempatan peralatan, dan cakupan zona

  • Topologi jaringan: Pemetaan infrastruktur fisik, area cakupan, dan batas layanan

  • Desain dan CAD: Pemosisian komponen, deteksi tabrakan, dan hubungan spasial dalam desain 2D

  • Pengembangan game: Penentuan posisi karakter, deteksi tabrakan, dan perhitungan area-of-effect

Implementasi Jenis Spasial di Amazon Neptunus mengikuti arahan ISO/IEC 13249-3:2016, seperti database lainnya. Yang Fungsi Spasial tersedia dalam bahasa query OpenCypher.

Sistem koordinat

Neptunus memiliki satu Spatial Reference Identifier (SRID) untuk seluruh database. Homogenitas sistem koordinat mengurangi kesalahan pengguna dalam query dan meningkatkan kinerja database. Rilis pertama (1.4.7.0) mendukung sistem koordinat Cartesian, juga disebut sebagai SRID 0.

Implementasi Neptunus dari SRID 0 kompatibel dengan nilai bujur dan lintang. Gunakan ST_DistanceSpheroid untuk menghitung jarak berdasarkan WGS84 /SRID 4326.

Implementasi saat ini mendukung penyimpanan koordinat 3 dimensi. Fungsi Spasial saat ini hanya mendukung penggunaan koordinat sumbu x dan y (2 dimensi). Koordinat sumbu z saat ini tidak didukung oleh Fungsi Spasial yang tersedia.

Menyimpan data lokasi

Menyimpan data lokasi pada node dan tepi menggunakan tipe properti Geometry. Buat nilai Geometri dari format Teks Terkenal (WKT), cara standar untuk mewakili bentuk geografis sebagai teks. Misalnya, untuk menyimpan lokasi titik:

CREATE (n:airport {code: 'ATL', location: ST_GeomFromText('POINT (-84.4281 33.6367)')})

Saat bekerja dengan koordinat geografis, argumen pertama (x) mewakili garis bujur dan argumen kedua (y) mewakili garis lintang. Ini mengikuti urutan koordinat standar yang digunakan dalam database spasial dan standar ISO 19125.

catatan

Neptunus sekarang mendukung tipe data baru yang disebut “Geometri”. Properti Geometri dari node atau edge dapat dibuat dari string WKT menggunakan fungsi. ST_GeomFromText

Neptunus akan secara otomatis menyimpan data Poin dalam indeks spasial khusus untuk meningkatkan kinerja fungsi Tipe Spasial. Misalnya, ST_Contains digunakan untuk menemukan titik-titik dalam poligon dipercepat oleh indeks spasial khusus.

Halaman Wikipedia untuk representasi Teks Terkenal dari geometri

Memuat data spasial secara massal

Saat memuat data secara massal, tentukan jenis Geometri di header CSV Anda. Neptunus akan mengurai string WKT dan membuat properti Geometri yang sesuai:

:ID,:LABEL,code:String,city:String,location:Geometry 21,airport,ATL,Atlanta,POINT (-84.42810059 33.63669968) 32,airport,ANC,Anchorage,POINT (-149.9960022 61.17440033) 43,airport,AUS,Austin,POINT (-97.66989899 30.19449997)

Untuk detail format CSV lengkap, lihat Format beban massal OpenCypher.

Meminta data spasial

Contoh kueri berikut menggunakan dataset rute udara untuk menunjukkan cara menggunakan Fungsi Spasial di Neptunus.

Jika data Anda memiliki properti lintang dan bujur yang terpisah alih-alih properti Geometri, Anda dapat mengonversinya menjadi titik pada waktu kueri. Temukan 10 bandara terdekat ke lokasi tertentu:

MATCH (a:airport) WITH a, ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')') AS airportLocation WITH a, airportLocation, ST_Distance(ST_GeomFromText('POINT (-84.4281 33.6367)'), airportLocation) AS distance WHERE distance IS NOT NULL RETURN a.code, a.city, distance ORDER BY distance ASC LIMIT 10

Jika Anda sudah memiliki lokasi yang disimpanST_Point, Anda dapat menggunakan nilai lokasi tersebut secara langsung:

  1. Mengatur properti

    MATCH (a:airport) SET a.location = ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')')
  2. Kueri menggunakan ST_Distance:

    MATCH (a:airport) WHERE a.location IS NOT NULL WITH a, ST_Distance(ST_GeomFromText('POINT (-84.4281 33.6367)'), a.location) AS distance RETURN a.code, a.city, distance ORDER BY distance ASC LIMIT 10

Menggunakan driver Bolt

Sebagian besar metode kueri mengembalikan nilai Geometri sebagai string WKT, yang dapat dibaca manusia. Jika Anda menggunakan driver Bolt, nilai Geometri dikembalikan dalam format WKB (Biner Terkenal) untuk efisiensi. Mengkonversi WKB ke objek Geometri dalam aplikasi Anda:

try (Session session = driver.session()) { Result result = session.run("MATCH (n:airport {code: 'ATL'}) RETURN n.location as geom"); Record record = result.single(); byte[] wkbBytes = record.get("geom").asByteArray(); // Convert WKB to Geometry object using JTS library WKBReader wkbReader = new WKBReader(); Geometry geom = wkbReader.read(wkbBytes); }