TUGAS SISTEM INFORMASI GEOGRAFIS
TUTORIAL SIG

NAMA KELOMPOK :
ANDRES FENDYNATA (2009-53-062)
ERIC AULIA AHMAD (2009-53-063)
MOKHAMAD FIRZA (2009-53-066)
SISTEM INFORMASI
UNIVERSITAS MURIA KUDUS
2010-2011
Daftar isi:
1. Persiapan untuk mulai
1.1. Apa yang Anda butuhkan untuk memulai
1.2. Database test-2.3.sqlite
1.3. Memulai dengan SQL dan SQLite
1.2. Database test-2.3.sqlite
1.3. Memulai dengan SQL dan SQLite
2. Memulai SpatiaLite
2.1. Cara memuat SpatiaLite
2.2. Sebuah pandangan pertama: mengakrabkan dengan GEOMETRI
2.3. GEOMETRI kelas
2.4. GEOMETRI AMPLOP
2.1. Cara memuat SpatiaLite
2.2. Sebuah pandangan pertama: mengakrabkan dengan GEOMETRI
2.3. GEOMETRI kelas
2.4. GEOMETRI AMPLOP
3. Mengelola database GIS
3.1. Mengekspor data GIS luar db SpatiaLite
3.2. Membuat db SpatiaLite baru dan mengisi itu
3.3 Memasukkan, memperbarui dan menghapus baris dalam db SpatiaLite
3.1. Mengekspor data GIS luar db SpatiaLite
3.2. Membuat db SpatiaLite baru dan mengisi itu
3.3 Memasukkan, memperbarui dan menghapus baris dalam db SpatiaLite
4. Melakukan beberapa analisis data spasial
4.1. Mengevaluasi hubungan MBRs
4.2. Mengevaluasi hubungan antara geometri
4.3. Boolean operasi pada geometri
4.4. Selanjutnya operasi pada geometri
4.1. Mengevaluasi hubungan MBRs
4.2. Mengevaluasi hubungan antara geometri
4.3. Boolean operasi pada geometri
4.4. Selanjutnya operasi pada geometri
5. Mengelola Koordinat Sistem Referensi dan Transformasi Koordinat
6. Melakukan SQL query secara langsung pada shapefile
7. Performing SQL query secara langsung pada file CSV atau TXT-tab
8. Spasial Indeks: menggunakan R SQLite's * Pohon
9. Indeks Spasial mengambil dua: menggunakan MbrCache
10. Berjuang dengan pengaturan charset lokal
1.Persiapan untuk mulai
Tutorial ini dimaksudkan untuk membiarkan Anda menjadi cepat dilatih untuk memahami dan menggunakan SpatiaLite dan fungsi Tata Ruang nya.
Mungkin Anda bukan programmer komputer, tidak seorang administrator sistem, atau administrator DBMS. [tetapi jika Anda, jangan khawatir, tutorial ini dapat membantu anda juga]
Mungkin Anda bukan programmer komputer, tidak seorang administrator sistem, atau administrator DBMS. [tetapi jika Anda, jangan khawatir, tutorial ini dapat membantu anda juga]
Jangan ganggu tentang ini, tutorial mencoba untuk menghindari menggunakan terminologi terlalu rumit, atau untuk menjelaskan setiap detail misterius tentang pengolahan data spasial, SQL dan sebagainya.
Ruang lingkup utama dari tutorial ini adalah hanya untuk membimbing Anda dalam langkah demi langkah proses, mengeksplorasi fitur apa SpatiaLite dapat menawarkan Anda, dan bagaimana dan kapan Anda diharapkan untuk menggunakannya.
Setiap fitur Single ini akan dijelaskan dengan contoh-contoh sederhana namun realistis, berdasarkan tes 2.3.sqlite bahwa Anda harus telah didownload dengan tutorial ini.
Setiap fitur Single ini akan dijelaskan dengan contoh-contoh sederhana namun realistis, berdasarkan tes 2.3.sqlite bahwa Anda harus telah didownload dengan tutorial ini.
1.1.Apa yang Anda butuhkan untuk memulai
Kami kira Anda memiliki setidaknya keakraban dasar dengan komputer, dan kami mengharapkan juga anda dapat daftar direktori, instal perangkat lunak dan sama; beberapa pengetahuan tentang lingkungan shell akan sangat berguna juga.
Demi kesederhanaan semua contoh berikut mengandaikan Anda melakukan tes menggunakan PC Windows, jika tidak, saya minta maaf ... tapi saya kira akan sangat mudah bagi Anda untuk mengakomodasi beberapa beberapa adaptasi yang diperlukan untuk Linux, MacOS dll
Demi kesederhanaan semua contoh berikut mengandaikan Anda melakukan tes menggunakan PC Windows, jika tidak, saya minta maaf ... tapi saya kira akan sangat mudah bagi Anda untuk mengakomodasi beberapa beberapa adaptasi yang diperlukan untuk Linux, MacOS dll
SpatiaLite datang dalam berbagai rasa, Anda harus memilih salah satu dari mereka sebelum memulai.
1. Cara termudah adalah dengan menggunakan spatialite.exe executable; itu berisi semua-dalam-satu apa pun yang Anda butuhkan untuk memulai.
spatialite.exe tidak memerlukan instalasi.
Anda hanya harus membuat folder kosong (misalnya C: \ SpatiaLite) dan hanya salin file eksekusi dalam kemudian simpan database sampel uji-2.3.sqlite dalam folder yang sama. Sekarang Anda siap untuk mulai.
spatialite.exe tidak memerlukan instalasi.
Anda hanya harus membuat folder kosong (misalnya C: \ SpatiaLite) dan hanya salin file eksekusi dalam kemudian simpan database sampel uji-2.3.sqlite dalam folder yang sama. Sekarang Anda siap untuk mulai.
2. Jika Anda tidak terbiasa menggunakan alat baris perintah, dan Anda sangat tidak suka hal semacam ini, jangan khawatir.
Anda bebas untuk menggunakan GUI benar-alat juga [yaitu satu pendukung jendela grafis, mouse, tombol dan sebagainya].
Anda hanya harus men-download dan menjalankan gui-spatialite cocok untuk platform yang sedang Anda gunakan, ini juga tidak memerlukan instalasi sama sekali, dan berisi semua-dalam-satu apa pun yang Anda butuhkan.
Anda bebas untuk menggunakan GUI benar-alat juga [yaitu satu pendukung jendela grafis, mouse, tombol dan sebagainya].
Anda hanya harus men-download dan menjalankan gui-spatialite cocok untuk platform yang sedang Anda gunakan, ini juga tidak memerlukan instalasi sama sekali, dan berisi semua-dalam-satu apa pun yang Anda butuhkan.
3. Atau, Anda mungkin ingin untuk memuat SpatiaLite sebagai perpanjangan dinamis ke dalam sqlite.exe, dasar standar.
Anda dapat melakukan hal seperti itu, tapi sedikit lebih keras untuk dilakukan, dan Anda dapat dengan mudah mungkin mengalami beberapa sakit kepala konfigurasi.
Anda dapat melakukan hal seperti itu, tapi sedikit lebih keras untuk dilakukan, dan Anda dapat dengan mudah mungkin mengalami beberapa sakit kepala konfigurasi.
· Untuk mulai menggunakan SpatiaLite sebagai ekstensi loadable suatu SQLite kau harus memiliki-2.dll libspatialite suatu tempat pada hard disk lokal Anda.
· Anda perlu memiliki akhir SQLite sqlite3.exe depan juga untuk menggunakan SpatiaLite. Perhatikan bahwa Anda harus memiliki versi terbaru, dengan nomor versi 3.3.6 atau lebih tinggi.
Jika tidak, silahkan download mereka di www.sqlite.org
Pemberitahuan penting: distribusi biner banyak SQLite adalah dibangun menonaktifkan opsi untuk me-load ekstensi dinamis, jika ini adalah kasus Anda, setiap mencoba untuk memuat SpatiaLite jelas akan gagal.
Jika tidak, silahkan download mereka di www.sqlite.org
Pemberitahuan penting: distribusi biner banyak SQLite adalah dibangun menonaktifkan opsi untuk me-load ekstensi dinamis, jika ini adalah kasus Anda, setiap mencoba untuk memuat SpatiaLite jelas akan gagal.
· Tergantung pada konfigurasi Anda pilih, DLL lain mungkin diperlukan, seperti libproj-0.dll, libgeos_c-1.dll dan libgeos-3.xxdll
· Baik sqlite3.exe maupun libspatialite-2.dll membutuhkan instalasi.
Anda hanya harus membuat folder kosong (misalnya C: \ SpatiaLite) dan hanya menyalin file-file di dalamnya; meletakkan database sampel uji-2.3.sqlite dalam folder yang sama.
Anda hanya harus membuat folder kosong (misalnya C: \ SpatiaLite) dan hanya menyalin file-file di dalamnya; meletakkan database sampel uji-2.3.sqlite dalam folder yang sama.
· Ini sangat mudah Anda akan jatuh ke dalam neraka DLL, Anda diperingatkan [dan putus asa untuk melakukan hal seperti itu].
Gunakan spatialite.exe semua-termasuk biner sebagai gantinya, dan tidak melibatkan diri ke dalam mimpi buruk DLL.
Gunakan spatialite.exe semua-termasuk biner sebagai gantinya, dan tidak melibatkan diri ke dalam mimpi buruk DLL.
4. Jika Anda tidak memiliki alat SIG sudah terpasang, mungkin ide yang baik untuk menginstal QuantumGis open source, bisa berguna untuk menampilkan sekilas shapefile kita akan menghasilkan antara tutorial ini.
Dapat mendownloadnya dari www.qgis.org, tetapi memiliki Windows Installer biasa yang menciptakan ikon Desktop dan sebagainya.
Dapat mendownloadnya dari www.qgis.org, tetapi memiliki Windows Installer biasa yang menciptakan ikon Desktop dan sebagainya.
1.2. Database test-2.3.sqlite
Yang satu ini adalah database yang sederhana, berukuran kecil tapi cukup realistis mengandung beberapa data yang tersedia gratis GIS [Anda dapat menemukan yang asli di www.rigacci.org]
Uji-2.3.sqlite berisi tabel berikut:
Uji-2.3.sqlite berisi tabel berikut:
1.tabel daerah berisi 109 baris; entitas masing-masing memiliki geometri, yaitu sebuah Polygon.
2.tabel kota berisi 8101 baris; entitas masing-masing memiliki geometri, yaitu sebuah POINT.
3.meja jalan raya berisi 775 baris,; entitas masing-masing memiliki geometri, yaitu sebuah LINESTRING.
2.tabel kota berisi 8101 baris; entitas masing-masing memiliki geometri, yaitu sebuah POINT.
3.meja jalan raya berisi 775 baris,; entitas masing-masing memiliki geometri, yaitu sebuah LINESTRING.
1.3. Memulai dengan SQL dan SQLite
Bagian ini akan mencoba untuk memberitahu Anda menjadi terbiasa dengan SQLite dengan cara yang sangat cepat. Jika Anda tetap lebih serius tertarik dalam hal ini, silakan baca dokumentasi SQLite resmi.
Mulai menggunakan SQLite, buka shell baru (jendela command), kemudian pergi ke folder yang telah disiapkan dalam pendahuluan, dan ketik perintah berikut:
sqlite3 test-2.3.sqlite
Atau bahkan lebih baik, ketik: spatialite tes-2.3.sqlite
Mulai menggunakan SQLite, buka shell baru (jendela command), kemudian pergi ke folder yang telah disiapkan dalam pendahuluan, dan ketik perintah berikut:
sqlite3 test-2.3.sqlite
Atau bahkan lebih baik, ketik: spatialite tes-2.3.sqlite
spatialite.exe mencakup dukungan lengkap untuk SQLite, sehingga memungkinkan Anda untuk melakukan apapun yang Anda bisa lakukan dengan menggunakan sqlite3, dan dalam cara yang persis sama.
Anda akan menerima prompt ini:
Anda akan menerima prompt ini:
SpatiaLite version ..: 2.3.0 Supported Extensions:
- 'VirtualShape' [direct Shapefile access]
- 'VirtualText' [direct CSV/TXT access]
- 'VirtualNetwork' [Dijkstra shortest path]
- 'RTree' [Spatial Index - R*Tree]
- 'MbrCache' [Spatial Index - MBR cache]
- 'VirtualFDO' [Spatial Index - MBR cache]
- 'SpatiaLite' [FDO-OGR interoperability]
PROJ.4 version ......: Rel. 4.6.1, 21 August 2008
GEOS version ........: 3.1.0-CAPI-1.5.0
SQLite version ......: 3.6.12
Enter ".help" for instructions
spatialite>
- 'VirtualShape' [direct Shapefile access]
- 'VirtualText' [direct CSV/TXT access]
- 'VirtualNetwork' [Dijkstra shortest path]
- 'RTree' [Spatial Index - R*Tree]
- 'MbrCache' [Spatial Index - MBR cache]
- 'VirtualFDO' [Spatial Index - MBR cache]
- 'SpatiaLite' [FDO-OGR interoperability]
PROJ.4 version ......: Rel. 4.6.1, 21 August 2008
GEOS version ........: 3.1.0-CAPI-1.5.0
SQLite version ......: 3.6.12
Enter ".help" for instructions
spatialite>
OK, Anda baru saja mulai sesi pertama Anda SQLite kerja, yang saat ini terhubung ke database test-2.3.sqlite; selamat.
Sekarang ketik perintah berikut:
Sekarang ketik perintah berikut:
spatialite> .nullvalue NULL
spatialite> .headers on
spatialite> .mode column
spatialite> .headers on
spatialite> .mode column
ada yang sangat menarik dalam hal ini, Anda hanya memilih beberapa pilihan operasi sepele: jika Anda penasaran untuk menemukan apa sebenarnya yang mereka berarti, Anda bisa menemukannya sendiri hanya mengetik:
spatialite> .help
Semua perintah dimulai dengan sebuah dot [.], sebagai. Mode atau header ditafsirkan oleh SQLite sebagai perintah internal, dan bukan sebagai ekspresi SQL. perintah internal yaitu mengatur beberapa opsi atau modus untuk SQLite, dan tidak ada hubungannya dengan pengolahan data nyata.
sekarang sesi SQLite dimulai, kita dapat mengeksekusi query pertama kami SQL pada database test-2.3.sqlite:
spatialite> SELECT * FROM towns LIMIT 5;

spatialite>
Sebuah beberapa poin untuk memahami:
1.permintaan SQLite statemen SELECT untuk melakukan query
2.mengambil semua kolom [*]
3.FROM tabel database nama towns
4.mengambil hanya lima baris pertama [LIMIT 5]
5.perhatikan pernyataan apapun SQL harus diakhiri dengan tanda semicolon [;]
2.mengambil semua kolom [*]
3.FROM tabel database nama towns
4.mengambil hanya lima baris pertama [LIMIT 5]
5.perhatikan pernyataan apapun SQL harus diakhiri dengan tanda semicolon [;]
sekarang coba ini query SQL kedua:
spatialite> select name AS Town, peoples as Population from towns ORDER BY name LIMIT 5;1.di SQL konstruksi menggunakan lebih rendah-atau huruf besar memiliki efek identik; SELECT adalah sama pilih,FROM dan dari yang setara.
2.Anda dapat dengan bebas memilih kolom mana yang harus diambil, menentukan jam akan Anda pesanan mereka, dan bahkan mengubah nama kemudian jika Anda ingin melakukannya dengan menggunakan klausa AS.
3.Anda dapat memesan diambil baris dengan menggunakan klausa ORDER BY.
2.Anda dapat dengan bebas memilih kolom mana yang harus diambil, menentukan jam akan Anda pesanan mereka, dan bahkan mengubah nama kemudian jika Anda ingin melakukannya dengan menggunakan klausa AS.
3.Anda dapat memesan diambil baris dengan menggunakan klausa ORDER BY.
query SQL yang lebih kompleks:
spatialite> select name, peoples from towns WHERE peoples > 350000 order by peoples DESC;spatialite>
1.Anda dapat menyaring satu set baris tertentu dengan menerapkan WHERE klausa; hanya baris yang memenuhi ekspresi logika yang Anda tentukan akan diambil.
Dalam contoh ini hanya Kota dengan jumlah penduduk lebih dari 350.000 orang telah diambil.
Dalam contoh ini hanya Kota dengan jumlah penduduk lebih dari 350.000 orang telah diambil.
2. you can order rows in descending order if appropriate, by using the DESC clause
sekarang kita akan melihat mode yang berbeda menggunakan sebuah query SQL:
spatialite> select COUNT(*) as '# Towns',... > MIN(peoples) as Smaller,
... > MAX(peoples) as Bigger,
... > SUM(peoples) as 'Total peoples',
... > SUM(peoples) / COUNT(*) as 'mean peoples for town'
... > from towns;
1. Anda dapat membagi pertanyaan yang kompleks garis banyak; SQLite mulai mengeksekusi query-satunya di mana ia menemukan baris ditutup dengan tanda semicolon [;] Dengan kata lain, sampai Anda memasukkan [;] sebagai karakter terakhir dalam baris, Anda selalu terus untuk jenis query yang sama, dan SQLite menunggu sampai Anda selesai untuk menyelesaikan query.
2. dapat menggunakan fungsi-fungsi dalam sebuah query SQL.
COUNT (), MIN (), MAX () dan SUM () adalah fungsi. Sama sekali tidak mengherankan:
COUNT (() mengembalikan jumlah baris.
MIN () mengembalikan nilai minimum untuk kolom yang diberikan.
MAX () mengembalikan nilai maksimum untuk kolom yang diberikan.
SUM () mengembalikan total semua nilai untuk kolom yang diberikan.
COUNT (), MIN (), MAX () dan SUM () adalah fungsi. Sama sekali tidak mengherankan:
COUNT (() mengembalikan jumlah baris.
MIN () mengembalikan nilai minimum untuk kolom yang diberikan.
MAX () mengembalikan nilai maksimum untuk kolom yang diberikan.
SUM () mengembalikan total semua nilai untuk kolom yang diberikan.
3. bahkan lebih, Anda dapat docalculations dalam permintaan Anda.
misalnya kita telah menghitung rata-rata penduduk per desa membagi SUM () oleh COUNT () nilai.
misalnya kita telah menghitung rata-rata penduduk per desa membagi SUM () oleh COUNT () nilai.
dicatat bahwa query SQL yang valid mungkin hanya terdiri dari ekspresi dan fungsi yang harus dievaluasi:
spatialite> select (10 - 11) * 2 as Number, ABS((10 - 11) * 2) as AbsoluteValue;

1.yang (10 - 11) * 2 istilah adalah contoh ekspresi
2.ABS () fungsi mengembalikan nilai absolut dari angka.
3.dicatat bahwa dalam contoh ini kita tidak menggunakan setiap kolom tabel DB DB atau sama sekali.
2.ABS () fungsi mengembalikan nilai absolut dari angka.
3.dicatat bahwa dalam contoh ini kita tidak menggunakan setiap kolom tabel DB DB atau sama sekali.
sekarang kami akan mengulang sebuah query SQL yang telah kita dilakukan, tapi dengan variasi kecil:
spatialite> select name, peoples, HEX(Geometry)
... > from Towns where peoples > 350000 order by peoples DESC;
... > from Towns where peoples > 350000 order by peoples DESC;


1.dengan HEX () mengembalikan fungsi representasi heksadesimal dari nilai kolom BLOB.
2.dalam pelaksanaan sebelumnya dari query ini, kolom Geom tampak kosong, sekarang, dengan menggunakan HEX () fungsi, kita menemukan yang berisi banyak data biner aneh.
Geom mengandung nilai GEOMETRI, disimpan sebagai gumpalan dan dikodekan dalam representasi internal yang digunakan oleh SpatiaLite.
3.SQLite dalam sendiri tidak sedikit gagasan tentang apa yang GEOMETRI, dan tidak dapat melakukan operasi lain di atasnya.
Untuk benar-benar menggunakan nilai GEOMETRI, waktu itu menggunakan ekstensi SpatiaLite.
2.dalam pelaksanaan sebelumnya dari query ini, kolom Geom tampak kosong, sekarang, dengan menggunakan HEX () fungsi, kita menemukan yang berisi banyak data biner aneh.
Geom mengandung nilai GEOMETRI, disimpan sebagai gumpalan dan dikodekan dalam representasi internal yang digunakan oleh SpatiaLite.
3.SQLite dalam sendiri tidak sedikit gagasan tentang apa yang GEOMETRI, dan tidak dapat melakukan operasi lain di atasnya.
Untuk benar-benar menggunakan nilai GEOMETRI, waktu itu menggunakan ekstensi SpatiaLite.
Kami telah menyelesaikan langkah pertama kami. Jika Anda telah memahami semua contoh sebelumnya, Anda menjadi menjadi akrab dengan SQL dasar, dan itu sudah cukup untuk mulai menggunakan SpatiaLite.
Untuk mengakhiri sesi SQLite saat ini dan keluar, Anda hanya harus mengetikkan:
Untuk mengakhiri sesi SQLite saat ini dan keluar, Anda hanya harus mengetikkan:
spatialite> .quit
2 .Memulai SpatiaLite
Bagian ini membahas operasi yang paling basilar tentang data spasial. Untuk memungkinkan SQLite untuk mengolah data spasial juga, Anda perlu menggunakan ekstensi SpatiaLite.
SpatiaLite [untuk diucapkan sebagai cahaya ruang] hanyalah sebuah perpustakaan kecil, yang mendukung kumpulan fungsi SQL dengan cara konforman dengan spesifikasi OGC OpenGisConsortium untuk pengolahan data spasial.
Jika Anda tertarik pada ini, Anda dapat memperoleh salinan spesifikasi OGC dari situs web OGC
SpatiaLite [untuk diucapkan sebagai cahaya ruang] hanyalah sebuah perpustakaan kecil, yang mendukung kumpulan fungsi SQL dengan cara konforman dengan spesifikasi OGC OpenGisConsortium untuk pengolahan data spasial.
Jika Anda tertarik pada ini, Anda dapat memperoleh salinan spesifikasi OGC dari situs web OGC
2.1. Cara memuat SpatiaLite
Terlebih dahulu Anda harus memulai sqlite3.exe seperti biasa jenis, sehingga perintah berikut:
sqlite3 test-2.3.sqlite
Anda akan menerima prompt ini:
SQLite version 3.x.x
enter ".help" for instructions
sqlite>
Anda akan menerima prompt ini:
SQLite version 3.x.x
enter ".help" for instructions
sqlite>
SQLite sesi dimulai, dan saat ini terhubung ke database test-2.3.sqlite;
sekarang ketik perintah berikut untuk mengatur berbagai pilihan untuk output format:
sqlite> .nullvalue NULL
sqlite> .headers on
sqlite> .mode column
sqlite>
sqlite> .headers on
sqlite> .mode column
sqlite>
dan sekarang Anda dapat memuat ekstensi SpatiaLite:
sqlite> .load 'libspatialite-2.dll'
Anda kemudian akan melihat pesan berikut:
PROJ.4 Rel. 4.6.0, 21 Dec 2007
GEOS version 3.0.0-CAPI-1.4.1
*** Extension 'RTree' ready [Spatial Index support]
*** Extension 'VirtualShape' ready [direct Shapefile access]
*** SQLite's extension 'SpatiaLite' is enabled ******
sqlite>
Anda kemudian akan melihat pesan berikut:
PROJ.4 Rel. 4.6.0, 21 Dec 2007
GEOS version 3.0.0-CAPI-1.4.1
*** Extension 'RTree' ready [Spatial Index support]
*** Extension 'VirtualShape' ready [direct Shapefile access]
*** SQLite's extension 'SpatiaLite' is enabled ******
sqlite>
cara alternatif untuk me-load SpatiaLite adalah untuk menjalankan ekspresi SQL berikut:
SELECT load_extension('libspatialite-2.dll');
Jika Anda menggunakan spatialite.exe dieksekusi, Anda tidak perlu memuat ekstensi apapun, karena secara otomatis disertakan SpatiaLite
Jika Anda menggunakan spatialite.exe dieksekusi, Anda tidak perlu memuat ekstensi apapun, karena secara otomatis disertakan SpatiaLite
2.2. Sebuah pandangan pertama: mengakrabkan dengan GEOMETRI
Baiklah, sekarang Anda dapat mengeksekusi query pertama Spasial Anda: kami akan mengulang sebuah query SQL yang telah kita dilakukan:
spatialite> SELECT name, peoples, AsText(Geometry)
... > from Towns where peoples > 350000 order by peoples DESC;
... > from Towns where peoples > 350000 order by peoples DESC;

1.yang AsText () fungsi adalah sebuah SpatiaLite satu, dan mengembalikan Teks Well Known - representasi WKT untuk nilai kolom GEOMETRI.
WKT merupakan notasi standar konforman dengan spesifikasi OpenGIS.
2.dalam pelaksanaan sebelumnya dari query ini, HEX () fungsi kembali banyak data biner aneh.
Sekarang AsText () menunjukkan fungsi yang berguna dan cukup mudah dimengerti nilai GEOMETRI.
3.POINT adalah kelas GEOMETRI sederhana, dan hanya beberapa [X, Y] koordinat.
WKT merupakan notasi standar konforman dengan spesifikasi OpenGIS.
2.dalam pelaksanaan sebelumnya dari query ini, HEX () fungsi kembali banyak data biner aneh.
Sekarang AsText () menunjukkan fungsi yang berguna dan cukup mudah dimengerti nilai GEOMETRI.
3.POINT adalah kelas GEOMETRI sederhana, dan hanya beberapa [X, Y] koordinat.
mengulangi permintaan sebelumnya dalam sedikit cara yang berbeda:
spatialite> SELECT name, X(Geometry), Y(Geometry) FROM Towns... > WHERE peoples > 350000
... > ORDER BY peoples DESC;
1.X SpatiaLite () mengembalikan fungsi koordinat X untuk sebuah POINT.
2.Y () mengembalikan fungsi koordinat Y untuk sebuah POINT.
2.Y () mengembalikan fungsi koordinat Y untuk sebuah POINT.
dapat menggunakan fungsi format GEOMETRI konversi sebagai berikut:
spatialite> SELECT HEX(GeomFromText('POINT(10 20)'));


1. yang GeomFromText SpatiaLite () mengembalikan fungsi representasi BLOB internal untuk GEOMETRI sebuah.
2.fungsi () AsBinary mengembalikan Well Known Binary - representasi WKB untuk nilai kolom GEOMETRI.
WKB adalah notasi standar konforman dengan spesifikasi OpenGIS.
3.yang GeomFromWKB () fungsi mengkonversi nilai WKB ke dalam nilai BLOB terkait internal.
2.fungsi () AsBinary mengembalikan Well Known Binary - representasi WKB untuk nilai kolom GEOMETRI.
WKB adalah notasi standar konforman dengan spesifikasi OpenGIS.
3.yang GeomFromWKB () fungsi mengkonversi nilai WKB ke dalam nilai BLOB terkait internal.
2.3. GEOMETRI kelas
Bagian ini membantu Anda untuk menemukan berbagai kelas GEOMETRI didukung oleh SpatiaLite seperti yang didefinisikan dalam spesifikasi OpenGIS; hanya berbicara, setiap CLASS GEOMETRI adalah jenis khas GEOMETRI.
Anda telah memenuhi kelas TITIK di paragraf sebelumnya; itu waktu Anda akan menjadi terbiasa dengan kelas adiknya juga.
query SQL sederhana untuk mengeksplorasi kelas GEOMETRI baru:
Anda telah memenuhi kelas TITIK di paragraf sebelumnya; itu waktu Anda akan menjadi terbiasa dengan kelas adiknya juga.
query SQL sederhana untuk mengeksplorasi kelas GEOMETRI baru:
spatialite> SELECT PK_UID, AsText(Geometry) FROM HighWays WHERE PK_UID = 883;

1.LINESTRING GEOMETRI kelas lain, dan memiliki banyak poin.
2.dalam hal ini yang Anda miliki mengambil satu LINESTRING sangat sederhana, mewakili polyline dengan hanya 4 simpul.
3.itu sama sekali tidak biasa menghadapi LINESTRINGs dengan beberapa ribuan simpul dalam data GIS nyata.
2.dalam hal ini yang Anda miliki mengambil satu LINESTRING sangat sederhana, mewakili polyline dengan hanya 4 simpul.
3.itu sama sekali tidak biasa menghadapi LINESTRINGs dengan beberapa ribuan simpul dalam data GIS nyata.
spatialite> SELECT PK_UID, NumPoints(Geometry), GLength(Geometry),
... > Dimension(Geometry), GeometryType(Geometry)
... > FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5;
... > Dimension(Geometry), GeometryType(Geometry)
... > FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5;

1.The SpatiaLite NumPoints () fungsi mengembalikan sejumlah titik untuk GEOMETRI LINESTRING.
2.Aktifitas GLength () mengembalikan fungsi panjang geometris [dinyatakan dalam satuan peta] untuk GEOMETRI LINESTRING.
3.Setelah Dimensi () mengembalikan fungsi nomor dimensi 'untuk setiap kelas GEOMETRI [jelas 1 untuk baris].
4.the GeometryType () mengembalikan fungsi tipe kelas untuk setiap jenis nilai GEOMETRI.
2.Aktifitas GLength () mengembalikan fungsi panjang geometris [dinyatakan dalam satuan peta] untuk GEOMETRI LINESTRING.
3.Setelah Dimensi () mengembalikan fungsi nomor dimensi 'untuk setiap kelas GEOMETRI [jelas 1 untuk baris].
4.the GeometryType () mengembalikan fungsi tipe kelas untuk setiap jenis nilai GEOMETRI.
patialite> SELECT PK_UID, NumPoints(Geometry),
... > AsText(StartPoint(Geometry)), AsText(EndPoint(Geometry)),
... > X(PointN(Geometry, 2)), Y(PointN(Geometry, 2))
... > FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5;
... > AsText(StartPoint(Geometry)), AsText(EndPoint(Geometry)),
... > X(PointN(Geometry, 2)), Y(PointN(Geometry, 2))
... > FROM HighWays ORDER BY NumPoints(Geometry) DESC LIMIT 5;

1 .yang StartPoint SpatiaLite () mengembalikan fungsi TITIK pertama untuk GEOMETRI LINESTRING.
2 .titik akhir () mengembalikan fungsi TITIK terakhir untuk GEOMETRI LINESTRING.
yang PointN () mengembalikan fungsi simpul dipilih sebagai suatu TITIK; masing-masing simpul satu diidentifikasi dengan indeks relatif.
3 .Simpul pertama diidentifikasi dengan nilai, indeks 1 kedua dengan nilai indeks 2 dan seterusnya.
4 .harap dicatat bahwa Anda dapat dengan bebas sarang berbagai SpatiaLite fungsi, dengan melewatkan nilai kembalian dari fungsi batin sebagai argumen untuk satu luar.
2 .titik akhir () mengembalikan fungsi TITIK terakhir untuk GEOMETRI LINESTRING.
yang PointN () mengembalikan fungsi simpul dipilih sebagai suatu TITIK; masing-masing simpul satu diidentifikasi dengan indeks relatif.
3 .Simpul pertama diidentifikasi dengan nilai, indeks 1 kedua dengan nilai indeks 2 dan seterusnya.
4 .harap dicatat bahwa Anda dapat dengan bebas sarang berbagai SpatiaLite fungsi, dengan melewatkan nilai kembalian dari fungsi batin sebagai argumen untuk satu luar.
spatialite> SELECT name, AsText(Geometry) FROM Regions WHERE PK_UID = 52;

1 .POLYGON GEOMETRI kelas lain.
2 .in hal yang Anda telah mengambil satu Polygon sangat sederhana, hanya memiliki cincin yaitu [eksterior tidak mengandung salah] lubang internal.
3 .Remember bahwa poligon opsional mungkin berisi jumlah sewenang-wenang lubang internal, masing-masing dipisahkan oleh cincin interior.
eksterior cincin itu sendiri hanyalah sebuah LINESTRING [dan cincin interior juga adalah LINESTRINGS].
4 .note bahwa Polygon adalah geometri tertutup, dan dengan demikian yang pertama dan terakhir TITIK untuk setiap cincin yang persis sama.
2 .in hal yang Anda telah mengambil satu Polygon sangat sederhana, hanya memiliki cincin yaitu [eksterior tidak mengandung salah] lubang internal.
3 .Remember bahwa poligon opsional mungkin berisi jumlah sewenang-wenang lubang internal, masing-masing dipisahkan oleh cincin interior.
eksterior cincin itu sendiri hanyalah sebuah LINESTRING [dan cincin interior juga adalah LINESTRINGS].
4 .note bahwa Polygon adalah geometri tertutup, dan dengan demikian yang pertama dan terakhir TITIK untuk setiap cincin yang persis sama.
spatialite> SELECT PK_UID,
... > Area(Geometry), AsText(Centroid(Geometry)),
... > Dimension(Geometry), GeometryType(Geometry)
... > FROM Regions ORDER BY Area(Geometry) DESC LIMIT 5;
... > Area(Geometry), AsText(Centroid(Geometry)),
... > Dimension(Geometry), GeometryType(Geometry)
... > FROM Regions ORDER BY Area(Geometry) DESC LIMIT 5;

1.we telah memenuhi Dimensi SpatiaLite () dan GeometryType () fungsi, mereka bekerja untuk poligon persis dalam cara yang sama seperti untuk jenis lain GEOMETRI.
2.Aktifitas SpatiaLite Luas () mengembalikan fungsi kawasan geometris [dinyatakan dalam satuan peta persegi] untuk GEOMETRI Polygon.
3.Setelah Centroid () mengembalikan fungsi TITIK mengidentifikasi pusat massa untuk GEOMETRI Polygon.
2.Aktifitas SpatiaLite Luas () mengembalikan fungsi kawasan geometris [dinyatakan dalam satuan peta persegi] untuk GEOMETRI Polygon.
3.Setelah Centroid () mengembalikan fungsi TITIK mengidentifikasi pusat massa untuk GEOMETRI Polygon.
spatialite> SELECT PK_UID, NumInteriorRings(Geometry),
... > NumPoints(ExteriorRing(Geometry)), NumPoints(InteriorRingN(Geometry, 1))
... > FROM regions ORDER BY NumInteriorRings(Geometry) DESC LIMIT 5;
... > NumPoints(ExteriorRing(Geometry)), NumPoints(InteriorRingN(Geometry, 1))
... > FROM regions ORDER BY NumInteriorRings(Geometry) DESC LIMIT 5;

1 .The SpatiaLite ExteriorRing () fungsi mengembalikan cincin eksterior untuk GEOMETRI diberikan.
Setiap Polygon berlaku harus memiliki cincin eksterior.
Ingat: masing-masing salah satu cincin milik Polygon adalah sebuah LINESTRING tertutup
2 .Aktifitas SpatiaLite NumInteriorRings () mengembalikan fungsi jumlah dering interior milik sebuah Polygon.
Sebuah Polygon berlaku mungkin memiliki jumlah dering interior, termasuk nol yaitu tidak cincin interior sama sekali.
Setiap Polygon berlaku harus memiliki cincin eksterior.
Ingat: masing-masing salah satu cincin milik Polygon adalah sebuah LINESTRING tertutup
2 .Aktifitas SpatiaLite NumInteriorRings () mengembalikan fungsi jumlah dering interior milik sebuah Polygon.
Sebuah Polygon berlaku mungkin memiliki jumlah dering interior, termasuk nol yaitu tidak cincin interior sama sekali.
3 .Setelah SpatiaLite InteriorRingN () mengembalikan fungsi cincin interior dipilih sebagai sebuah LINESTRING; masing-masing cincin satu interior diidentifikasi dengan indeks relatif.
Cincin interior pertama adalah diidentifikasi oleh nilai, indeks 1 kedua dengan nilai indeks 2 dan seterusnya.
4.Setiap cincin LINESTRING, jadi kita dapat menggunakan NumPoints () fungsi untuk mendeteksi jumlah simpul terkait.
Jika kita memanggil NumPoints () fungsi pada NULL GEOMETRI [atau pada GEOMETRI kelas non-LINESTRING] kita akan mendapatkan hasil yang NULL.
Hal ini menjelaskan mengapa yang terakhir tiga baris memiliki hasil NULL NumPoints (); tidak ada cincin interior yang sesuai!
Cincin interior pertama adalah diidentifikasi oleh nilai, indeks 1 kedua dengan nilai indeks 2 dan seterusnya.
4.Setiap cincin LINESTRING, jadi kita dapat menggunakan NumPoints () fungsi untuk mendeteksi jumlah simpul terkait.
Jika kita memanggil NumPoints () fungsi pada NULL GEOMETRI [atau pada GEOMETRI kelas non-LINESTRING] kita akan mendapatkan hasil yang NULL.
Hal ini menjelaskan mengapa yang terakhir tiga baris memiliki hasil NULL NumPoints (); tidak ada cincin interior yang sesuai!
spatialite> SELECT AsText(InteriorRingN(Geometry, 1)),
... > AsText(PointN(InteriorRingN(Geometry, 1), 4)),
... > X(PointN(InteriorRingN(Geometry, 1), 5)),
... > Y(PointN(InteriorRingN(Geometry, 1), 5))
... > FROM Regions WHERE PK_UID = 55;
... > AsText(PointN(InteriorRingN(Geometry, 1), 4)),
... > X(PointN(InteriorRingN(Geometry, 1), 5)),
... > Y(PointN(InteriorRingN(Geometry, 1), 5))
... > FROM Regions WHERE PK_UID = 55;

1 .kita telah bertemu di yang sebelumnya penggunaan fungsi bersarang.
Untuk poligon menjadi menjadi sedikit lebih membosankan, tapi masih mudah dimengerti.
2 .misalnya untuk mendapatkan kolom terakhir kita telah menggunakan InteriorRingN () dalam rangka untuk mendapatkan cincin interior pertama, dan kemudian PointN () untuk mendapatkan titik kelima.
3 .Akhirnya kita bisa memanggil Y () untuk mendapatkan nilai koordinat.
ini cukup membosankan, tapi tidak sulit sama sekali, bukan?
Untuk poligon menjadi menjadi sedikit lebih membosankan, tapi masih mudah dimengerti.
2 .misalnya untuk mendapatkan kolom terakhir kita telah menggunakan InteriorRingN () dalam rangka untuk mendapatkan cincin interior pertama, dan kemudian PointN () untuk mendapatkan titik kelima.
3 .Akhirnya kita bisa memanggil Y () untuk mendapatkan nilai koordinat.
ini cukup membosankan, tapi tidak sulit sama sekali, bukan?
POINT, LINESTRING and POLYGON are the elementary classes for GEOMETRY.
But GEOMETRY supports the following complex classes as well:
But GEOMETRY supports the following complex classes as well:
1.MultiPoint adalah kumpulan dari dua atau lebih POINTSs milik entitas yang sama.
2.MULTILINESTRING adalah kumpulan dari dua atau lebih LINESTRINGs.
3.MULTIPOLYGON adalah kumpulan dari dua atau lebih poligon.
4.GEOMETRYCOLLECTION adalah sebuah koleksi sewenang-wenang yang berisi jenis lain geometri.
2.MULTILINESTRING adalah kumpulan dari dua atau lebih LINESTRINGs.
3.MULTIPOLYGON adalah kumpulan dari dua atau lebih poligon.
4.GEOMETRYCOLLECTION adalah sebuah koleksi sewenang-wenang yang berisi jenis lain geometri.
Kami tidak akan menjelaskan secara rinci jenis koleksi, karena akan terlalu membosankan dan dispersi.
Secara umum mereka secara teratur meluas pada properti cara yang diharapkan sesuai dengan kelas yang sesuai SD.
Secara umum mereka secara teratur meluas pada properti cara yang diharapkan sesuai dengan kelas yang sesuai SD.
1 .yang SpatiaLite NumGeometries () mengembalikan fungsi jumlah elemen untuk koleksi.
2 .yang GeometryN () mengembalikan fungsi elemen N-th untuk koleksi.
3 .yang GLength () fungsi diterapkan untuk MULTILINESTRING mengembalikan jumlah panjang individu untuk setiap LINESTRING menyusun koleksi.
4 .Area () fungsi diterapkan untuk MULTIPOLYGON mengembalikan jumlah masing-masing bidang untuk setiap Polygon menyusun koleksi.
5 .Centroid () mengembalikan fungsi centroid rata-rata bila diterapkan pada sebuah MULTYPOLYGON ..
2 .yang GeometryN () mengembalikan fungsi elemen N-th untuk koleksi.
3 .yang GLength () fungsi diterapkan untuk MULTILINESTRING mengembalikan jumlah panjang individu untuk setiap LINESTRING menyusun koleksi.
4 .Area () fungsi diterapkan untuk MULTIPOLYGON mengembalikan jumlah masing-masing bidang untuk setiap Polygon menyusun koleksi.
5 .Centroid () mengembalikan fungsi centroid rata-rata bila diterapkan pada sebuah MULTYPOLYGON ..
2.4 GEOMETRI AMPLOP
Mari melihat properti fundamental bagi setiap kelas GEOMETRI:
spatialite> SELECT Name, AsText(Envelope(Geometry)) FROM Regions LIMIT 5;


spatialite>
1 . yang Envelope SpatiaLite () fungsi selalu mengembalikan sebuah Polygon yang Minimum Batas Rectangle - MBR untuk GEOMETRI diberikan.
Karena MBR persegi panjang, selalu memiliki 5 poin [ingat: dalam geometri menutup TITIK terakhir harus identik dengan yang pertama].
Karena MBR persegi panjang, selalu memiliki 5 poin [ingat: dalam geometri menutup TITIK terakhir harus identik dengan yang pertama].
2 . individual POINTs are as follow:
- POINT #1: minX,minY
- POINT #2: maxX,minY
- POINT #3: maxX,maxY
- POINT #4: minX,maxY
- POINT #5: minX,minY
3 . MBRs yang menarik aneh, karena dengan menggunakan mereka, Anda dapat mengevaluasi hubungan spasial antara dua geometri dengan cara sederhana dan kasar approximative. Tapi perbandingan MBRs sangat cepat untuk menghitung, sehingga mereka sangat berguna dan banyak digunakan untuk mempercepat pengolahan data.
4 .MBRs juga banyak direferensikan sebagai kotak berlari, atau BBOX juga.
Baiklah, jika anda telah mengikuti dan memahami semua contoh di atas, sekarang Anda telah memiliki keakraban dasar dengan inti dasar pengolahan data spasial. Kita sekarang bisa lewat untuk mengkaji berbagai latihan yang lebih maju.
3.Mengelola database GIS
Sangat sederhana berbicara, Sistem Informasi Geografis - GIS adalah salah satu yang mendukung geografis [atau kartografi] informasi, sebagai aturan praktis Data spasial [dan Tata Ruang-enabled DBMSs] ada terutama karena mereka adalah komponen kunci dalam aplikasi GIS.
Bagian ini membahas bagaimana Anda dapat mengatur database GIS yang nyata, yaitu:
Bagian ini membahas bagaimana Anda dapat mengatur database GIS yang nyata, yaitu:
1 .bagaimana Anda bisa mengimpor Dataset SIG yang ada dalam database SpatiaLite baru.
2 .bagaimana bisa Anda memasukkan, mengubah atau menghapus GIS dataset begitu mereka disimpan di dalam database yang baru Anda buat.
3 .bagaimana bisa Anda mengekspor GIS dataset dari database SpatiaLite.
2 .bagaimana bisa Anda memasukkan, mengubah atau menghapus GIS dataset begitu mereka disimpan di dalam database yang baru Anda buat.
3 .bagaimana bisa Anda mengekspor GIS dataset dari database SpatiaLite.
Situasi di mana GIS dataset perjalanan kembali dan maju dari workstation dan lain, bahkan di lokasi yang berbeda dan menggunakan sepenuhnya sistem yang berbeda dan aplikasi perangkat lunak, tersebar luas.
Bagus baru # 1: dengan menggunakan SQLite sebagai pilihan Anda GIS DBMS, tugas ini menjadi sangat sederhana:
Bagus baru # 1: dengan menggunakan SQLite sebagai pilihan Anda GIS DBMS, tugas ini menjadi sangat sederhana:
1 .database SQLite hanya sebuah file biasa, Anda bebas dapat menyalin, atau bahkan meng-upload dan download di WEB, mengirimkannya sebagai pos lampiran e-mail, dan unzip, dan seterusnya.
2 .Database SQLite adalah cross-platform, sehingga Anda dapat menghasilkan mereka pada PC Windows, kemudian gunakan pada server Linux, tanpa masalah apapun.
Tentu saja, SpatiaLite juga menjamin bahwa data spasial tidak merusak ketika akan cross-platform.
2 .Database SQLite adalah cross-platform, sehingga Anda dapat menghasilkan mereka pada PC Windows, kemudian gunakan pada server Linux, tanpa masalah apapun.
Tentu saja, SpatiaLite juga menjamin bahwa data spasial tidak merusak ketika akan cross-platform.
Baik baru # 2: SpatiaLite mendukung format ESRI shapefile hampir universal. Jadi Anda dapat dengan mudah mendapatkan beberapa Dataset SIG dari aplikasi seperti ArcGIS, memanipulasi menggunakan SpatiaLite yang diperlukan, dan kemudian transfer kembali lagi. Shapefile terlalu aman dapat digunakan dalam mode cross-platform.
3.1 Mengekspor data GIS luar db SpatiaLite
Anda memiliki database SpatiaLite di tangan Anda, satu tes-2.3.sqlite.
Untuk mengekspor semua tabel sebagai shapefile Anda hanya harus mengetikkan:
Untuk mengekspor semua tabel sebagai shapefile Anda hanya harus mengetikkan:
spatialite> .dumpshp Towns Geometry shape_towns CP1252 POINT
| ======== Dumping SQLite table 'Towns' into shapefile at 'shape_towns' SELECT * FROM Towns WHERE GeometryType(Geometry) = 'POINT'; Exported 8101 rows into shapefile ======== |
spatialite> .dumpshp HighWays Geometry shape_highways CP1252 LINESTRING
| ======== Dumping SQLite table 'HighWays' into shapefile at 'shape_highways' SELECT * FROM HighWays WHERE GeometryType(Geometry) = 'LINESTRING' OR GeometryType(Geometry) = 'MULTILINESTRING'; Exported 775 rows into shapefile ======== |
spatialite> .dumpshp Regions Geometry shape_regions CP1252 POLYGON
| ======== Dumping SQLite table 'Regions' into shapefile at 'shape_regions' SELECT * FROM Regions WHERE GeometryType(Geometry) = 'POLYGON' OR GeometryType(Geometry) = 'MULTIPOLYGON'; Exported 109 rows into shapefile ======== |
spatialite>
1 .yang SpatiaLite. dumpshp ekspor perintah makro meja keseluruhan sebagai sebuah shapefile.
2 .SpatiaLite menangani argumen perintah makro seperti yang mereka argumen dimana shell:
argumen # 1 mengidentifikasi nama tabel yang ingin Anda ekspor.
argumen # 2 adalah nama kolom yang mengidentifikasi geometri untuk diekspor.
argumen # 3 adalah nama path dari shapefile yang akan dihasilkan.
Penting pemberitahuan:.. Anda harus menentukan path ini tanpa menambahkan apapun shp, shx atau akhiran dbf.
argumen # 4 adalah charset_name untuk digunakan saat mengekspor nilai atribut alfanumerik ke shapefile
Dengan asumsi Anda mengelola sesi uji pada PC Windows, dan bahasa nasional Anda adalah Italia, yang CP1252 Windows Latin-1 adalah charset_name benar harus Anda tentukan.
argumen # 5 [opsional] menentukan mana yang GEOMETRI KELAS Anda berniat untuk ekspor.
GEOMETRI KELAS (bila ditentukan) harus menjadi salah satu dari: POINT, LINESTRING, Polygon atau MultiPoint
Anda dapat mengesampingkan argumen GEOMETRI CLASS jika hal ini sudah dikenal melalui metadata spasial
Anda akan melihat apa metadata spasial berada dalam paragraf berikut
2 .SpatiaLite menangani argumen perintah makro seperti yang mereka argumen dimana shell:
argumen # 1 mengidentifikasi nama tabel yang ingin Anda ekspor.
argumen # 2 adalah nama kolom yang mengidentifikasi geometri untuk diekspor.
argumen # 3 adalah nama path dari shapefile yang akan dihasilkan.
Penting pemberitahuan:.. Anda harus menentukan path ini tanpa menambahkan apapun shp, shx atau akhiran dbf.
argumen # 4 adalah charset_name untuk digunakan saat mengekspor nilai atribut alfanumerik ke shapefile
Dengan asumsi Anda mengelola sesi uji pada PC Windows, dan bahasa nasional Anda adalah Italia, yang CP1252 Windows Latin-1 adalah charset_name benar harus Anda tentukan.
argumen # 5 [opsional] menentukan mana yang GEOMETRI KELAS Anda berniat untuk ekspor.
GEOMETRI KELAS (bila ditentukan) harus menjadi salah satu dari: POINT, LINESTRING, Polygon atau MultiPoint
Anda dapat mengesampingkan argumen GEOMETRI CLASS jika hal ini sudah dikenal melalui metadata spasial
Anda akan melihat apa metadata spasial berada dalam paragraf berikut
Jika Anda sekarang melakukan daftar direktori [mis menjalankan] sistem perintah DIR, Anda akan melihat sesuatu seperti ini:

Mereka file adalah shapefile Anda sekarang diekspor.
Baiklah, Anda dapat memulai penampil GIS pilihan Anda, misalnya QGIS, dan menjelajahi mereka.
3.2 Membuat db SpatiaLite baru dan mengisi itu
Baiklah, Anda dapat memulai penampil GIS pilihan Anda, misalnya QGIS, dan menjelajahi mereka.
3.2 Membuat db SpatiaLite baru dan mengisi itu
Sekarang Anda pasti memiliki beberapa shapefile, setidaknya yang Anda baru saja diekspor.
Jadi, dalam contoh ini kita akan menciptakan dari awal database, baru kosong dan kemudian makan dengan shapefile kami.
Membuat database SQLite baru benar-benar sederhana, Anda hanya perlu memulai sesi SQLite baru:
Jadi, dalam contoh ini kita akan menciptakan dari awal database, baru kosong dan kemudian makan dengan shapefile kami.
Membuat database SQLite baru benar-benar sederhana, Anda hanya perlu memulai sesi SQLite baru:
spatialite my_new_db.sqlite
Ketika SQLite memulai sesi baru, jika db yang Anda minta tidak ada, maka akan membuat yang baru.
Ketika SQLite memulai sesi baru, jika db yang Anda minta tidak ada, maka akan membuat yang baru.
SpatiaLite version ..: 2.2 Supported Extensions:
- 'VirtualShape' [direct Shapefile access]
- 'VirtualText [direct CSV/TXT access]
- 'RTree' [Spatial Index - R*Tree]
- 'MbrCache' [Spatial Index - MBR cache]
- 'SpatiaLite' [Spatial SQL - OGC]
PROJ.4 version ......: Rel. 4.6.1, 21 August 2008
GEOS version ........: 3.0.0-CAPI-1.4.1
SQLite version ......: 3.6.2
Enter ".help" for instructions
spatialite>
- 'VirtualShape' [direct Shapefile access]
- 'VirtualText [direct CSV/TXT access]
- 'RTree' [Spatial Index - R*Tree]
- 'MbrCache' [Spatial Index - MBR cache]
- 'SpatiaLite' [Spatial SQL - OGC]
PROJ.4 version ......: Rel. 4.6.1, 21 August 2008
GEOS version ........: 3.0.0-CAPI-1.4.1
SQLite version ......: 3.6.2
Enter ".help" for instructions
spatialite>
SQLite sesi dimulai, dan saat ini terhubung ke database my_new_db.sqlite;
sekarang ketik perintah berikut untuk mengatur berbagai pilihan untuk memformat output:
spatialite> .nullvalue NULL
spatialite> .headers on
spatialite> .mode column
spatialite>
spatialite> .headers on
spatialite> .mode column
spatialite>
Itu selalu hal-hal standar yang sama, Anda sudah tahu ... Sekarang coba:
spatialite> .tables
spatialite>
spatialite>
Tabel direktif. menyebabkan SQLite daftar semua tabel yang terdapat dalam database saat ini.
Seperti yang anda lihat, yang satu ini adalah database baru, dan tidak mengandung tabel belum ada.
Anda dapat memeriksa juga (dengan menggunakan jendela yang berbeda), bahwa setelah menjalankan. tabel file my_new_db.sqlite bernama baru saja dibuat dalam direktori Anda saat ini.
Sekarang Anda dapat mencoba untuk mengisi database ini mengimpor shapefile sebelumnya dihasilkan:
Seperti yang anda lihat, yang satu ini adalah database baru, dan tidak mengandung tabel belum ada.
Anda dapat memeriksa juga (dengan menggunakan jendela yang berbeda), bahwa setelah menjalankan. tabel file my_new_db.sqlite bernama baru saja dibuat dalam direktori Anda saat ini.
Sekarang Anda dapat mencoba untuk mengisi database ini mengimpor shapefile sebelumnya dihasilkan:
spatialite> .loadshp shape_regions NewRegions CP1252
| ======== |
Loading shapefile di 'shape_regions' menjadi 'NewRegions' SQLite tabel
BEGIN;
CREATE TABLE NewRegions (
PK_UID INTEGER PRIMARY KEY AUTOINCREMENT,
PK_UID_X0 INTEGER NOT NULL,
Name TEXT NOT NULL,
Geometry BLOB NOT NULL);
INSERT INTO NewRegions (
PK_UID,PK_UID_X0,Name,Geometry)
VALUES (1,1,'VENETO',
GeomFromWkb(X'01030000000100000006000000ECE8268020FA2641139C...', -1));
...
COMMIT;
CREATE TABLE NewRegions (
PK_UID INTEGER PRIMARY KEY AUTOINCREMENT,
PK_UID_X0 INTEGER NOT NULL,
Name TEXT NOT NULL,
Geometry BLOB NOT NULL);
INSERT INTO NewRegions (
PK_UID,PK_UID_X0,Name,Geometry)
VALUES (1,1,'VENETO',
GeomFromWkb(X'01030000000100000006000000ECE8268020FA2641139C...', -1));
...
COMMIT;
| Inserted 109 rows into 'NewRegions' from SHAPEFILE ======== |
spatialite> .loadshp shape_highways NewHighWays CP1252
| ======== Loading shapefile at 'shape_highways' into SQLite table 'NewHighWays' |
| ======== Loading shapefile at 'shape_highways' into SQLite table 'NewHighWays' BEGIN; CREATE TABLE NewHighWays ( PK_UID INTEGER PRIMARY KEY AUTOINCREMENT, PK_UID_X0 INTEGER NOT NULL, Geometry BLOB NOT NULL); INSERT INTO NewHighWays ( PK_UID,PK_UID_X0,Geometry) VALUES (1,1, GeomFromWkb(X'01020000006A00000018AEEA69F9662441BD4DE2F66688...', -1)); ... COMMIT; Inserted 775 rows into 'NewHighWays' from SHAPEFILE ======== |
spatialite>
Mari kita cepat menentukan beberapa poin yang menarik:
dengan pernyataan SQL CREATE TABLE digunakan untuk menciptakan tabel baru dan mendefinisikan kolom nya.
yang lain INSERT INTO pernyataan SQL digunakan untuk membuat baris baru dalam tabel.
yang ANALISIS dan SQL VAKUM perintah memberitahu SQLite untuk menata dan merestrukturisasi database.
Itu selalu ide yang sangat baik untuk melakukan mereka setiap kali Anda memasukkan atau menghapus sejumlah besar data, untuk menjaga db Anda dalam keadaan baik bermasalah.
yang BEGIN dan SQL COMMIT laporan mendefinisikan bertransaksi; satu transaksi dimaksudkan untuk mendefinisikan operasi atom.
yaitu seluruh transaksi akan berhasil atau gagal; jika ada masalah dengan alasan apapun, db kita akan tetap tidak berubah.
kita akan lihat nanti semua ini dalam sebuah detail yang lebih dalam
Kita sekarang dapat melakukan beberapa operasi untuk memeriksa apa yang sebenarnya terjadi:
dengan pernyataan SQL CREATE TABLE digunakan untuk menciptakan tabel baru dan mendefinisikan kolom nya.
yang lain INSERT INTO pernyataan SQL digunakan untuk membuat baris baru dalam tabel.
yang ANALISIS dan SQL VAKUM perintah memberitahu SQLite untuk menata dan merestrukturisasi database.
Itu selalu ide yang sangat baik untuk melakukan mereka setiap kali Anda memasukkan atau menghapus sejumlah besar data, untuk menjaga db Anda dalam keadaan baik bermasalah.
yang BEGIN dan SQL COMMIT laporan mendefinisikan bertransaksi; satu transaksi dimaksudkan untuk mendefinisikan operasi atom.
yaitu seluruh transaksi akan berhasil atau gagal; jika ada masalah dengan alasan apapun, db kita akan tetap tidak berubah.
kita akan lihat nanti semua ini dalam sebuah detail yang lebih dalam
Kita sekarang dapat melakukan beberapa operasi untuk memeriksa apa yang sebenarnya terjadi:

Tabel direktif menyebabkan SQLite ke daftar semua tabel yang terdapat dalam database saat ini;
semua yang benar, meja NewHighWays dan NewRegions telah diciptakan.
semua yang benar, meja NewHighWays dan NewRegions telah diciptakan.

The table_info pragma (nama_tabel) direktif menyebabkan SQLite ke daftar milik semua kolom tabel diminta.
1 .harap dicatat bahwa nama kolom asli dapat dikenakan pemotongan.
Sayangnya, format shapefile tidak mengizinkan nama kolom lebih panjang dari 10 karakter.
2 .sekarang ada nama kolom PK_UID_X0, ini adalah untuk disambiguate potensi duplikat nama kolom
Sayangnya, format shapefile tidak mengizinkan nama kolom lebih panjang dari 10 karakter.
2 .sekarang ada nama kolom PK_UID_X0, ini adalah untuk disambiguate potensi duplikat nama kolom

Apa pun tampaknya seperti yang diharapkan. Kita bisa melewati.
Sekarang kita harus mengimpor shapefile terbaru kami, yang shape_towns.
Kali ini kita akan menerapkan beberapa perubahan kecil, hanya untuk memeriksa cara yang berbeda untuk mengimpor shapefile.
Sekarang kita harus mengimpor shapefile terbaru kami, yang shape_towns.
Kali ini kita akan menerapkan beberapa perubahan kecil, hanya untuk memeriksa cara yang berbeda untuk mengimpor shapefile.

Loading shapefile at 'shape_highways' into SQLite table 'NewHighWays'
| BEGIN; CREATE TABLE NewTowns ( PK_UID INTEGER PRIMARY KEY AUTOINCREMENT, PK_UID_X0 INTEGER NOT NULL, Name TEXT NOT NULL, Peoples INTEGER NOT NULL, LocalCounc INTEGER NOT NULL, County INTEGER NOT NULL, Region INTEGER NOT NULL); SELECT AddGeometryColumn('NewTowns', 'geom', 32632, 'POINT', 2); INSERT INTO NewTowns ( PK_UID,PK_UID_X0,Name,Peoples,LocalCounc,County,Region,geom) VALUES (1,1,'Brozolo',435,1,0,0, GeomFromWkb(X'010100000048E17A14EB0F1A4152B81E55420F5341', 32632)); ... COMMIT; Inserted 8101 rows into 'NewTowns' from SHAPEFILE ======== |
spatialite> .tables

spatialite>
1 . tersebut. membaca perintah makro menjalankan script SQL.
Script init_spatialite-2.3.sql adalah satu standar [Anda dapat men-download] dan itu digunakan untuk menginisialisasi Spasial disebut metadata
Seperti yang dapat anda perhatikan, itu memanggil InitSpatialMetaData () SpatiaLite's SQL fungsi
Anda harus menentukan charset_name digunakan untuk mengkodekan teks SQL Script, kali ini kita dapat menggunakan ASCII satu.
Script init_spatialite-2.3.sql adalah satu standar [Anda dapat men-download] dan itu digunakan untuk menginisialisasi Spasial disebut metadata
Seperti yang dapat anda perhatikan, itu memanggil InitSpatialMetaData () SpatiaLite's SQL fungsi
Anda harus menentukan charset_name digunakan untuk mengkodekan teks SQL Script, kali ini kita dapat menggunakan ASCII satu.
2 . segera setelah menjalankan skrip init_spatialite-2.3.sql Anda dapat memeriksa bahwa dua meja baru telah dibuat, yaitu spatial_ref_sys dan geometry_columns.
Sebuah benda seperti meja geom_cols_ref_sys telah dibuat, ini sebenarnya bukan tabel sebenarnya, kita akan melihat segera apa sebenarnya
Sebuah benda seperti meja geom_cols_ref_sys telah dibuat, ini sebenarnya bukan tabel sebenarnya, kita akan melihat segera apa sebenarnya
3 . yang Anda bisa melihat juga, kali ini kami menggunakan formulir 5 argumen untuk loadshp,. menentukan SRID dan nama kolom geometri juga.
4 . akibatnya, fungsi loadshp. makro telah menggunakan AddGeometryColumn terpisah () pernyataan dalam rangka menciptakan kolom geometri dengan cara yang konsisten dengan penanganan metadata Ruang.1. karena Anda dapat memeriksa, sekarang metadata Spasial benar laporan bahwa ada kolom Spasial dalam tabel NewTowns
2. dan bahwa kolom ini harus berisi geometri Point dalam SRID 32632
3. Anda dapat memeriksa juga bahwa 32.632 SRID mengidentifikasi zone UTM 32N, dan memiliki banyak parameter geodetik kualifikasi itu sepenuhnya.
2. dan bahwa kolom ini harus berisi geometri Point dalam SRID 32632
3. Anda dapat memeriksa juga bahwa 32.632 SRID mengidentifikasi zone UTM 32N, dan memiliki banyak parameter geodetik kualifikasi itu sepenuhnya.

spatialite> SELECT * FROM sqlite_master
...> WHERE type = 'trigger' AND tbl_name = 'NewTowns';
...> WHERE type = 'trigger' AND tbl_name = 'NewTowns';


1. SQLite mendukung pemicu, maka SpatiaLite, sekaligus menciptakan sebuah kolom geometri baru melalui AddGeometryColumn (), mendefinisikan 4 memicu dalam oder untuk memastikan:
• bahwa geometri yang terkandung dalam kolom ini memiliki semua jenis geometri yang sama
• dan bahwa mereka semua mengacu pada SRID sama
• baik untuk INSERT dan UPDATE
• sehingga Anda sekarang dapat yakin mengandalkan pada asumsi bahwa Anda menerapkan dengan baik sangat dibatasi dan diperiksa tabel Ruang.
• bahwa geometri yang terkandung dalam kolom ini memiliki semua jenis geometri yang sama
• dan bahwa mereka semua mengacu pada SRID sama
• baik untuk INSERT dan UPDATE
• sehingga Anda sekarang dapat yakin mengandalkan pada asumsi bahwa Anda menerapkan dengan baik sangat dibatasi dan diperiksa tabel Ruang.
Ini benar-benar disayangkan kami tidak tahu hal ini berguna sebelum (Spasial metadata yaitu).
Kami sudah diambil dua tabel [NewRegions dan NewHighWays] tanpa mengasosiasikan mereka untuk Spasial metadata ...
Tidak pernah sampai akhir, kita dapat memulihkan sekarang.
Kami sudah diambil dua tabel [NewRegions dan NewHighWays] tanpa mengasosiasikan mereka untuk Spasial metadata ...
Tidak pernah sampai akhir, kita dapat memulihkan sekarang.
spatialite> UPDATE NewRegions SET Geometry = SetSrid(Geometry, 32632);
spatialite> SELECT RecoverGeometryColumn('NewRegions', 'Geometry',
...> 32632, 'MULTIPOLYGON', 2);
spatialite> SELECT RecoverGeometryColumn('NewRegions', 'Geometry',
...> 32632, 'MULTIPOLYGON', 2);

1.pertama kita harus menetapkan nilai SRID eksplisit untuk geometri apapun dalam tabel NewRegions
Jika tidak ada upaya untuk metadata Spasial asosiasi akan gagal
Jika tidak ada upaya untuk metadata Spasial asosiasi akan gagal
2. dan kemudian kita dapat mencoba untuk menggunakan RecoverGeometryColumn () fungsi untuk asosiasi kolom yang diperlukan dengan Spasial metadata:
@ fungsi ini akan memindai seluruh tabel
@memeriksa jika ada nilai pada kolom geometri memenuhi jenis yang dibutuhkan dan SRID
@jika ini kondisi keduanya BENAR, geometri kolom ini kemudian dikaitkan dengan Spasial metadata
@ dan memicu juga diciptakan
@ fungsi ini akan memindai seluruh tabel
@memeriksa jika ada nilai pada kolom geometri memenuhi jenis yang dibutuhkan dan SRID
@jika ini kondisi keduanya BENAR, geometri kolom ini kemudian dikaitkan dengan Spasial metadata
@ dan memicu juga diciptakan


• seperti yang Anda lihat, apa pun telah pulih
• Geometri sekarang kolom dalam tabel NewRegions benar berhubungan dengan metadata Spasial
• mungkin digunakan terbatas, tetapi Anda dapat membalikkan operasi ini juga:
o Anda hanya harus menggunakan: DiscardGeometryColumn ('NewRegions', 'Geometri')
• Geometri sekarang kolom dalam tabel NewRegions benar berhubungan dengan metadata Spasial
• mungkin digunakan terbatas, tetapi Anda dapat membalikkan operasi ini juga:
o Anda hanya harus menggunakan: DiscardGeometryColumn ('NewRegions', 'Geometri')
3.3 Memasukkan, memperbarui dan menghapus baris dalam db SpatiaLite
Sekarang Anda memiliki dua database, uji 2.3.sqlite-asli dan baru my_new_db.sqlite, sehingga Anda dapat dengan aman menggunakan salah satu dari mereka untuk melanjutkan pengujian, dan menyimpan satu salinan lain sebagai cadangan.
Coba Anda mulai dengan perintah SQL biasa:
Coba Anda mulai dengan perintah SQL biasa:
spatialite> DELETE FROM NewTowns WHERE peoples < 100000;
spatialite> SELECT count(*) FROM NewTowns;
spatialite> SELECT count(*) FROM NewTowns;

Semoga ... Anda baru saja hilang dan tidak kehilangan beberapa 8.000 baris.
Jika Anda bertobat diri sendiri, sudah terlambat, mereka pergi untuk selamanya.
Cara yang paling bijaksana untuk melakukan ini adalah:
Jika Anda bertobat diri sendiri, sudah terlambat, mereka pergi untuk selamanya.
Cara yang paling bijaksana untuk melakukan ini adalah:
spatialite> BEGIN;
spatialite> DELETE FROM NewTowns WHERE peoples < 100000;
spatialite> SELECT count(*) FROM NewTowns;
spatialite> DELETE FROM NewTowns WHERE peoples < 100000;
spatialite> SELECT count(*) FROM NewTowns;

1. pernyataan BEGIN SQL memberitahu SQLite bahwa Anda berniat untuk memulai transaksi.
Setiap operasi yang Anda lakukan dalam transaksi dapat dibatalkan sewaktu-waktu berikutnya, dan db akan kembali ke keadaan semula tidak berubah tersebut.
2. pernyataan SQL ROLLBACK SQLite mengatakan persis ini
Setiap operasi yang Anda lakukan dalam transaksi dapat dibatalkan sewaktu-waktu berikutnya, dan db akan kembali ke keadaan semula tidak berubah tersebut.
2. pernyataan SQL ROLLBACK SQLite mengatakan persis ini
Jika tidak, jika Anda ingin benar-benar mengkonfirmasi apa yang sudah Anda lakukan:

1. pernyataan SQL COMMIT secara definitif menegaskan semua operasi masih tertunda.
2. baik ROLLBACK dan COMMIT menutup transaksi saat ini, jika Anda ingin terus bekerja dengan cara transaksi, Anda harus memulai sebuah transaksi baru memanggil BEGIN sekali lagi.
3. jika Anda hanya menghilangkan untuk penggunaan di semua BEGIN, COMMIT atau pernyataan ROLLBACK, SQLite akan menganggap Anda ingin mengoperasikan dalam mode sehingga-calledautocommit, yaitu setiap pernyataan tunggal secara implisit diasumsikan terkandung dalam transaksi otomatis.
Ketika Anda bekerja dalam modus autocommit mengetikkan DELETE sederhana ... Pernyataan dipahami: BEGIN; HAPUS ...; COMMIT;
4. SQLite adalah mesin database transaksional; bekerja dalam modus autocommit dengan mudah dapat menjadi penyebab utama penurunan kinerja.
5. jadi, Anda sangat dianjurkan untuk menggunakan transaksi sesuai dengan cara yang masuk akal.
2. baik ROLLBACK dan COMMIT menutup transaksi saat ini, jika Anda ingin terus bekerja dengan cara transaksi, Anda harus memulai sebuah transaksi baru memanggil BEGIN sekali lagi.
3. jika Anda hanya menghilangkan untuk penggunaan di semua BEGIN, COMMIT atau pernyataan ROLLBACK, SQLite akan menganggap Anda ingin mengoperasikan dalam mode sehingga-calledautocommit, yaitu setiap pernyataan tunggal secara implisit diasumsikan terkandung dalam transaksi otomatis.
Ketika Anda bekerja dalam modus autocommit mengetikkan DELETE sederhana ... Pernyataan dipahami: BEGIN; HAPUS ...; COMMIT;
4. SQLite adalah mesin database transaksional; bekerja dalam modus autocommit dengan mudah dapat menjadi penyebab utama penurunan kinerja.
5. jadi, Anda sangat dianjurkan untuk menggunakan transaksi sesuai dengan cara yang masuk akal.
Sekarang Anda akan membuat tabel baru, dan kemudian memasukkan beberapa baris di dalamnya:
spatialite> BEGIN;
spatialite> CREATE TABLE MyTable (
... > name TEXT NOT NULL,
... > geom BLOB NOT NULL);
spatialite> INSERT INTO MyTable (name, geom) VALUES
... > ('one', GeomFromText('POINT(1 1)'));
spatialite> INSERT INTO MyTable (name, geom) VALUES
... > ('two', GeomFromText('POINT(2 2)'));
spatialite> INSERT INTO MyTable (name, geom) VALUES
... > ('three', GeomFromText('POINT(3 3)'));
spatialite> SELECT name, AsText(geom) FROM MyTable;
spatialite> CREATE TABLE MyTable (
... > name TEXT NOT NULL,
... > geom BLOB NOT NULL);
spatialite> INSERT INTO MyTable (name, geom) VALUES
... > ('one', GeomFromText('POINT(1 1)'));
spatialite> INSERT INTO MyTable (name, geom) VALUES
... > ('two', GeomFromText('POINT(2 2)'));
spatialite> INSERT INTO MyTable (name, geom) VALUES
... > ('three', GeomFromText('POINT(3 3)'));
spatialite> SELECT name, AsText(geom) FROM MyTable;

1. TABEL CREATE yang memungkinkan Anda untuk membuat sebuah tabel baru, menentukan kolom yang berisi juga.
2. kalian tahu bahwa sebuah kolom Spasial adalah BLOB satu
3. yang KE INSERT memungkinkan Anda untuk menyimpan baris baru dalam tabel.
4. menggunakan GeomFromText () Anda dapat membuat nilai GEOMETRI baru di akan Anda.
5. Anda juga telah melakukan pemeriksaan terakhir, menggunakan SELECT.
6. wow! Anda baru saja membuat tabel dan dimasukkan Data spasial di dalamnya, sehingga Anda gembira dapat keluar dari sesi SQLite sekarang.
2. kalian tahu bahwa sebuah kolom Spasial adalah BLOB satu
3. yang KE INSERT memungkinkan Anda untuk menyimpan baris baru dalam tabel.
4. menggunakan GeomFromText () Anda dapat membuat nilai GEOMETRI baru di akan Anda.
5. Anda juga telah melakukan pemeriksaan terakhir, menggunakan SELECT.
6. wow! Anda baru saja membuat tabel dan dimasukkan Data spasial di dalamnya, sehingga Anda gembira dapat keluar dari sesi SQLite sekarang.
Setelah beberapa saat, ketika Anda memulai sesi SQLite baru, sayangnya Anda menemukan bahwa:
spatialite> SELECT name, AsText(geom) FROM MyTable;
SQL error: no such table: MyTable
spatialite>
SQL error: no such table: MyTable
spatialite>
Astaga, apa yang terjadi? Dimana tabel yang baru dibuat? Tampaknya akan lenyap ...
Dan sebenarnya itu telah hilang; membaca lagi dan hati-hati sesi terakhir:
1. Anda memulai transaksi dengan menerapkan BEGIN
2. maka Anda telah membuat tabel
3. maka Anda telah memasukkan beberapa baris
4. ... dan setelah semua yang harus Anda tiba-tiba berhenti sesi anda menghilangkan untuk memastikan semua operasi tertunda.
Anda telah lupa untuk memohon COMMIT.
Jadi semua pekerjaan yang Anda lakukan telah pergi selamanya.
5. yang satu ini adalah sisi gelap dari transaksi ... tidak pernah lupa untuk COMMIT transaksi yang tertunda, atau pekerjaan Anda hanya akan hilang.
Saya harap contoh ini bencana dapat membantu anda untuk menghindari bencana transaksi.
Memperbarui baris adalah yang sederhana seperti memasukkan atau menghapus mereka:
Dan sebenarnya itu telah hilang; membaca lagi dan hati-hati sesi terakhir:
1. Anda memulai transaksi dengan menerapkan BEGIN
2. maka Anda telah membuat tabel
3. maka Anda telah memasukkan beberapa baris
4. ... dan setelah semua yang harus Anda tiba-tiba berhenti sesi anda menghilangkan untuk memastikan semua operasi tertunda.
Anda telah lupa untuk memohon COMMIT.
Jadi semua pekerjaan yang Anda lakukan telah pergi selamanya.
5. yang satu ini adalah sisi gelap dari transaksi ... tidak pernah lupa untuk COMMIT transaksi yang tertunda, atau pekerjaan Anda hanya akan hilang.
Saya harap contoh ini bencana dapat membantu anda untuk menghindari bencana transaksi.
Memperbarui baris adalah yang sederhana seperti memasukkan atau menghapus mereka:
spatialite> SELECT pk_uid, name, peoples, AsText(geom)
... > FROM NewTowns WHERE pk_uid = 8006;
... > FROM NewTowns WHERE pk_uid = 8006;
| PK_UID | Name | Peoples | AsText(geom) |
| 8006 | Monza | 120204.0 | POINT(521332.99 5047818.45) |
spatialite> UPDATE NewTowns SET peoples = 150000,
... > name = 'MONZA',
... > geom = GeomFromText('POINT(10 10)', 32632)
... > WHERE pk_uid = 8006;
spatialite> SELECT pk_uid, name, peoples, AsText(geom)
... > FROM NewTowns WHERE pk_uid = 8006;
... > name = 'MONZA',
... > geom = GeomFromText('POINT(10 10)', 32632)
... > WHERE pk_uid = 8006;
spatialite> SELECT pk_uid, name, peoples, AsText(geom)
... > FROM NewTowns WHERE pk_uid = 8006;
| PK_UID | Name | Peoples | AsText(geom) |
| 8006 | MONZA | 150000.0 | POINT(10 10) |
spatialite>
1. pernyataan SQL UPDATE memungkinkan Anda memodifikasi nilai kolom.
Anda hanya harus SET nama kolom dan nilai-nilai baru yang akan menggantikan yang saat ini.
2. Anda dapat menggunakan seperti biasa GeomFromText () fungsi untuk memperoleh nilai GEOMETRI.
3. kolom PK_UID adalah salah satu yang khusus, sebagai PRIMARY KEY untuk tabel ini.
Dalam setiap meja sebuah kolom PRIMARY KEY meyakinkan Anda bahwa satu dan hanya satu baris dapat berisi nilai yang dipilih, sehingga menjamin univocity.
4. jika salah satu tabel Anda, untuk alasan apapun, tidak memiliki PRIMARY KEY, jangan khawatir; segala SQLite otomatis mengelola sebuah berguna pengenal unik untuk setiap baris dalam sebuah tabel, yang namanya ROWID, Anda dapat referensi itu SQL ekspresi persis seperti adalah nama kolom biasa.
5. diketahui juga bahwa dalam contoh ini Anda ternyata tidak digunakan transaksi [Anda telah menggunakan maupun tidak BEGIN COMMIT], kami telah menjelaskan hal ini titik tertentu, tapi menarik untuk menggarisbawahi ini untuk kedua kalinya.
SQLite selalu bertindak sebagai DBMS transaksi; apa yang sebenarnya terjadi di balik layar dalam kasus-kasus seperti ini, adalah bahwa Anda secara implisit menggunakan auto-commit mode yaitu:
@ suatu transaksi baru secara implisit BEGINned untuk setiap pernyataan SQL
@dan COMMIT implisit secara otomatis dilakukan setelah memproses pernyataan SQL.
@ni dengan mudah dapat menyebabkan degradasi kinerja yang lebih atau kurang parah; SQLite memilih sejauh bahwa Anda secara eksplisit BEGIN dan COMMITtransaction, terutama ketika anda melakukan INSERT berturut-turut banyak dan banyak dan / atau UPDATE.
Anda hanya harus SET nama kolom dan nilai-nilai baru yang akan menggantikan yang saat ini.
2. Anda dapat menggunakan seperti biasa GeomFromText () fungsi untuk memperoleh nilai GEOMETRI.
3. kolom PK_UID adalah salah satu yang khusus, sebagai PRIMARY KEY untuk tabel ini.
Dalam setiap meja sebuah kolom PRIMARY KEY meyakinkan Anda bahwa satu dan hanya satu baris dapat berisi nilai yang dipilih, sehingga menjamin univocity.
4. jika salah satu tabel Anda, untuk alasan apapun, tidak memiliki PRIMARY KEY, jangan khawatir; segala SQLite otomatis mengelola sebuah berguna pengenal unik untuk setiap baris dalam sebuah tabel, yang namanya ROWID, Anda dapat referensi itu SQL ekspresi persis seperti adalah nama kolom biasa.
5. diketahui juga bahwa dalam contoh ini Anda ternyata tidak digunakan transaksi [Anda telah menggunakan maupun tidak BEGIN COMMIT], kami telah menjelaskan hal ini titik tertentu, tapi menarik untuk menggarisbawahi ini untuk kedua kalinya.
SQLite selalu bertindak sebagai DBMS transaksi; apa yang sebenarnya terjadi di balik layar dalam kasus-kasus seperti ini, adalah bahwa Anda secara implisit menggunakan auto-commit mode yaitu:
@ suatu transaksi baru secara implisit BEGINned untuk setiap pernyataan SQL
@dan COMMIT implisit secara otomatis dilakukan setelah memproses pernyataan SQL.
@ni dengan mudah dapat menyebabkan degradasi kinerja yang lebih atau kurang parah; SQLite memilih sejauh bahwa Anda secara eksplisit BEGIN dan COMMITtransaction, terutama ketika anda melakukan INSERT berturut-turut banyak dan banyak dan / atau UPDATE.
Contoh berikut memerlukan database my_new_db.sqlite asli.
Jadi lebih baik jika Anda dibangun kembali sekarang, untuk menghindari misalignment karena DELETE dan UPDATE kami baru saja dilakukan
Jadi lebih baik jika Anda dibangun kembali sekarang, untuk menghindari misalignment karena DELETE dan UPDATE kami baru saja dilakukan
The SQLite's sintaks SQL menawarkan Anda cara mudah untuk membuat sebuah tabel baru dan sekaligus mengisinya dengan data yang dipilih keluar dari tabel lain:
spatialite> BEGIN;
spatialite> CREATE TABLE Villages AS
... > SELECT * FROM NewTowns WHERE peoples < 500;
spatialite> COMMIT;
spatialite> SELECT count(*) FROM Villages;
spatialite> CREATE TABLE Villages AS
... > SELECT * FROM NewTowns WHERE peoples < 500;
spatialite> COMMIT;
spatialite> SELECT count(*) FROM Villages;
| count(*) |
| 845 |
spatialite>
1.menggunakan CREATE TABLE .... AS SELECT ... Klon SQLite secara otomatis sebuah tabel baru [persis sama dengan yang asli; nama kolom yang sama dll].
2. dan kemudian semua baris yang keluar dari SELECT akan ditulis dalam tabel baru.
SQLite juga dukungan lain yang berbeda SQL membangun yang memungkinkan Anda untuk membuat sebuah tabel baru dan kemudian mengisinya dengan data yang keluar dari tabel yang ada:
2. dan kemudian semua baris yang keluar dari SELECT akan ditulis dalam tabel baru.
SQLite juga dukungan lain yang berbeda SQL membangun yang memungkinkan Anda untuk membuat sebuah tabel baru dan kemudian mengisinya dengan data yang keluar dari tabel yang ada:
spatialite> BEGIN;
spatialite> CREATE TABLE Metropolis (
... > Name TEXT NOT NULL,
... > Population INTEGER NOT NULL,
... > Geometry BLOB NOT NULL);
spatialite> INSERT INTO Metropolis (Name, Population, Geometry)
... > SELECT name, peoples, geom FROM NewTowns
... > WHERE peoples > 1000000;
spatialite> COMMIT;
spatialite> SELECT name, population, AsText(geometry) FROM Metropolis;
spatialite> CREATE TABLE Metropolis (
... > Name TEXT NOT NULL,
... > Population INTEGER NOT NULL,
... > Geometry BLOB NOT NULL);
spatialite> INSERT INTO Metropolis (Name, Population, Geometry)
... > SELECT name, peoples, geom FROM NewTowns
... > WHERE peoples > 1000000;
spatialite> COMMIT;
spatialite> SELECT name, population, AsText(geometry) FROM Metropolis;
| Name | Population | AsText(geometry) |
| Roma | 2546804 | POINT(788703.57 4645636.3) |
| Milano | 1256211 | POINT(514820.49 5034534.56) |
| Napoli | 1004500 | POINT(942636.1 4535272.55) |
sqlite>
1. pertama kamu harus membuat tabel baru, bebas memilih kolom, mereka nama dll
2. maka Anda panggil INSERT INTO ... PILIH yang melakukan transfer data otomatis [baik yang dipilih atau lengkap] antara dua tabel.
Kedua SQL konstruksi sangat berguna dalam lingkungan berorientasi GIS, sangat sering Anda dapat harus mengekstrak subset kecil data Anda [misalnya hanya yang terkait dengan County tunggal, atau Town], mengeditnya dengan mudah, melakukan beberapa analisis spasial secara khusus berorientasi, menghasilkan beberapa output khusus, dump sebuah shapefile dipilih dan sebagainya.
Dalam keadaan ini, menciptakan satu set tabel berasal sebagian besar dapat membantu.
Setelah Anda tidak perlu lagi untuk menjaga meja-meja tinggal singkat, Anda dapat menghilangkan mereka:
Kedua SQL konstruksi sangat berguna dalam lingkungan berorientasi GIS, sangat sering Anda dapat harus mengekstrak subset kecil data Anda [misalnya hanya yang terkait dengan County tunggal, atau Town], mengeditnya dengan mudah, melakukan beberapa analisis spasial secara khusus berorientasi, menghasilkan beberapa output khusus, dump sebuah shapefile dipilih dan sebagainya.
Dalam keadaan ini, menciptakan satu set tabel berasal sebagian besar dapat membantu.
Setelah Anda tidak perlu lagi untuk menjaga meja-meja tinggal singkat, Anda dapat menghilangkan mereka:
spatialite> DROP TABLE Villages;
spatialite> DROP TABLE Metropolis;
spatialite> VACUUM;
spatialite>
spatialite> DROP TABLE Metropolis;
spatialite> VACUUM;
spatialite>
1. pernyataan DROP benar-benar akan menghilangkan tabel dan semua data di dalamnya.
2. tidak pernah lupa untuk melakukan VAKUM setelah menjatuhkan tabel, untuk ruang yang tidak digunakan benar-benar gratis, kompak database dan sebagainya.
Sebelum meninggalkan bagian ini, lebih baik untuk menggarisbawahi sebuah konsep basilar sedikit tentang cara SQLite sangat aneh untuk mengelola jenis kolom. Perhatikan contoh berikut:
spatialite> CREATE TABLE some_table (
... > N1 SMALLINT,
... > N2 INTEGER NOT NULL,
... > N3 DOUBLE,
... > STR VARCHAR(4) NOT NULL);
spatialite> INSERT INTO some_table VALUES (10, 11, 111.1111, 'first');
spatialite> INSERT INTO some_table VALUES (NULL, 12, NULL, 'second');
spatialite> INSERT INTO some_table VALUES (30, NULL, 222.2222, NULL);
SQL error: some_table.N2 may not be NULL
semua kanan sejak sekarang, setiap DBMS lainnya Anda pernah menggunakan akan melakukan operasi ini dengan cara ini, bukan?
... > N1 SMALLINT,
... > N2 INTEGER NOT NULL,
... > N3 DOUBLE,
... > STR VARCHAR(4) NOT NULL);
spatialite> INSERT INTO some_table VALUES (10, 11, 111.1111, 'first');
spatialite> INSERT INTO some_table VALUES (NULL, 12, NULL, 'second');
spatialite> INSERT INTO some_table VALUES (30, NULL, 222.2222, NULL);
SQL error: some_table.N2 may not be NULL
semua kanan sejak sekarang, setiap DBMS lainnya Anda pernah menggunakan akan melakukan operasi ini dengan cara ini, bukan?
spatialite> INSERT INTO some_table VALUES ('aaaa', 'bbbb', 'cccc', 1234);
spatialite> INSERT INTO some_table VALUES ('A', 'B', 'C', 1234.6789);
spatialite> INSERT INTO some_table VALUES ('A', 'B', 'C', 1234.6789);
Ups, yang satu ini adalah salah satu yang tak terduga, Anda baru saja dimasukkan tanpa ada keluhan nilai string dalam kolom numerik, dan nilai numerik dalam kolom CHAR ....
itu sangat membingungkan, bukan?
itu sangat membingungkan, bukan?
spatialite> SELECT * FROM some_table;
| N1 | N2 | N3 | Str |
| 10 | 11 | 111.1111 | first |
| NULL | 12 | NULL | second |
| aaaa | bbbb | cccc | 1234 |
| A | B | C | 1234.6789 |
spatialite>
1. SQLite tidak menegakkan memeriksa tipe untuk nilai kolom
2. Anda dapat menempatkan setiap jenis data yang Anda inginkan dalam setiap kolom, tanpa batasan, tidak ada pemeriksaan dilakukan untuk memastikan kesesuaian dengan jenis kolom dideklarasikan dalam CREATE TABLE
3. Anda mungkin baik cinta atau benci ini, itu tidak sama sekali bug, ini merupakan fitur desain eksplisit SQLite.
Lagi pula, jika Anda benar-benar benar-benar perlu untuk mengimplementasikan sebuah memeriksa tipe-nilai efektif untuk kolom beberapa, SQLite dapat membantu Anda untuk melakukan hal seperti itu:
2. Anda dapat menempatkan setiap jenis data yang Anda inginkan dalam setiap kolom, tanpa batasan, tidak ada pemeriksaan dilakukan untuk memastikan kesesuaian dengan jenis kolom dideklarasikan dalam CREATE TABLE
3. Anda mungkin baik cinta atau benci ini, itu tidak sama sekali bug, ini merupakan fitur desain eksplisit SQLite.
Lagi pula, jika Anda benar-benar benar-benar perlu untuk mengimplementasikan sebuah memeriksa tipe-nilai efektif untuk kolom beberapa, SQLite dapat membantu Anda untuk melakukan hal seperti itu:
spatialite> CREATE TABLE checked_table (
... > num SMALLINT CHECK (num BETWEEN -32768 AND 32767),
... > str VARCHAR(4) CHECK (
... > length(str) <= 4 AND str BETWEEN ' ' AND 'zzzz'));
spatialite> INSERT INTO checked_table VALUES (1, 'a');
spatialite> INSERT INTO checked_table VALUES (1111, 'aaaa');
spatialite> INSERT INTO checked_table VALUES (1234, 'abcd');
spatialite> INSERT INTO checked_table VALUES ('a', 'abcd');
SQL error: constraint failed
... > num SMALLINT CHECK (num BETWEEN -32768 AND 32767),
... > str VARCHAR(4) CHECK (
... > length(str) <= 4 AND str BETWEEN ' ' AND 'zzzz'));
spatialite> INSERT INTO checked_table VALUES (1, 'a');
spatialite> INSERT INTO checked_table VALUES (1111, 'aaaa');
spatialite> INSERT INTO checked_table VALUES (1234, 'abcd');
spatialite> INSERT INTO checked_table VALUES ('a', 'abcd');
SQL error: constraint failed
it seems to work just fine, isn't it ?
spatialite> INSERT INTO checked_table VALUES (5678, 1);
spatialite> INSERT INTO checked_table VALUES ('9999', 1234);
oh no, it doesn't seem to works anymore ...
spatialite> INSERT INTO checked_table VALUES ('35000', 1);
SQL error: constraint failed
spatialite> INSERT INTO checked_table VALUES (2, 12345);
SQL error: constraint failed
spatialite>
spatialite> INSERT INTO checked_table VALUES (5678, 1);
spatialite> INSERT INTO checked_table VALUES ('9999', 1234);
oh no, it doesn't seem to works anymore ...
spatialite> INSERT INTO checked_table VALUES ('35000', 1);
SQL error: constraint failed
spatialite> INSERT INTO checked_table VALUES (2, 12345);
SQL error: constraint failed
spatialite>
4 .Melakukan beberapa analisis data spasial
Karena sekarang Anda telah mendapatkan pengetahuan yang paling dasar tentang SpatiaLite dan SQLite.
Sekarang Anda harus mampu mengelola database spasial diaktifkan, mengisinya, menambahkan tabel baru, memasukkan dan memperbarui Data spasial dan sebagainya.
Waktu telah datang ke akhirnya memeriksa hard core pengolahan data spasial, yaitu bagaimana Anda dapat mengevaluasi hubungan antara geometri.
Cara biasa SQL standar kerjanya adalah dengan mengevaluasi hubungan yang ada antara entitas, misalnya saat Anda melakukan JOIN yang memaksakan beberapa klausul seperti:
... WHERE t1.sex = t2.sex DAN t1.name = t2.name ...
Analisis spasial melakukan hal yang sama, tetapi mengevaluasi hubungan spasial yang dapat bergabung [atau memisahkan] geometri menggunakan beberapa kriteria spasial.
Sekarang Anda harus mampu mengelola database spasial diaktifkan, mengisinya, menambahkan tabel baru, memasukkan dan memperbarui Data spasial dan sebagainya.
Waktu telah datang ke akhirnya memeriksa hard core pengolahan data spasial, yaitu bagaimana Anda dapat mengevaluasi hubungan antara geometri.
Cara biasa SQL standar kerjanya adalah dengan mengevaluasi hubungan yang ada antara entitas, misalnya saat Anda melakukan JOIN yang memaksakan beberapa klausul seperti:
... WHERE t1.sex = t2.sex DAN t1.name = t2.name ...
Analisis spasial melakukan hal yang sama, tetapi mengevaluasi hubungan spasial yang dapat bergabung [atau memisahkan] geometri menggunakan beberapa kriteria spasial.
4.1 Mengevaluasi hubungan MBRs
Setiap GEOMETRI sendiri Minimum Batas Rectangle - MBR, lihat Amplop tersebut () fungsi, jika Anda tidak ingat apa MBR.
Yang ini adalah hubungan spasial yang dapat ada antara beberapa MBRs.
1. Mengevaluasi hubungan spasial yang ada antara dua geometri dengan membandingkan mereka hubungan MBRs adalah cara yang sangat tidak sempurna dan approximative untuk memeriksa hubungan spasial nyata.
2. Pokoknya, perbandingan MBRs adalah cara tercepat coarsest tetapi untuk membandingkan hubungan spasial.
Mengevaluasi hubungan yang nyata yang ada antara dua geometri kompleks sewenang-wenang mungkin merupakan pekerjaan yang memakan banyak waktu. Sebaliknya suatu perbandingan MBRs sangat cepat untuk mengevaluasi.
3. Jadi mengevaluasi MRBs setidaknya strategi terbaik untuk membatasi lapangan.
Setelah Anda telah menghilangkan [banyak] pasangan tidak kompatibel, maka anda dapat melewati untuk memeriksa lebih baik hanya pasangan [beberapa] yang mungkin menarik nyata.
Yang ini adalah hubungan spasial yang dapat ada antara beberapa MBRs.
1. Mengevaluasi hubungan spasial yang ada antara dua geometri dengan membandingkan mereka hubungan MBRs adalah cara yang sangat tidak sempurna dan approximative untuk memeriksa hubungan spasial nyata.
2. Pokoknya, perbandingan MBRs adalah cara tercepat coarsest tetapi untuk membandingkan hubungan spasial.
Mengevaluasi hubungan yang nyata yang ada antara dua geometri kompleks sewenang-wenang mungkin merupakan pekerjaan yang memakan banyak waktu. Sebaliknya suatu perbandingan MBRs sangat cepat untuk mengevaluasi.
3. Jadi mengevaluasi MRBs setidaknya strategi terbaik untuk membatasi lapangan.
Setelah Anda telah menghilangkan [banyak] pasangan tidak kompatibel, maka anda dapat melewati untuk memeriksa lebih baik hanya pasangan [beberapa] yang mungkin menarik nyata.
Sebuah masalah yang sangat umum dalam aplikasi GIS adalah satu dengan cepat dan efisien mengambil banyak entitas milik beberapa frame tertentu, misalnya: memikirkan menggambar peta persegi panjang.
Anda harus mengambil semua beberapa entitas GIS di dalam bingkai, membuang yang banyak orang di luar bingkai [yang akan invisibles sama sekali].
Anda harus mengambil semua beberapa entitas GIS di dalam bingkai, membuang yang banyak orang di luar bingkai [yang akan invisibles sama sekali].
spatialite> SELECT count(*) FROM NewTowns;
| count(*) |
| 8101 |
this one is the unfiltered dataset for NewTowns [remember: for this table GEOMETRY is a POINT class one]
spatialite> SELECT count(*) FROM NewTowns WHERE MBRContains(
... > GeomFromText('POLYGON((554000 4692000, 770000 4692000,
... > 770000 4925000, 554000 4925000, 554000 4692000))'), geom);
| count(*) |
| 480 |
spatialite>
1. the SpatiaLite MBRContains() function allows you to restrict the search field.
2. the GeomFromText('POLYGON(...)') build the MBR corresponding to current frame
[i.e. screen, some raster image, paper sheet on a printer etc]
[i.e. screen, some raster image, paper sheet on a printer etc]
spatialite> SELECT count(*) FROM NewTowns WHERE MBRContains(
... > BuildMBR(554000, 4692000, 770000, 4925000), geom);
... > BuildMBR(554000, 4692000, 770000, 4925000), geom);
| count(*) |
| 480 |
spatialite>
1. mendefinisikan sebuah MBR melalui GeomFromText ('Polygon (...)') cukup kompleks, dan tidak praktis.
2. jadi SpatiaLite mengimplementasikan jalan alternatif: Anda dapat menggunakan BuildMBR (X1, Y1, X2, Y2) fungsi dalam rangka untuk menentukan MBR.
o [X1, Y1] koordinat nilai mengidentifikasi titik pertama
o [X2, Y2] mengidentifikasi nilai-nilai koordinat titik kedua
o MBR yang dihasilkan kemudian dibangun dengan asumsi bahwa segmen garis yang diidentifikasi oleh dua titik adalah diagonal untuk persegi panjang ini
3. Fungsi lain yang serupa BuildCircleMBR (X, Y, radius).
o [X, Y] mengidentifikasi nilai-nilai koordinat titik
o lingkaran berpusat pada titik ini dan radius yang diberikan ini kemudian digunakan untuk membangun MBR
2. jadi SpatiaLite mengimplementasikan jalan alternatif: Anda dapat menggunakan BuildMBR (X1, Y1, X2, Y2) fungsi dalam rangka untuk menentukan MBR.
o [X1, Y1] koordinat nilai mengidentifikasi titik pertama
o [X2, Y2] mengidentifikasi nilai-nilai koordinat titik kedua
o MBR yang dihasilkan kemudian dibangun dengan asumsi bahwa segmen garis yang diidentifikasi oleh dua titik adalah diagonal untuk persegi panjang ini
3. Fungsi lain yang serupa BuildCircleMBR (X, Y, radius).
o [X, Y] mengidentifikasi nilai-nilai koordinat titik
o lingkaran berpusat pada titik ini dan radius yang diberikan ini kemudian digunakan untuk membangun MBR
spatialite> SELECT count(*) FROM NewTowns WHERE MBRContains(
... > BuildMBR(654000, 4692000, 770000, 4924000), geom);
| count(*) |
| 295 |
spatialite> SELECT count(*) FROM NewTowns WHERE MBRContains(
... > BuildMBR(754000, 4692000, 770000, 4924000), geom);
... > BuildMBR(754000, 4692000, 770000, 4924000), geom);
| count(*) |
| 47 |
spatialite>
1. you can easily use subsequent call to MBRContains() with different frames [MBRs]in order to obtain a zoom in sequence.
2. simply you have to use each time a wider or narrower MBR, as needed.
spatialite> SELECT count(*) FROM NewTowns WHERE MBRWithin(
... > geom, BuildMBR(754000, 4692000, 770000, 4924000));
... > geom, BuildMBR(754000, 4692000, 770000, 4924000));
| count(*) |
| 47 |
spatialite>
1. the MBRWithin() function is the same as MBRContains(), but the order of MBRs is inverted.
2. you can freely use the one of them you find more convenient; result is the same anyway.
spatialite> SELECT count(*) FROM NewHighWays WHERE MBRIntersects(
... > BuildMBR(754000, 4692000, 770000, 4924000), geom);
... > BuildMBR(754000, 4692000, 770000, 4924000), geom);
| count(*) |
| 15 |
spatialite>
4.2 Mengevaluasi hubungan antara geometri
Seperti yang telah kita lihat dalam paragraf sebelumnya, mengevaluasi hubungan spasial melalui perbandingan MBRs hanyalah sebuah trik cepat, sama sekali tidak metode yang benar-benar handal dan lengkap.
Secara umum, beberapa geometri sewenang-wenang dapat mendirikan satu (atau lebih) dari hubungan berikut:
• Kesetaraan: jika mereka secara spasial identik
• disjoint: jika persimpangan kedua geometri adalah himpunan kosong
• Touches: jika hanya titik kesamaan antara kedua geometri terletak pada batas-batas mereka serikat
• Dalam: jika geometri pertama benar-benar terkandung dalam kedua
• Tumpang tindih: jika persimpangan kedua hasil geometri pada nilai dari dimensi yang sama dari kedua geometri dan berbeda dari kedua pertama dan kedua geometri
• Persilangan: jika persimpangan kedua hasil geometri dalam dimensi nilai yang kurang dari ukuran maksimum dari kedua geometri dan nilai persimpangan termasuk poin interior untuk kedua geometri, dan nilai simpang tidak sama dengan baik yang pertama atau yang kedua geometri
• memotong: jika persimpangan kedua geometri tidak kosong
• Mengandung: jika geometri kedua id sepenuhnya berisi ke pertama
• Kaitkan: memungkinkan perbandingan sewenang-wenang atas dasar dari suatu pola Matrix
Secara umum, beberapa geometri sewenang-wenang dapat mendirikan satu (atau lebih) dari hubungan berikut:
• Kesetaraan: jika mereka secara spasial identik
• disjoint: jika persimpangan kedua geometri adalah himpunan kosong
• Touches: jika hanya titik kesamaan antara kedua geometri terletak pada batas-batas mereka serikat
• Dalam: jika geometri pertama benar-benar terkandung dalam kedua
• Tumpang tindih: jika persimpangan kedua hasil geometri pada nilai dari dimensi yang sama dari kedua geometri dan berbeda dari kedua pertama dan kedua geometri
• Persilangan: jika persimpangan kedua hasil geometri dalam dimensi nilai yang kurang dari ukuran maksimum dari kedua geometri dan nilai persimpangan termasuk poin interior untuk kedua geometri, dan nilai simpang tidak sama dengan baik yang pertama atau yang kedua geometri
• memotong: jika persimpangan kedua geometri tidak kosong
• Mengandung: jika geometri kedua id sepenuhnya berisi ke pertama
• Kaitkan: memungkinkan perbandingan sewenang-wenang atas dasar dari suatu pola Matrix
SpatiaLite membungkus fungsi-fungsi yang sesuai GEOS perpustakaan dalam rangka untuk mengevaluasi hubungan spasial intercurring antara geometri.
SQL fungsi berikut didukung oleh SpatiaLite:
SQL fungsi berikut didukung oleh SpatiaLite:
· Equals ( geom1 , geom2 )
· Disjoint ( geom1 , geom2 )
· Touches ( geom1 , geom2 )
· Within ( geom1 , geom2 )
· Overlaps ( geom1 , geom2 )
· Crosses ( geom1 , geom2 )
· Intersects ( geom1 , geom2 )
· Contains ( geom1 , geom2 )
· Relate ( geom1 , geom2 , patternMatrix )
1. all these functions may return one of the following values:
o 1 if the spatial relation is TRUE
o 0 if the spatial relation is FALSE
o -1 if there is some error [i.e. one or both geometries are NULL]
2. the Relate() function is very general one, and requires a patternMatrix defining what kind of spatial relation has to be checked:
o patternMatrix is a 9 characters string representing a 3 x 3 matrix
o each character represents an intersection between the interior, boundary and exterior of each one geometry
§ T means TRUE
§ F means FALSE
§ * means don't care
§ 0, 1, 2 means that an intersection must exists, and must have given dimension
o e.g. the "T*T***T**" string corresponds to the overlaps matrix
and the "FF*FF****" string corresponds to the disjoint matrix
and the "FF*FF****" string corresponds to the disjoint matrix
3.
spatialite> SELECT NewRegions.Name, COUNT(*) FROM NewTowns, NewRegions
... > WHERE NewRegions.Name IN (
... > 'VALLE D''AOSTA', 'PIEMONTE', 'UMBRIA', 'LOMBARDIA',
... > 'CALABRIA', 'MOLISE', 'MARCHE', 'BASILICATA') AND
... > Within(NewTowns.geom, NewRegions.Geometry)
... > GROUP BY NewRegions.Name;
spatialite> SELECT NewRegions.Name, COUNT(*) FROM NewTowns, NewRegions
... > WHERE NewRegions.Name IN (
... > 'VALLE D''AOSTA', 'PIEMONTE', 'UMBRIA', 'LOMBARDIA',
... > 'CALABRIA', 'MOLISE', 'MARCHE', 'BASILICATA') AND
... > Within(NewTowns.geom, NewRegions.Geometry)
... > GROUP BY NewRegions.Name;
| Name | COUNT(*) |
| BASILICATA | 133 |
| CALABRIA | 409 |
| LOMBARDIA | 1548 |
| MARCHE | 248 |
| MOLISE | 136 |
| PIEMONTE | 1201 |
| UMBRIA | 91 |
| VALLE D'AOSTA | 74 |
spatialite>
1. query ini menghitung berapa banyak kota jatuh di dalam batas Daerah
2. kita hanya ingin memindai daftar terbatas Kawasan, dan akibatnya kita menggunakan IN (..) klausa
3. yang Dalam () fungsi maka akan menguji hubungan spasial yang ada antara masing-masing kota dan batas wilayah
4. Sebuah rasa ingin tahu kecil: seperti yang Anda bisa melihat, ada sebuah notasi yang aneh dalam IN () klausa:
string 'Valle d''AOSTA' benar-benar membutuhkan empat Apeks [itu dimaksudkan, itu bukan kesalahan ketik]
ini adalah karena ada tanda kutip dalam kata benda ini, dan sintaks SQL berpura-pura apostrof topeng menandai mereka sebagai puncak ganda
5. karena Anda dapat dengan mudah melihat, yang satu ini adalah query berjalan lambat.
Alasan menjelaskan perilaku ini sangat mudah untuk mengidentifikasi:
o Dalam () fungsi menyiratkan suatu beban komputasi berat (seperti halnya fungsi hubungan lain spasial tidak)
o tabel NewTowns berisi beberapa baris 8000
o kami telah diminta untuk memilih 8 baris dari tabel NewRegions
o begitu, permintaan ini harus mengevaluasi beberapa 64000 kali Dalam () hubungan, dan ini memakan waktu lama ...
Kita dapat mengambil keuntungan penuh dari penggunaan yang tepat dari Spasial Indeks dalam rangka mengoptimalkan query ini
Kami lebih baik langkah ini akan menjelaskan lebih jauh, ketika menganalisis Indeks hal Tata Ruang [jika Anda sekarang merasa keingintahuan morbose tentang hal ini, Anda bisa melompat segera di sini]
2. kita hanya ingin memindai daftar terbatas Kawasan, dan akibatnya kita menggunakan IN (..) klausa
3. yang Dalam () fungsi maka akan menguji hubungan spasial yang ada antara masing-masing kota dan batas wilayah
4. Sebuah rasa ingin tahu kecil: seperti yang Anda bisa melihat, ada sebuah notasi yang aneh dalam IN () klausa:
string 'Valle d''AOSTA' benar-benar membutuhkan empat Apeks [itu dimaksudkan, itu bukan kesalahan ketik]
ini adalah karena ada tanda kutip dalam kata benda ini, dan sintaks SQL berpura-pura apostrof topeng menandai mereka sebagai puncak ganda
5. karena Anda dapat dengan mudah melihat, yang satu ini adalah query berjalan lambat.
Alasan menjelaskan perilaku ini sangat mudah untuk mengidentifikasi:
o Dalam () fungsi menyiratkan suatu beban komputasi berat (seperti halnya fungsi hubungan lain spasial tidak)
o tabel NewTowns berisi beberapa baris 8000
o kami telah diminta untuk memilih 8 baris dari tabel NewRegions
o begitu, permintaan ini harus mengevaluasi beberapa 64000 kali Dalam () hubungan, dan ini memakan waktu lama ...
Kita dapat mengambil keuntungan penuh dari penggunaan yang tepat dari Spasial Indeks dalam rangka mengoptimalkan query ini
Kami lebih baik langkah ini akan menjelaskan lebih jauh, ketika menganalisis Indeks hal Tata Ruang [jika Anda sekarang merasa keingintahuan morbose tentang hal ini, Anda bisa melompat segera di sini]
spatialite> SELECT t2.Name, t2.Peoples,
... > Distance(t1.geom, t2.geom) AS Distance
... > FROM NewTowns AS t1, NewTowns AS t2
... > WHERE t1.Name = 'Firenze' AND
... > Distance(t1.geom, t2.geom) < 10000;
... > Distance(t1.geom, t2.geom) AS Distance
... > FROM NewTowns AS t1, NewTowns AS t2
... > WHERE t1.Name = 'Firenze' AND
... > Distance(t1.geom, t2.geom) < 10000;
| Name | Peoples | Distance |
| Bagno a Ripoli | 25232 | 5794.81919712765 |
| Impruneta | 14637 | 9196.22864616252 |
| Fiesole | 14085 | 5001.54448646674 |
| Scandicci | 50136 | 8106.97263099484 |
| Sesto Fiorentino | 46054 | 8674.74855857514 |
| Firenze | 356118 | 0.0 |
spatialite>
4.3 Boolean operasi pada geometri
Kita dapat menerapkan operasi boolean berbagai pada dua geometri untuk mendapatkan geometri ketiga.
• Persimpangan: kembali geometri yang merupakan persimpangan set kedua geometri
itu sama dengan DAN operator boolean
• Perbedaan: kembali geometri yang penutupan perbedaan set kedua geometri
itu sama dengan operator DAN TIDAK boolean
• GUnion: kembali geometri yang adalah gabungan set kedua geometri
itu sama dengan operator boolean OR
• SymDifference: Return Geometri yang penutupan perbedaan simetris set kedua geometri
itu sama dengan operator boolean XOR
• Persimpangan: kembali geometri yang merupakan persimpangan set kedua geometri
itu sama dengan DAN operator boolean
• Perbedaan: kembali geometri yang penutupan perbedaan set kedua geometri
itu sama dengan operator DAN TIDAK boolean
• GUnion: kembali geometri yang adalah gabungan set kedua geometri
itu sama dengan operator boolean OR
• SymDifference: Return Geometri yang penutupan perbedaan simetris set kedua geometri
itu sama dengan operator boolean XOR
SpatiaLite membungkus fungsi-fungsi yang sesuai GEOS perpustakaan dalam rangka untuk melakukan operasi boolean pada geometri.
SQL fungsi berikut didukung oleh SpatiaLite:
• geom3 = temu (geom1, geom2)
• geom3 = Selisih (geom1, geom2)
• geom3 = GUnion (geom1, geom2)
• geom3 = SymDifference (geom1, geom2)
4.4 Selanjutnya operasi pada geometri
Kita bisa menggunakan operasi berguna lainnya di sebuah geometri tunggal untuk mendapatkan satu detik.
• ConvexHull: diberi satu set titik X kembali cembung mengandung minimal set X.
• Buffer: kembali zona jarak tertentu di setiap geometri generik.
• Menyederhanakan: kembali geometri sederhana, yaitu salah satu berisi jumlah yang lebih kecil dari titik tapi masih melestarikan bentuk asli dengan pendekatan memuaskan.
Beberapa contoh (ilustrasi) praktis dapat membantu Anda untuk memahami lebih baik:
• ConvexHull: diberi satu set titik X kembali cembung mengandung minimal set X.
• Buffer: kembali zona jarak tertentu di setiap geometri generik.
• Menyederhanakan: kembali geometri sederhana, yaitu salah satu berisi jumlah yang lebih kecil dari titik tapi masih melestarikan bentuk asli dengan pendekatan memuaskan.
Beberapa contoh (ilustrasi) praktis dapat membantu Anda untuk memahami lebih baik:
SpatiaLite membungkus fungsi-fungsi yang sesuai GEOS perpustakaan untuk melakukan semacam ini operasi pada geometri.
SQL fungsi berikut didukung oleh SpatiaLite:
• geom2 = ConvexHull (geom1)
• geom2 = Buffer (geom1, radius)
• geom2 = Sederhanakan (geom1, toleransi)
• geom2 = SimplifyPreserveTopology (geom1, toleransi)
SQL fungsi berikut didukung oleh SpatiaLite:
• geom2 = ConvexHull (geom1)
• geom2 = Buffer (geom1, radius)
• geom2 = Sederhanakan (geom1, toleransi)
• geom2 = SimplifyPreserveTopology (geom1, toleransi)
1. semua fungsi kembali GEOMETRI merupakan hasil dari operasi yang diminta
harap dicatat bahwa GEOMETRI dikembalikan mungkin merupakan satu kosong
2. standar OpenGis mendefinisikan ConvexHull () dan Buffer () fungsi;
yang Sederhanakan () dan SimplifyPreserveTopology () tidak didefinisikan oleh OpenGis, tetapi biasanya diterapkan oleh banyak spasial diaktifkan DBMSs
3. ConvexHull () dapat diterapkan untuk setiap jenis geometri, karena kita dapat mengasumsikan bahwa garis simpul dan / atau titik poligon perbatasan adalah Poin tetap
4. Buffer () juga dapat diterapkan pada setiap jenis geometri.
jari-jari yang diminta dimaksudkan sebagai dinyatakan dalam satuan yang sama digunakan oleh Geometri dimaksud
5. Sederhanakan () dapat diterapkan hanya untuk geometri linear [ini termasuk juga batas poligon], tetapi tidak untuk Poin atau MultiPoints.
faktor toleransi menentukan jumlah yang diinginkan yaitu penyederhanaan [nilai toleransi terbesar menghasilkan penyederhanaan kuat daripada satu] terkecil
toleransi harus dinyatakan dalam satuan yang sama digunakan oleh Geometri dimaksud
6. SimplifyPreserveTopology () merupakan versi khusus Sederhanakan (), menerapkan perawatan ekstra untuk sepenuhnya menjaga topologi asli.
misalnya yang terbaik cocok untuk Poligon termasuk lubang internal.
harap dicatat bahwa GEOMETRI dikembalikan mungkin merupakan satu kosong
2. standar OpenGis mendefinisikan ConvexHull () dan Buffer () fungsi;
yang Sederhanakan () dan SimplifyPreserveTopology () tidak didefinisikan oleh OpenGis, tetapi biasanya diterapkan oleh banyak spasial diaktifkan DBMSs
3. ConvexHull () dapat diterapkan untuk setiap jenis geometri, karena kita dapat mengasumsikan bahwa garis simpul dan / atau titik poligon perbatasan adalah Poin tetap
4. Buffer () juga dapat diterapkan pada setiap jenis geometri.
jari-jari yang diminta dimaksudkan sebagai dinyatakan dalam satuan yang sama digunakan oleh Geometri dimaksud
5. Sederhanakan () dapat diterapkan hanya untuk geometri linear [ini termasuk juga batas poligon], tetapi tidak untuk Poin atau MultiPoints.
faktor toleransi menentukan jumlah yang diinginkan yaitu penyederhanaan [nilai toleransi terbesar menghasilkan penyederhanaan kuat daripada satu] terkecil
toleransi harus dinyatakan dalam satuan yang sama digunakan oleh Geometri dimaksud
6. SimplifyPreserveTopology () merupakan versi khusus Sederhanakan (), menerapkan perawatan ekstra untuk sepenuhnya menjaga topologi asli.
misalnya yang terbaik cocok untuk Poligon termasuk lubang internal.
5. Mengelola Koordinat Sistem Referensi dan Transformasi Koordinat
Setiap koordinat nilai, untuk sepenuhnya memenuhi syarat, perlu secara eksplisit ditugaskan ke beberapa SRID, atau Spasial Referensi Identifier.
Nilai ini mengidentifikasi geometri yang terkait Spatial Reference System menggambarkan koordinat ruang di mana objek geometri didefinisikan.
Sebagai aturan umum, geometri yang berbeda dapat saling beroperasi dengan cara yang berarti hanya jika mereka koordinat ditunjukkan dalam Referensi Sistem koordinat yang sama.
Sangat sering beberapa jenis koordinat proyeksi ulang diperlukan dalam rangka untuk mengkonversi data yang berbeda GIS dalam, unik homogen Referensi, Sistem Koordinat dan dengan demikian memungkinkan interoperation dan integrasi.
Nilai ini mengidentifikasi geometri yang terkait Spatial Reference System menggambarkan koordinat ruang di mana objek geometri didefinisikan.
Sebagai aturan umum, geometri yang berbeda dapat saling beroperasi dengan cara yang berarti hanya jika mereka koordinat ditunjukkan dalam Referensi Sistem koordinat yang sama.
Sangat sering beberapa jenis koordinat proyeksi ulang diperlukan dalam rangka untuk mengkonversi data yang berbeda GIS dalam, unik homogen Referensi, Sistem Koordinat dan dengan demikian memungkinkan interoperation dan integrasi.
Eropa Petroleum Survey Group [EPSG] memelihara dan mendistribusikan dataset besar parameter geodetik cukup menggambarkan setiap koordinat Sistem Referensi dan Transformasi Koordinat digunakan di seluruh dunia untuk data GIS.
SpatiaLite sendiri menerapkan SRIDs untuk setiap jenis kelas geometris, dan mendukung dataset EPSG untuk mengidentifikasi koordinat Referensi Systems.
Para my_new_db.sqlite sudah berisi EPSG data; dalam latihan sebelumnya, ketika kita dimuat shapefile, kita disebut
membaca init_spatialite-2.3.sql.
script untuk menginisialisasi Spasial metadata, yang Anda ingat?
Jadi kita dapat dengan cepat memulai sesi spatialite.exe baru:
SpatiaLite sendiri menerapkan SRIDs untuk setiap jenis kelas geometris, dan mendukung dataset EPSG untuk mengidentifikasi koordinat Referensi Systems.
Para my_new_db.sqlite sudah berisi EPSG data; dalam latihan sebelumnya, ketika kita dimuat shapefile, kita disebut
membaca init_spatialite-2.3.sql.
script untuk menginisialisasi Spasial metadata, yang Anda ingat?
Jadi kita dapat dengan cepat memulai sesi spatialite.exe baru:
spatialite> SELECT * FROM spatial_ref_sys LIMIT 5;
| srid | auth_name | auth_srid | ref_sys_name | proj4text |
| 2000 | epgs | 2000 | Anguilla 1957 / British West Indies Grid | +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs |
| 2001 | epgs | 2001 | Antigua 1943 / British West Indies Grid | +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs |
| 2002 | epgs | 2002 | Dominica 1945 / British West Indies Grid | +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs |
| 2003 | epgs | 2003 | Grenada 1953 / British West Indies Grid | +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs |
| 2004 | epgs | 2004 | Montserrat 1958 / British West Indies Grid | +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs |
spatialite>
1. tabel spatial_ref_sys adalah metadata Spasial satu, dan diinisialisasi dengan menjalankan script init_spatialite-2.3.sql
2. Sistem Referensi Koordinat masing-masing secara unik diidentifikasi oleh nilai srid.
3. yang masing-masing auth_name dan auth_srid mengidentifikasi otoritas menghasilkan data dan Srid asli
4. setiap CSR berkualitas oleh ref_sys_name dimengerti
5. dan memiliki banyak [cukup jelas] parameter proyeksi geodesi di kolom proj4text
Jangan khawatir tentang ini ... Anda hanya bisa mendapatkan mereka sebagai ilmu hitam untuk sekarang ...
Jika Anda ingin mempelajari lebih banyak tentang mereka, Anda bermanfaat dapat membaca sebagai berikut: andftp http://en.wikipedia.org/wiki/Geodetic: / / ftp.remotesensing.org/proj/OF90-284.pdf
2. Sistem Referensi Koordinat masing-masing secara unik diidentifikasi oleh nilai srid.
3. yang masing-masing auth_name dan auth_srid mengidentifikasi otoritas menghasilkan data dan Srid asli
4. setiap CSR berkualitas oleh ref_sys_name dimengerti
5. dan memiliki banyak [cukup jelas] parameter proyeksi geodesi di kolom proj4text
Jangan khawatir tentang ini ... Anda hanya bisa mendapatkan mereka sebagai ilmu hitam untuk sekarang ...
Jika Anda ingin mempelajari lebih banyak tentang mereka, Anda bermanfaat dapat membaca sebagai berikut: andftp http://en.wikipedia.org/wiki/Geodetic: / / ftp.remotesensing.org/proj/OF90-284.pdf
spatialite> SELECT DISTINCT Srid(geom) FROM NewTowns;
| Srid(geom) |
| 32632 |
spatialite> SELECT DISTINCT SRID(NewTowns.geom), spatial_ref_sys.ref_sys_name
... > FROM NewTowns, spatial_ref_sys
... > WHERE SRID(NewTowns.geom) = spatial_ref_sys.srid;
... > FROM NewTowns, spatial_ref_sys
... > WHERE SRID(NewTowns.geom) = spatial_ref_sys.srid;
| SRID(NewTowns.geom) | spatial_ref_sys.ref_sys_name |
| 32632 | WGS 84 / UTM zone 32N |
spatialite>
1. the SpatiaLite SRID() function allows you to identify the srid value that identifies any kind of geometry.
2. you can perform a simple join to discover what srid 32632 really means.
Now suppose that for any good reason you absolutely need to transform coordinates, in such a way to obtain a new dataset pertaining to the WGS 84Coordinate Reference System.
You can do this quite complex task by simply using a plain SQL query.
You can do this quite complex task by simply using a plain SQL query.
spatialite> BEGIN;
spatialite> SELECT AddGeometryColumn('NewTowns', 'wgs84', 4326, 'POINT', 2);
spatialite> SELECT AddGeometryColumn('NewTowns', 'wgs84', 4326, 'POINT', 2);
| AddGeometryColumn('NewTowns', 'wgs84', 4326, 'POINT', 2) |
| 1 |
spatialite> UPDATE NewTowns SET wgs84 = Transform(geom, 4326);
spatialite> COMMIT;
spatialite> SELECT AsText(geom), Srid(geom),
... > AsText(wgs84), Srid(wgs84) FROM NewTowns LIMIT 5;
spatialite> COMMIT;
spatialite> SELECT AsText(geom), Srid(geom),
... > AsText(wgs84), Srid(wgs84) FROM NewTowns LIMIT 5;
| AsText(geom) | Srid(geom) | AsText(wgs84) | Srid(wgs84) |
| POINT(427002.77 4996361.33) | 32632 | POINT(8.071929 45.116952) | 4326 |
| POINT(367470.48 4962414.5) | 32632 | POINT(7.324219 44.802838) | 4326 |
| POINT(390084.12 5025551.73) | 32632 | POINT(7.596214 45.374854) | 4326 |
| POINT(425246.99 5000248.3) | 32632 | POINT(8.049028 45.151753) | 4326 |
| POINT(426418.89 4957737.37) | 32632 | POINT(8.070136 44.769244) | 4326 |
spatialite>
1. yang srid yang mengidentifikasi WGS 84 adalah 4326.
Anda dapat memeriksa ini sendiri.
2. Transform SpatiaLite () fungsi mendapatkan sebuah geometri baru dari salah satu yang asli, menerapkan koordinat proyeksi ulang sesuai kebutuhan.
3. Sekarang Anda memiliki dua geometri alternatif untuk tabel NewTowns:
o kolom Geom asli berisi geometri di 32623 - zona koordinat UTM 32N Reference System.
o kolom WGS84 baru berisi geometri di 4326 - Sistem Referensi Koordinat WGS84.
o Anda sekarang dapat menggunakan satu atau yang lain pada Anda akan, seperti yang dipersyaratkan dan tepat.
Anda dapat memeriksa ini sendiri.
2. Transform SpatiaLite () fungsi mendapatkan sebuah geometri baru dari salah satu yang asli, menerapkan koordinat proyeksi ulang sesuai kebutuhan.
3. Sekarang Anda memiliki dua geometri alternatif untuk tabel NewTowns:
o kolom Geom asli berisi geometri di 32623 - zona koordinat UTM 32N Reference System.
o kolom WGS84 baru berisi geometri di 4326 - Sistem Referensi Koordinat WGS84.
o Anda sekarang dapat menggunakan satu atau yang lain pada Anda akan, seperti yang dipersyaratkan dan tepat.
6. Melakukan SQL query secara langsung pada shapefile
DBMS SQLite mengimplementasikan sebuah fitur yang sangat menarik, Anda dapat mengembangkan beberapa driver khusus untuk mengakses generik [dan mungkin eksotis] sumber data, dan kemudian mereka data eksternal akan muncul untuk mesin SQL persis seperti mereka mana yang asli.
Ini berarti Anda dapat menerapkan operasi SQL pada mereka, jika sesuai / mungkin dan jika sopir menawarkan dukungan yang memadai.
Ini berarti Anda dapat menerapkan operasi SQL pada mereka, jika sesuai / mungkin dan jika sopir menawarkan dukungan yang memadai.
Perpanjangan VirtualShape menerapkan semacam ini driver untuk SQLite.
Tidak hanya; VirtualShape dirancang untuk berinteraksi dengan sangat ketat dengan SpatiaLite, dalam rangka mendukung akses langsung lengkap untuk shapefile melalui SQL standar, baik untuk atribut dan geometri.
Tidak hanya; VirtualShape dirancang untuk berinteraksi dengan sangat ketat dengan SpatiaLite, dalam rangka mendukung akses langsung lengkap untuk shapefile melalui SQL standar, baik untuk atribut dan geometri.
1. Perpanjangan VirtualShape secara otomatis dibatasi dalam ekstensi SpatiaLite, sehingga saat memuat SpatiaLite Anda dapat melakukan query SQL standar langsung di shapefile, tanpa perlu sama sekali untuk impor mereka dalam beberapa tabel SQLite.
2. kita dapat melakukan tes yang sangat cepat dengan menggunakan satu shapefile, yaitu shape_towns kami telah dibuat sebelumnya.
2. kita dapat melakukan tes yang sangat cepat dengan menggunakan satu shapefile, yaitu shape_towns kami telah dibuat sebelumnya.
spatialite> CREATE VIRTUAL TABLE test_shape USING VirtualShape(shape_towns, CP1252, 32632);
spatialite> PRAGMA table_info(test_shape);
spatialite> PRAGMA table_info(test_shape);
| cid | name | type | notnull | dflt_value | pk |
| 0 | PK_UID | INT | 0 | 0 | |
| 1 | Geometry | BLOB | 0 | 0 | |
| 3 | Name | VARCHAR(62) | 0 | 0 | |
| 4 | Peoples | DOUBLE | 0 | 0 | |
| 5 | LocalCounc | VARCHAR(1) | 0 | 0 | |
| 6 | County | VARCHAR(1) | 0 | 0 | |
| 7 | Region | VARCHAR(1) | 0 | 0 |
spatialite>
1. dengan CREATE TABLE VIRTUAL Anda meminta SQLite untuk mengakses beberapa sumber data eksternal eksotis:
test_shape o adalah nama tabel [dari perspektif SQL]
o VirtualShape MENGGUNAKAN () deklarasi menentukan nama driver yang ingin Anda gunakan
shape_towns
test_shape o adalah nama tabel [dari perspektif SQL]
o VirtualShape MENGGUNAKAN () deklarasi menentukan nama driver yang ingin Anda gunakan
shape_towns
o adalah argumen pertama yang diperlukan oleh driver VirtualShape, dan mengidentifikasi beberapa jalur shapefile [tanpa akhiran ditambahkan!]
CP1252
CP1252
o Argumen kedua menetapkan charset_name digunakan untuk mengkodekan nilai-nilai alfanumerik yang shapefile's atribut.
Apakah Anda ingat? Kami menggunakan CP1252 Windows Latin-1 saat mengekspor shapefile ini.
Argumen ketiga 32.632 o menentukan SRID yang akan digunakan untuk geometri dalam shapefile ini
2 . yang pragma info_table hanya permintaan SQLite untuk menampilkan semua kolom dalam tabel, Anda sudah diketahui ini.
3. seperti yang Anda lihat, setiap atribut yang ditetapkan untuk shapefile Anda telah dipetakan ke dalam jenis SQL yang sesuai.
4. Anda dapat melihat juga bahwa ada dua kolom lain:
o kolom PK_UID adalah sebuah nilai unik yang mengidentifikasi setiap entitas.
[itu hanya mengidentifikasi posisi badan nomor relatif alias catatan]
o kolom berisi geometri Geometri shapefile, tetapi diterjemahkan ke dalam standar SpatiaLite [OpenGis] geometri.
Apakah Anda ingat? Kami menggunakan CP1252 Windows Latin-1 saat mengekspor shapefile ini.
Argumen ketiga 32.632 o menentukan SRID yang akan digunakan untuk geometri dalam shapefile ini
2 . yang pragma info_table hanya permintaan SQLite untuk menampilkan semua kolom dalam tabel, Anda sudah diketahui ini.
3. seperti yang Anda lihat, setiap atribut yang ditetapkan untuk shapefile Anda telah dipetakan ke dalam jenis SQL yang sesuai.
4. Anda dapat melihat juga bahwa ada dua kolom lain:
o kolom PK_UID adalah sebuah nilai unik yang mengidentifikasi setiap entitas.
[itu hanya mengidentifikasi posisi badan nomor relatif alias catatan]
o kolom berisi geometri Geometri shapefile, tetapi diterjemahkan ke dalam standar SpatiaLite [OpenGis] geometri.
spatialite> SELECT PK_UID, Name, Peoples, AsText(Geometry)
... > FROM test_shape
... > WHERE Peoples > 350000 ORDER BY Name;
... > FROM test_shape
... > WHERE Peoples > 350000 ORDER BY Name;
| PK_UID | Name | Peoples | AsText(Geometry) |
| 8078 | Bologna | 371217.0 | POINT(686263.23 4929405.15) |
| 7980 | Firenze | 356118.0 | POINT(681514.97 4848768.02) |
| 203 | Genova | 610307.0 | POINT(492370.69 4918665.57) |
| 8003 | Milano | 1256211.0 | POINT(514820.49 5034534.56) |
| 8072 | Napoli | 1004500.0 | POINT(942636.1 4535272.55) |
| 7922 | Palermo | 686722.0 | POINT(880179.17 4227024.08) |
| 7918 | Roma | 2546804.0 | POINT(788703.57 4645636.3) |
| 8012 | Torino | 865263.0 | POINT(395553.63 4991768.9) |
spatialite>
1. driver VirtualShape diserahkan secara fisik mengakses data sumber eksternal [sebenarnya, sebuah shapefile]
@ dan kemudian melakukan setiap konversi format data yang diminta
@ sehingga memungkinkan mesin SQL untuk mengolah data persis dengan cara yang sama seolah-olah mereka di mana data asli SQL
2. pembatasan-satunya adalah bahwa [untuk saat ini ...] pelaksanaan VirtualShape saat ini terbatas untuk membaca operasi hanya
@ sehingga Anda tidak diizinkan untuk melakukan apapun DELETE, INSERT atau perintah UPDATE.
@ Anda malah bisa melakukan apapun perintah SELECT menggunakan VIRTUAL TABEL langsung didasarkan pada beberapa shapefile melalui VirtualShape.
3. harap dicatat bahwa VIRTUAL TABEL definisi disimpan permanen dalam database SQLite
@ jika Anda menghentikan sesi saat ini SQLite Anda, Anda akan menemukan saat Anda memulai sesi baru dengan menggunakan database yang sama bahwa tabel-tabel virtual Anda masih ada dan berlaku.
@ Anda secara eksplisit harus menghancurkan apapun VIRTUAL TABLE, dalam cara yang sama Anda menghancurkan tabel biasa.
@ dan kemudian melakukan setiap konversi format data yang diminta
@ sehingga memungkinkan mesin SQL untuk mengolah data persis dengan cara yang sama seolah-olah mereka di mana data asli SQL
2. pembatasan-satunya adalah bahwa [untuk saat ini ...] pelaksanaan VirtualShape saat ini terbatas untuk membaca operasi hanya
@ sehingga Anda tidak diizinkan untuk melakukan apapun DELETE, INSERT atau perintah UPDATE.
@ Anda malah bisa melakukan apapun perintah SELECT menggunakan VIRTUAL TABEL langsung didasarkan pada beberapa shapefile melalui VirtualShape.
3. harap dicatat bahwa VIRTUAL TABEL definisi disimpan permanen dalam database SQLite
@ jika Anda menghentikan sesi saat ini SQLite Anda, Anda akan menemukan saat Anda memulai sesi baru dengan menggunakan database yang sama bahwa tabel-tabel virtual Anda masih ada dan berlaku.
@ Anda secara eksplisit harus menghancurkan apapun VIRTUAL TABLE, dalam cara yang sama Anda menghancurkan tabel biasa.
spatialite> DROP TABLE test_shape;
spatialite>
spatialite>
1. Anda VIRTUAL TABEL akan dibatalkan, dan tidak lagi tersedia
2. jangan khawatir tentang shapefile eksternal asli, masih ada, tanpa modifikasi.
Menjatuhkan VIRTUAL TABEL hanya membatalkan link SQLite dengan sumber data eksternal, tapi jangan menghapus yang satu ini nanti.
2. jangan khawatir tentang shapefile eksternal asli, masih ada, tanpa modifikasi.
Menjatuhkan VIRTUAL TABEL hanya membatalkan link SQLite dengan sumber data eksternal, tapi jangan menghapus yang satu ini nanti.
7. Performing SQL query secara langsung pada file CSV atau TXT-tab
Format berbasis teks delimited yang luas, biasanya Anda dapat mengekspor cukup segala jenis data tabel dengan menggunakan format CSV atau TXT-tab. Setiap spreadsheet mainstream [seperti MS Excel atau Open Office Calc] mendukung impor / ekspor ke dan dari teks delimited.
Modul VirtualText adalah driver lain TABEL VIRTUAL mendukung langsung baca saja akses ke CSV dan file TXT-tab. Mari kita lihat contoh yang sangat sedehana.
Modul VirtualText adalah driver lain TABEL VIRTUAL mendukung langsung baca saja akses ke CSV dan file TXT-tab. Mari kita lihat contoh yang sangat sedehana.
Author,Book,Lang,Category,Price
"Alighieri, Dante",Divina commedia,Italian,Literature,"12,50"
"Hobbes, Thomas",The Leviathan,English,Philosophy,"18,75"
"Shakespeare, William",Julius Cesar,English,Literature,"8,25"
"Knut, Donald",The art of computer programming,English,Computing,"35,50"
Stendhal,Le rouge et le noir,French,Literature,"8,50"
"Gould, Stephen Jay",Wonderful life,English,Biology,"12,60"
"Diderot, Denis",Jacques le fataliste,French,Literature,"6,50"
"Mann, Heinrich",Der blaue Engel,German,Literature,"6,60"
"Caesar, Caius Julius",Commentarii de bello gallico,Latin,History,"15,00"
"Morris, Desmond",The naked ape,English,Biology,"8,75"
"Kerningham, Brian : Ritchie, Dennis",The C programming Language,English,Computing,"17,50"
"de Cervantes, Miguel",Don Quichote,Spanish,Literature,"14,20"
Voltaire,Traité sur la tolérance,French,Philosophy,"12,00"
"Mann, Thomas",Der Zauberberg,German,Literature,"11,00"
"Darwin, Charles",Origin of the Species,English,Biology,"9,50"
"Gibson, Henry W.",The decline and fall of the Roman Empire,English,History,"18,50"
"Flaubert, Gustave",L'éducation sentimentale,Literature,French,"7,50"
"Thackeray, William M.",Vanity fair,English,Literature,"10,00"
"Zola, Emile",Germinal,French,Literature,"8,40"
"Dawkins, Richard",The selfish gene,English,Biology,"12,50"
"Dickens, Charles",Our mutual friend,English,Literature,"9,30"
"Marx, Karl",Grundrisse der Kritik der politischen OEkonomie,German,Philosophy",10,00"
"Manzoni, Alessandro",I promessi sposi,Italian,Literature,"15,00"
"Alighieri, Dante",Divina commedia,Italian,Literature,"12,50"
"Hobbes, Thomas",The Leviathan,English,Philosophy,"18,75"
"Shakespeare, William",Julius Cesar,English,Literature,"8,25"
"Knut, Donald",The art of computer programming,English,Computing,"35,50"
Stendhal,Le rouge et le noir,French,Literature,"8,50"
"Gould, Stephen Jay",Wonderful life,English,Biology,"12,60"
"Diderot, Denis",Jacques le fataliste,French,Literature,"6,50"
"Mann, Heinrich",Der blaue Engel,German,Literature,"6,60"
"Caesar, Caius Julius",Commentarii de bello gallico,Latin,History,"15,00"
"Morris, Desmond",The naked ape,English,Biology,"8,75"
"Kerningham, Brian : Ritchie, Dennis",The C programming Language,English,Computing,"17,50"
"de Cervantes, Miguel",Don Quichote,Spanish,Literature,"14,20"
Voltaire,Traité sur la tolérance,French,Philosophy,"12,00"
"Mann, Thomas",Der Zauberberg,German,Literature,"11,00"
"Darwin, Charles",Origin of the Species,English,Biology,"9,50"
"Gibson, Henry W.",The decline and fall of the Roman Empire,English,History,"18,50"
"Flaubert, Gustave",L'éducation sentimentale,Literature,French,"7,50"
"Thackeray, William M.",Vanity fair,English,Literature,"10,00"
"Zola, Emile",Germinal,French,Literature,"8,40"
"Dawkins, Richard",The selfish gene,English,Biology,"12,50"
"Dickens, Charles",Our mutual friend,English,Literature,"9,30"
"Marx, Karl",Grundrisse der Kritik der politischen OEkonomie,German,Philosophy",10,00"
"Manzoni, Alessandro",I promessi sposi,Italian,Literature,"15,00"
Yang sebelumnya adalah contoh dari CSV, yaitu merupakan Comma Separated Value file teks.
Anda hanya perlu menyalin ini CSV contoh, paste ke editor teks pilihan anda (notepad, vi ...); dan kemudian menyimpan file books.txt.
Sekarang Anda siap untuk memulai sesi SpatiaLite:
Anda hanya perlu menyalin ini CSV contoh, paste ke editor teks pilihan anda (notepad, vi ...); dan kemudian menyimpan file books.txt.
Sekarang Anda siap untuk memulai sesi SpatiaLite:
spatialite> CREATE VIRTUAL TABLE books USING
... > VirtualText(books.txt, CP1252, 1, COMMA, DOUBLEQUOTE, ',');
spatialite> PRAGMA table_info(books);
... > VirtualText(books.txt, CP1252, 1, COMMA, DOUBLEQUOTE, ',');
spatialite> PRAGMA table_info(books);
| cid | name | type | notnull | dflt_value | pk |
| 0 | ROWNO | INTEGER | 0 | 0 | |
| 1 | Author | TEXT | 0 | 0 | |
| 2 | Book | TEXT | 0 | 0 | |
| 3 | Lang | TEXT | 0 | 0 | |
| 4 | Category | TEXT | 0 | 0 | |
| 5 | Price | DOUBLE | 0 | 0 |
spatialite>
v driver VirtualText diserahkan secara fisik mengakses sumber data eksternal [sebenarnya, CSV atau TXT-tab file teks]
Ø parameter pertama yang dibutuhkan oleh VIRTUAL CREATE TABLE ... MENGGUNAKAN VirtualText (...) adalah pathname textfile
Ø parameter kedua adalah encoding charset yang digunakan oleh textfile
Ø parameter ketiga [opsional] dapat digunakan untuk memilih bagaimana menangani baris pertama:
ü Anda dapat menggunakan 1 nilai [default] jika Baris pertama berisi nama kolom
ü sebaliknya, menggunakan nilai 0 jika baris pertama hanya berisi nilai kolom polos, dalam kejadian ini VirtualText akan menghasilkan nama standar untuk setiap kolom
Ø parameter keempat [opsional] dapat digunakan untuk memilih pemisah desimal:
ü melewati [default] POINT nilai yang Anda tentukan itu. harus digunakan sebagai pemisah desimal
ü sebaliknya, mengirimkan nilai koma Anda menetapkan bahwa, harus digunakan sebagai pemisah desimal
Ø Parameter ke lima [opsional] dapat digunakan untuk memilih pemisah teks:
ü melewati [default] nilai DOUBLEQUOTE Anda menetapkan bahwa "harus digunakan sebagai pemisah teks
ü sebaliknya, mengirimkan nilai SINGLEQUOTE Anda menetapkan bahwa 'harus digunakan sebagai pemisah teks
Ø parameter keenam dan terakhir [opsional] dapat digunakan untuk memilih pemisah kolom:
ü melewati [default] TAB nilai yang Anda menetapkan bahwa tab harus digunakan sebagai pemisah kolom
ü jika tidak, Anda dapat menentukan karakter pemisah field melampirkan itu dalam tanda kutip tunggal
ü menentukan ',' memilih koma untuk pemisah kolom
ü menentukan ':' memilih usus besar untuk menjadi pemisah lapangan dan sebagainya
2 . harap dicatat: meja VirtualText adalah tabel hanya membaca
Ø sehingga Anda tidak diizinkan untuk melakukan apapun DELETE, INSERT atau perintah UPDATE.
spatialite> SELECT * FROM books ORDER BY Lang, Author;
| ROWNO | Author | Book | Lang | Category | Price |
| 15 | Darwin, Charles | Origin of the Species | English | Biology | 9.50 |
| 20 | Dawkins, Richard | The selfish gene | English | Biology | 12.50 |
| 21 | Dickens, Charles | Our mutual friend | English | Literature | 9.30 |
| 16 | Gibson, Henry W. | The decline and fall of the Roman Empire | English | History | 18.50 |
| 6 | Gould, Stephen Jay | Wonderful life | English | Biology | 12.60 |
| 2 | Hobbes, Thomas | The Leviathan | English | Philosophy | 18.75 |
| 11 | Kerningham, Brian : Ritchie, Dennis | The C programming Language | English | Computing | 17.50 |
| 4 | Knut, Donald | The art of computer programming | English | Computing | 35.50 |
| 10 | Morris, Desmond | The naked ape | English | Biology | 8.75 |
| 3 | Shakespeare, William | Julius Cesar | English | Literature | 8.25 |
| 18 | Thackeray, William M. | Vanity fair | English | Literature | 10.00 |
| 7 | Diderot, Denis | Jacques le fataliste | French | Literature | 6.50 |
| 5 | Stendhal | Le rouge et le noir | French | Literature | 8.50 |
| 13 | Voltaire | Traité sur la tolérance | French | Philosophy | 12.00 |
| 19 | Zola, Emile | Germinal | French | Literature | 8.40 |
| 8 | Mann, Heinrich | Der blaue Engel | German | Literature | 6.60 |
| 14 | Mann, Thomas | Der Zauberberg | German | Literature | 11.00 |
| 22 | Marx, Karl | Grundrisse der Kritik der politischen OEkonomie | German | Philosophy | 10.00 |
| 1 | Alighieri, Dante | Divina commedia | Italian | Literature | 12.50 |
| 23 | Manzoni, Alessandro | I promessi sposi | Italian | Literature | 15.00 |
| 9 | Caesar, Caius Julius | Commentarii de bello gallico | Latin | History | 15.00 |
| 17 | Flaubert, Gustave | L'éducation sentimentale | Literature | French | 7.50 |
| 12 | de Cervantes, Miguel | Don Quichote | Spanish | Literature | 14.20 |
spatialite> SELECT Book, Author FROM Books
... > WHERE Category = 'Literature' AND Price < 10 AND Lang = 'English';
... > WHERE Category = 'Literature' AND Price < 10 AND Lang = 'English';
| Book | Author |
| Julius Cesar | Shakespeare, William |
| Our mutual friend | Dickens, Charles |
spatialite>
Setelah Anda membuat Tabel Virtual berdasarkan modul VirtualText, Anda jelas dapat melakukan pernyataan SQL SELECT menggunakan tabel ini.
8. Spasial Indeks: menggunakan R SQLite's * Pohon
DBMS SQLite (seperti DBMS lainnya) mengimplementasikan Indeks dengan tujuan untuk dengan cepat mengambil data yang dipilih.
Bayangkan sebuah tabel yang berisi juta dan juta baris, seperti buku petunjuk telepon nasional; mengambil nama rakyat yang memiliki beberapa nomor telepon tertentu mungkin menjadi operasi lambat, jika Anda melakukan sebuah meja penuh sehingga disebut scan, yakni jika mesin DBMS harus membaca dan mengevaluasi setiap baris untuk menyaring satu diminta.
Menerapkan Indeks pada kolom nomor telepon memungkinkan sangat cepat query, sekarang mesin DBMS hanya bisa membaca Index, dan segera akan menemukan baris yang diperlukan.
Tidak perlu sama sekali untuk melakukan meja panjang penuh proses scan.
Harap diperhatikan: jika tabel anda berisi sejumlah baris (misalkan 5.000 atau 20.000) menerapkan Indeks belum efek praktis. SQLite dapat melakukan meja full scan dalam waktu yang sangat singkat saja. Tetapi jika tabel anda berisi sejumlah besar baris (misalkan lebih dari 100.000), kemudian melaksanakan Indeks dapat memiliki efek dramatis pada waktu eksekusi pertanyaan.
Sebagai terbesar adalah jumlah baris, sebagai lebih jelas menjadi manfaat untuk melaksanakan suatu Index.
Bayangkan sebuah tabel yang berisi juta dan juta baris, seperti buku petunjuk telepon nasional; mengambil nama rakyat yang memiliki beberapa nomor telepon tertentu mungkin menjadi operasi lambat, jika Anda melakukan sebuah meja penuh sehingga disebut scan, yakni jika mesin DBMS harus membaca dan mengevaluasi setiap baris untuk menyaring satu diminta.
Menerapkan Indeks pada kolom nomor telepon memungkinkan sangat cepat query, sekarang mesin DBMS hanya bisa membaca Index, dan segera akan menemukan baris yang diperlukan.
Tidak perlu sama sekali untuk melakukan meja panjang penuh proses scan.
Harap diperhatikan: jika tabel anda berisi sejumlah baris (misalkan 5.000 atau 20.000) menerapkan Indeks belum efek praktis. SQLite dapat melakukan meja full scan dalam waktu yang sangat singkat saja. Tetapi jika tabel anda berisi sejumlah besar baris (misalkan lebih dari 100.000), kemudian melaksanakan Indeks dapat memiliki efek dramatis pada waktu eksekusi pertanyaan.
Sebagai terbesar adalah jumlah baris, sebagai lebih jelas menjadi manfaat untuk melaksanakan suatu Index.
spatialite> CREATE INDEX IdxTownName ON NewTowns (Name);
spatialite>
spatialite>
1. CREATE INDEX dengan pernyataan SQL digunakan untuk membangun sebuah Index
2. ketika Indeks akan ditambah ke meja beberapa, kemudian SQLite menerapkan tindakan berikut:
2. ketika Indeks akan ditambah ke meja beberapa, kemudian SQLite menerapkan tindakan berikut:
Ø sementara insert, update atau menghapus baris apapun, indeks juga harus runtut diperbarui, untuk menghindari misalignment apapun
Ø sedangkan query, jika Indeks dapat mempercepat query, maka harus digunakan secara otomatis.
spatialite> DROP INDEX IdxTownName;
spatialite>
spatialite>
1. yang DROP INDEX pernyataan SQL digunakan untuk menghapus Indeks
Sayangnya sebuah SQLite Indeks tidak dapat digunakan terhadap kolom Geometri-tipe.
Hal ini karena Indeks sebagai satu dibuat akan Buat Indeks merupakan implementasi btree disebut (yaitu Binary Tree); pohon biner berguna dapat diterapkan pada angka dan / atau string, namun tidak pada geometri.
Untuk geometri kita perlu jenis yang sama sekali berbeda dari Indeks, yaitu RTree disebut (Persegi Panjang Tree).
Di sini datang pemberitahuan yang baik, dimulai dengan v.3.6.0 SQLite mendukung implementasi stabil untuk RTRee. SQLite's RTree tampaknya benar-benar dapat diandalkan (dan sangat efisien, juga), maka SpatiaLite termasuk itu dalam rangka melaksanakan Spasial Indeks pada kolom Geometri-jenis juga.
Sayangnya sebuah SQLite Indeks tidak dapat digunakan terhadap kolom Geometri-tipe.
Hal ini karena Indeks sebagai satu dibuat akan Buat Indeks merupakan implementasi btree disebut (yaitu Binary Tree); pohon biner berguna dapat diterapkan pada angka dan / atau string, namun tidak pada geometri.
Untuk geometri kita perlu jenis yang sama sekali berbeda dari Indeks, yaitu RTree disebut (Persegi Panjang Tree).
Di sini datang pemberitahuan yang baik, dimulai dengan v.3.6.0 SQLite mendukung implementasi stabil untuk RTRee. SQLite's RTree tampaknya benar-benar dapat diandalkan (dan sangat efisien, juga), maka SpatiaLite termasuk itu dalam rangka melaksanakan Spasial Indeks pada kolom Geometri-jenis juga.
spatialite> SELECT * FROM geometry_columns;
| f_table_name | f_geometry_column | type | coord_dimension | srid | spatial_index_enabled |
| NewTowns | geom | POINT | 2 | 32632 | 0 |
| NewRegions | Geometry | MULTIPOLYGON | 2 | 32632 | 0 |
| NewTowns | wgs84 | POINT | 2 | 4326 | 0 |
spatialite>
spatialite> SELECT CreateSpatialIndex('NewTowns', 'geom');
| CreateSpatialIndex('NewTowns', 'geom') |
| 1 |
spatialite> SELECT * FROM geometry_columns;
| f_table_name | f_geometry_column | type | coord_dimension | srid | spatial_index_enabled |
| NewTowns | geom | POINT | 2 | 32632 | 1 |
| NewRegions | Geometry | MULTIPOLYGON | 2 | 32632 | 0 |
| NewTowns | wgs84 | POINT | 2 | 4326 | 0 |
spatialite>
The CreateSpatialIndex () fungsi SpatiaLite yang memungkinkan untuk menentukan Indeks Ruang.
Mari kita lihat beberapa detail secara mendalam:
Mari kita lihat beberapa detail secara mendalam:
spatialite> .tables
| NewHighWays | idx_NewTowns_geom | spatial_ref_sys |
| NewRegions | idx_NewTowns_geom_node | test_shape |
| NewTowns | idx_NewTowns_geom_parent | |
| geometry_columns | idx_NewTowns_geom_rowid |
spatialite> PRAGMA table_info(idx_NewTowns_geom);
| cid | name | type | notnull | dflt_value | pk |
| 0 | pkid | 0 | NULL | 0 | |
| 1 | xmin | 0 | NULL | 0 | |
| 2 | xmax | 0 | NULL | 0 | |
| 3 | ymin | 0 | NULL | 0 | |
| 4 | ymax | 0 | NULL | 0 |
spatialite> SELECT * FROM Idx_NewTowns_geom LIMIT 5;
| pkid | xmin | xmax | ymin | ymax |
| 7695 | 319224.0 | 319224.0 | 4994219.0 | 4994219.0 |
| 3442 | 322716.71875 | 322716.71875 | 4978712.0 | 4978712.0 |
| 3436 | 325736.90625 | 325736.90625 | 4980018.5 | 4980018.5 |
| 69 | 332594.65625 | 332594.65625 | 4980547.0 | 4980547.0 |
| 3477 | 333373.40625 | 333373.40625 | 4993133.0 | 4993133.0 |
spatialite>
1. tentang VirtualShape
2. sebuah RTree memerlukan empat tabel:
o awalan
o prefix_node
o prefix_parent
o prefix_rowid
3. yang paling relevan adalah awalan, yang mewakili MBRs [alias BBOXs] untuk geometri diindeks;
pkid kolom berisi nilai Primary Key mengidentifikasi baris terkait dalam tabel diindeks
yang xmin Xmax, ymin dan kolom ymax digunakan untuk mewakili MBR.
4. yang RTree SQLite diimplementasikan sebagai VIRTUAL TABEL
Anda sudah tahu apa yang SQLite Virtual Tabel adalah; kita hanya melihat titik ini
2. sebuah RTree memerlukan empat tabel:
o awalan
o prefix_node
o prefix_parent
o prefix_rowid
3. yang paling relevan adalah awalan, yang mewakili MBRs [alias BBOXs] untuk geometri diindeks;
pkid kolom berisi nilai Primary Key mengidentifikasi baris terkait dalam tabel diindeks
yang xmin Xmax, ymin dan kolom ymax digunakan untuk mewakili MBR.
4. yang RTree SQLite diimplementasikan sebagai VIRTUAL TABEL
Anda sudah tahu apa yang SQLite Virtual Tabel adalah; kita hanya melihat titik ini
spatialite> SELECT name, tbl_name, sql FROM sqlite_master
... > WHERE name LIKE 'gi%';
... > WHERE name LIKE 'gi%';
| name | tbl_name | sql |
| gii_NewTowns_geom | NewTowns | CREATE TRIGGER gii_NewTowns_geom AFTER INSERT ON NewTowns FOR EACH ROW BEGIN INSERT INTO idx_NewTowns_geom (pkid, xmin, xmax, ymin, ymax) VALUES (NEW.ROWID, MbrMinX(NEW.geom), MbrMaxX(NEW.geom), MbrMinY(NEW.geom), MbrMaxY(NEW.geom)); END |
| giu_NewTowns_geom | NewTowns | CREATE TRIGGER giu_NewTowns_geom AFTER UPDATE ON NewTowns FOR EACH ROW BEGIN UPDATE idx_NewTowns_geom SET xmin = MbrMinX(NEW.geom), xmax = MbrMaxX(NEW.geom), ymin = MbrMinY(NEW.geom), ymax = MbrMaxY(NEW.geom) WHERE pkid = NEW.ROWID; END |
| gid_NewTowns_geom | NewTowns | CREATE TRIGGER gid_NewTowns_geom AFTER DELETE ON NewTowns FOR EACH ROW BEGIN DELETE FROM idx_NewTowns_geom WHERE pkid = NEW.ROWID; END |
spatialite>
Baiklah, sekarang kami telah membangun Indeks Tata Ruang, sudah waktunya untuk mengambil keuntungan kehadirannya.
RTrees hanya longgar diintegrasikan ke dalam mesin query SQLite, jadi kita membutuhkan perawatan ekstra untuk menggunakannya. Anda tidak dapat mengasumsikan SpatiaLite secara otomatis akan menggunakan beberapa Indeks Spasial dalam rangka mempercepat permintaan lambat, Anda harus secara eksplisit permintaan fitur ini.
Ini tidak terlalu rumit, Anda hanya perlu menyusun query bersarang untuk mengambil keuntungan penuh dari Indeks Ruang.
RTrees hanya longgar diintegrasikan ke dalam mesin query SQLite, jadi kita membutuhkan perawatan ekstra untuk menggunakannya. Anda tidak dapat mengasumsikan SpatiaLite secara otomatis akan menggunakan beberapa Indeks Spasial dalam rangka mempercepat permintaan lambat, Anda harus secara eksplisit permintaan fitur ini.
Ini tidak terlalu rumit, Anda hanya perlu menyusun query bersarang untuk mengambil keuntungan penuh dari Indeks Ruang.
spatialite> SELECT name FROM NewTowns
... > WHERE X(geom) > 730000 AND X(geom) < 734000
... > AND Y(geom) > 4810000 AND Y(geom) < 4850000;
... > WHERE X(geom) > 730000 AND X(geom) < 734000
... > AND Y(geom) > 4810000 AND Y(geom) < 4850000;
| Name |
| Capolona |
| Chitignano |
| Subbiano |
| Arezzo |
spatialite> SELECT name FROM NewTowns WHERE ROWID IN
... > (SELECT pkid FROM idx_NewTowns_geom WHERE
... > xmin > 730000 AND xmax < 734000 AND ymin > 4810000 AND ymax < 4850000);
... > (SELECT pkid FROM idx_NewTowns_geom WHERE
... > xmin > 730000 AND xmax < 734000 AND ymin > 4810000 AND ymax < 4850000);
| Name |
| Capolona |
| Chitignano |
| Subbiano |
| Arezzo |
spatialite>
Apakah Anda ingat? Dalam langkah sebelumnya kita memeriksa query spasial berjalan lambat, dan kami berkomitmen untuk lebih baik jelaskan nanti bagaimana kita bisa mengoptimalkan seperti query dengan menggunakan Indeks Tata Ruang, marilah kita sekarang menulis ulang seperti query dioptimalkan:
spatialite> SELECT NewRegions.Name, COUNT(*) FROM NewTowns, NewRegions
... > WHERE NewRegions.Name IN (
... > 'VALLE D''AOSTA', 'PIEMONTE', 'UMBRIA', 'LOMBARDIA',
... > 'CALABRIA', 'MOLISE', 'MARCHE', 'BASILICATA') AND
... > Within(NewTowns.geom, NewRegions.Geometry) AND
... > NewTowns.ROWID IN
... > (SELECT pkid FROM idx_NewTowns_geom WHERE
... > xmin > MbrMinX(NewRegions.Geometry) AND
... > xmax < MbrMaxX(NewRegions.Geometry) AND
... > ymin > MbrMinY(NewRegions.Geometry) AND
... > ymax < MbrMaxY(NewRegions.Geometry))
... > GROUP BY NewRegions.Name;
... > WHERE NewRegions.Name IN (
... > 'VALLE D''AOSTA', 'PIEMONTE', 'UMBRIA', 'LOMBARDIA',
... > 'CALABRIA', 'MOLISE', 'MARCHE', 'BASILICATA') AND
... > Within(NewTowns.geom, NewRegions.Geometry) AND
... > NewTowns.ROWID IN
... > (SELECT pkid FROM idx_NewTowns_geom WHERE
... > xmin > MbrMinX(NewRegions.Geometry) AND
... > xmax < MbrMaxX(NewRegions.Geometry) AND
... > ymin > MbrMinY(NewRegions.Geometry) AND
... > ymax < MbrMaxY(NewRegions.Geometry))
... > GROUP BY NewRegions.Name;
| NewRegions.Name | COUNT(*) |
| BASILICATA | 133 |
| CALABRIA | 409 |
| LOMBARDIA | 1548 |
| MARCHE | 248 |
| MOLISE | 136 |
| PIEMONTE | 1201 |
| UMBRIA | 91 |
| VALLE D'AOSTA | 74 |
spatialite>
Ini bukan sangat mirip Anda akan keinginan untuk menghancurkan Indeks Spasial setelah Anda membuat satu.
Lagi pula Anda bisa melakukan hal seperti itu, jika Anda akan:
Lagi pula Anda bisa melakukan hal seperti itu, jika Anda akan:
spatialite> SELECT DisableSpatialIndex('NewTowns', 'geom');
spatialite> .tables
spatialite> .tables
| NewHighWays | idx_NewTowns_geom | spatial_ref_sys |
| NewRegions | idx_NewTowns_geom_node | test_shape |
| NewTowns | idx_NewTowns_geom_parent | |
| geometry_columns | idx_NewTowns_geom_rowid |
spatialite> DROP TABLE idx_NewTowns_geom;
spatialite> .tables
spatialite> .tables
| NewHighWays | NewTowns | spatial_ref_sys |
| NewRegions | geometry_columns | test_shape |
spatialite> VACUUM;
spatialite>
spatialite>
9. Indeks Spasial mengambil dua: menggunakan MbrCache
SpatiaLite mendukung implementasi alternatif untuk Ruang Index, yaitu yang didasarkan pada MBRs dalam cache memori.
Setiap Geometri memiliki sendiri MBR alias BBOX, menyimpan dalam memori semua MBRs kita kemudian akan mendapatkan MbrCache.
Dan ketika iklan diindeks seleksi Spasial diperlukan, pemindaian cache ini untuk mendeteksi yang MBRs memenuhi kriteria Tata Ruang yang diperlukan akan memakan waktu yang sangat singkat, karena tidak ada akses disk akan lambat maka diperlukan sama sekali; semua MBRs sudah cache dalam memori , sehingga mengambil yang diperlukan akan menjadi operasi yang sangat cepat.
Teknik caching menyajikan keuntungan dari sebuah kesederhanaan terkalahkan, itu sama sekali tidak indeks benar [sebagai R * Pohon], tetapi untuk tujuan praktis menggunakan MbrCache atau R * Pohon bisa diasumsikan [sama pada Setidaknya, jika Anda harus cache yang wajar MBRs, mari katakan satu juta atau sebagainya].
Berikut ini adalah contoh praktis tentang bagaimana menggunakan MbrCache: sekarang kita akan terhubung dengan database test-2.3.sqlite.
Setiap Geometri memiliki sendiri MBR alias BBOX, menyimpan dalam memori semua MBRs kita kemudian akan mendapatkan MbrCache.
Dan ketika iklan diindeks seleksi Spasial diperlukan, pemindaian cache ini untuk mendeteksi yang MBRs memenuhi kriteria Tata Ruang yang diperlukan akan memakan waktu yang sangat singkat, karena tidak ada akses disk akan lambat maka diperlukan sama sekali; semua MBRs sudah cache dalam memori , sehingga mengambil yang diperlukan akan menjadi operasi yang sangat cepat.
Teknik caching menyajikan keuntungan dari sebuah kesederhanaan terkalahkan, itu sama sekali tidak indeks benar [sebagai R * Pohon], tetapi untuk tujuan praktis menggunakan MbrCache atau R * Pohon bisa diasumsikan [sama pada Setidaknya, jika Anda harus cache yang wajar MBRs, mari katakan satu juta atau sebagainya].
Berikut ini adalah contoh praktis tentang bagaimana menggunakan MbrCache: sekarang kita akan terhubung dengan database test-2.3.sqlite.
spatialite> SELECT CreateMbrCache('Towns', 'Geometry');
| CreateMbrCache('Towns', 'Geometry') |
| 1 |
spatialite> SELECT * FROM geometry_columns;
| f_table_name | f_geometry_column | type | coord_dimension | srid | spatial_index_enabled |
| Regions | Geometry | MULTIPOLYGON | 2 | 32632 | 0 |
| HighWays | Geometry | MULTILINESTRING | 2 | 32632 | 0 |
| Towns | Geometry | POINT | 2 | 32632 | 2 |
spatialite>
The CreateMbrCache() SpatiaLite's function allows to define an MbrCache.
Let see some detail in depth:
spatialite> .tables
The CreateMbrCache() SpatiaLite's function allows to define an MbrCache.
Let see some detail in depth:
spatialite> .tables
| HighWays | cache_Towns_Geometry | spatial_ref_sys |
| Regions | geom_cols_ref_sys | |
| Towns | geometry_columns |
spatialite> PRAGMA table_info(cache_Towns_Geometry);
| cid | name | type | notnull | dflt_value | pk |
| 0 | rowid | INTEGER | 0 | 0 | |
| 1 | mbr | BLOB | 0 | 0 |
spatialite> SELECT * FROM cache_Towns_Geometry LIMIT 5;
| rowid | mbr |
| 1 | POLYGON((427002.77 4996361.33, 427002.77 4996361.33, 427002.77 4996361.33, 427002.77 4996361.33, 427002.77 4996361.33)) |
| 2 | POLYGON((367470.48 4962414.50, 367470.48 4962414.50, 367470.48 4962414.50, 367470.48 4962414.50, 367470.48 4962414.50)) |
| 3 | POLYGON((390084.12 5025551.73, 390084.12 5025551.73, 390084.12 5025551.73, 390084.12 5025551.73, 390084.12 5025551.73)) |
| 4 | POLYGON((425246.99 5000248.30, 425246.99 5000248.30, 425246.99 5000248.30, 425246.99 5000248.30, 425246.99 5000248.30)) |
| 5 | POLYGON((426418.89 4957737.37, 426418.89 4957737.37, 426418.89 4957737.37, 426418.89 4957737.37, 426418.89 4957737.37)) |
spatialite>
spatialite> SELECT name, tbl_name, sql FROM sqlite_master
... > WHERE name LIKE 'gc%';
... > WHERE name LIKE 'gc%';
| name | tbl_name | sql |
| gci_Towns_Geometry | Towns | CREATE TRIGGER gci_Towns_Geometry AFTER INSERT ON Towns FOR EACH ROW BEGIN INSERT INTO cache_Towns_Geometry (rowid, mbr) VALUES (NEW.ROWID, BuildMbrFilter(MbrMinX(NEW.Geometry), MbrMinY(NEW.Geometry), MbrMaxX(NEW.Geometry), MbrMaxY(NEW.Geometry))); END |
| gcu_Towns_Geometry | Towns | CREATE TRIGGER gcu_Towns_Geometry AFTER UPDATE ON Towns FOR EACH ROW BEGIN UPDATE cache_Towns_Geometry SET mbr = BuildMbrFilter(MbrMinX(NEW.Geometry), MbrMinY(NEW.Geometry), MbrMaxX(NEW.Geometry), MbrMaxY(NEW.Geometry)) WHERE rowid = NEW.ROWID; END |
| gcd_Towns_Geometry | Towns | CREATE TRIGGER gcd_Towns_Geometry AFTER DELETE ON Towns FOR EACH ROW BEGIN DELETE FROM cache_Towns_Geometry WHERE rowid = OLD.ROWID; END |
spatialite>
Baiklah, sekarang kami telah membangun sebuah MbrCache, sudah waktunya untuk mengambil keuntungan kehadirannya.
MbrCaches hanya longgar diintegrasikan ke dalam mesin query SQLite, jadi kita perlu menyusun query bersarang untuk menggunakannya [Apakah Anda ingat? kita telah melihat bagaimana menggunakan query bersarang untuk T * Pohon].
MbrCaches hanya longgar diintegrasikan ke dalam mesin query SQLite, jadi kita perlu menyusun query bersarang untuk menggunakannya [Apakah Anda ingat? kita telah melihat bagaimana menggunakan query bersarang untuk T * Pohon].
spatialite> SELECT name FROM Towns
... > WHERE MbrWithin(Geometry, BuildMbr(730000, 4810000, 734000, 4850000));
... > WHERE MbrWithin(Geometry, BuildMbr(730000, 4810000, 734000, 4850000));
| Name |
| Capolona |
| Chitignano |
| Subbiano |
| Arezzo |
spatialite> SELECT name FROM Towns WHERE ROWID IN
... > (SELECT rowid FROM cache_Towns_Geometry WHERE
... > mbr = FilterMbrWithin(730000, 4810000, 734000, 4850000));
... > (SELECT rowid FROM cache_Towns_Geometry WHERE
... > mbr = FilterMbrWithin(730000, 4810000, 734000, 4850000));
| Name |
| Capolona |
| Chitignano |
| Subbiano |
| Arezzo |
spatialite>
10 . Berjuang dengan pengaturan locale_charset
Beberapa sejarah sedikit [untuk lebih memahami]:
tahun • ada waktu, banyak dan banyak lalu, dalam 70-an bahagia, ketika komputer tidak memiliki neraka character_set sama sekali, atau cukup jadi ...
• ada maka hanya standar pengkodean, universal ASCII, sebagai kekecualian, yang mainframe IBM dari mereka sendiri digunakan encoding EBCDIC esoteris.
• baik ASCII dan EBCDIC mana 7-bit encoding, angka pendukung [0-9], huruf kecil [az], huruf besar [AZ] dan beberapa lainnya interpunctuation tanda [+-*(),;=!?#] dan kontrol karakter
• tidak ada cara sama sekali untuk mewakili karakter nasional yang menggunakan charset
yaitu tidak mungkin untuk menggunakan italia (atau perancis) vokal aksen bahasa, seperti à é è ì ò ù
• jadi, ketika PC dan MS-DOS menjadi meluas di era 80-an, yang ASCII asli diperpanjang sebagai encoding 8-bit, sehingga memungkinkan untuk mendukung peluang karakter yang digunakan oleh bahasa eropa banyak ... dan kekacauan itu dimulai
• setelah beberapa saat, Windows menaklukkan dunia dalam 90-an, dalam rangka mendukung bahasa asiatic (cina, jepang dll), 16-bit encodings menjadi luas ... dan kekacauan itu penting
• dalam upaya, putus asa terakhir untuk membangun kembali hukum dan ketertiban, seseorang mulai mengklasifikasikan dan membakukan charset_encodings, untuk memungkinkan beberapa jenis interoperabily, sebagai internet diperlukan
• itu, UTF-8 encoding didefinisikan, satu ini adalah pengkodean variabel panjang, memerlukan dari 1 sampai 4 byte untuk mengkodekan karakter tunggal; UTF-8 benar-benar adalah encoding universal dapat mendukung setiap bahasa manusia diketahui, eropa atau asiatic juga
• Linux mendukung penuh UTF-8, dan yang satu ini benar-benar merupakan hal yang sangat baik
• sayangnya, Windows masih terus mendukung charset sendiri, jadi, masalah kompatibilitas utama muncul ketika mentransfer file dari satu sistem ke yang lain
SQLite internal mengelola nilai-nilai TEKS karena mereka di mana seharusnya UTF-8 dikodekan, tetapi tidak melakukan pemeriksaan apapun dalam rangka untuk benar-benar menegakkan ini [saya kira ini karena alasan kinerja].
Perpustakaan open source libiconv mendukung transformasi teks dari charset beberapa ke salah satu dikenal lainnya; SpatiaLite menggunakan libiconv dalam rangka untuk mengubah masukan apapun ke dalam UTF-8, dan setiap output dari UTF-8, sehingga mendukung secara efektif setiap seting locale_charset.
Anda hanya diperlukan (bila diperlukan) secara eksplisit memilih locale_charset harus didukung: ini mungkin tampak pada pandangan pertama sebagai sedikit membingungkan, tetapi Anda akan menemukan dengan pengalaman yang satu ini adalah fitur yang baik besar, memungkinkan untuk fleksibilitas maksimum . SpatiaLite mendukung locale_charsets berikut:
tahun • ada waktu, banyak dan banyak lalu, dalam 70-an bahagia, ketika komputer tidak memiliki neraka character_set sama sekali, atau cukup jadi ...
• ada maka hanya standar pengkodean, universal ASCII, sebagai kekecualian, yang mainframe IBM dari mereka sendiri digunakan encoding EBCDIC esoteris.
• baik ASCII dan EBCDIC mana 7-bit encoding, angka pendukung [0-9], huruf kecil [az], huruf besar [AZ] dan beberapa lainnya interpunctuation tanda [+-*(),;=!?#] dan kontrol karakter
• tidak ada cara sama sekali untuk mewakili karakter nasional yang menggunakan charset
yaitu tidak mungkin untuk menggunakan italia (atau perancis) vokal aksen bahasa, seperti à é è ì ò ù
• jadi, ketika PC dan MS-DOS menjadi meluas di era 80-an, yang ASCII asli diperpanjang sebagai encoding 8-bit, sehingga memungkinkan untuk mendukung peluang karakter yang digunakan oleh bahasa eropa banyak ... dan kekacauan itu dimulai
• setelah beberapa saat, Windows menaklukkan dunia dalam 90-an, dalam rangka mendukung bahasa asiatic (cina, jepang dll), 16-bit encodings menjadi luas ... dan kekacauan itu penting
• dalam upaya, putus asa terakhir untuk membangun kembali hukum dan ketertiban, seseorang mulai mengklasifikasikan dan membakukan charset_encodings, untuk memungkinkan beberapa jenis interoperabily, sebagai internet diperlukan
• itu, UTF-8 encoding didefinisikan, satu ini adalah pengkodean variabel panjang, memerlukan dari 1 sampai 4 byte untuk mengkodekan karakter tunggal; UTF-8 benar-benar adalah encoding universal dapat mendukung setiap bahasa manusia diketahui, eropa atau asiatic juga
• Linux mendukung penuh UTF-8, dan yang satu ini benar-benar merupakan hal yang sangat baik
• sayangnya, Windows masih terus mendukung charset sendiri, jadi, masalah kompatibilitas utama muncul ketika mentransfer file dari satu sistem ke yang lain
SQLite internal mengelola nilai-nilai TEKS karena mereka di mana seharusnya UTF-8 dikodekan, tetapi tidak melakukan pemeriksaan apapun dalam rangka untuk benar-benar menegakkan ini [saya kira ini karena alasan kinerja].
Perpustakaan open source libiconv mendukung transformasi teks dari charset beberapa ke salah satu dikenal lainnya; SpatiaLite menggunakan libiconv dalam rangka untuk mengubah masukan apapun ke dalam UTF-8, dan setiap output dari UTF-8, sehingga mendukung secara efektif setiap seting locale_charset.
Anda hanya diperlukan (bila diperlukan) secara eksplisit memilih locale_charset harus didukung: ini mungkin tampak pada pandangan pertama sebagai sedikit membingungkan, tetapi Anda akan menemukan dengan pengalaman yang satu ini adalah fitur yang baik besar, memungkinkan untuk fleksibilitas maksimum . SpatiaLite mendukung locale_charsets berikut:
| ARMSCII-8 | Armenian |
| ASCII | US-ASCII |
| BIG5 | Chinese/Traditional |
| BIG5-HKSCS BIG5-HKSCS:1999 BIG5-HKSCS:2001 | Chinese/Hong Kong |
| CP850 | DOS/OEM Western Europe |
| CP862 | DOS/OEM Hebrew |
| CP866 | DOS/OEM Cyrillic |
| CP874 | DOS/OEM Thai |
| CP932 | DOS/OEM Japanese |
| CP936 | DOS/OEM Chinese |
| CP949 | DOS/OEM Korean |
| CP950 | DOS/OEM Chinese/Big5 |
| CP1133 | Laotian |
| CP1250 | Windows Central Europe |
| CP1251 | Windows Cyrillic |
| CP1252 | Windows Latin 1 |
| CP1253 | Windows Greek |
| CP1254 | Windows Turkish |
| CP1255 | Windows Hebrew |
| CP1256 | Windows Arabic |
| CP1257 | Windows Baltic |
| CP1258 | Windows Vietnamese |
| EUC-CN | Chinese |
| EUC-JP | Japanese |
| EUC-KR | Korean |
| EUC-TW | Taiwan |
| GB18030 | Chinese/National Standard |
| GBK | Chinese/Simplified |
| Georgian-Academy | Georgian |
| Georgian-PS | Georgian |
| HZ | Chinese |
| ISO-2022-CN ISO-2022-CN-EXT | Chinese |
| ISO-2022-JP ISO-2022-JP-1 ISO-2022-JP-2 | Japanese |
| ISO-2022-KR | Korean |
| ISO-8859-1 | Latin-1 Western European |
| ISO-8859-2 | Latin-2 Central European |
| ISO-8859-3 | Latin-3 South European |
| ISO-8859-4 | Latin-4 North European |
| ISO-8859-5 | Latin/Cyrillic |
| ISO-8859-6 | Latin/Arabic |
| ISO-8859-7 | Latin/Greek |
| ISO-8859-8 | Latin/Hebrew |
| ISO-8859-9 | Latin-5 Turkish |
| ISO-8859-10 | Latin-6 Nordic |
| ISO-8859-11 | Latin/Thai |
| ISO-8859-13 | Latin-7 Baltic Rim |
| ISO-8859-14 | Latin-8 Celtic |
| ISO-8859-15 | Latin-9 |
| ISO-8859-16 | Latin-10 South-Eastern European |
| JOHAB | Korean |
| KOI8-R | Russian |
| KOI8-U | Ukrainian |
| KOI8-RU | Belarusian |
| KOI8-T | Tajik |
| MacArabic | MAC Arabic |
| MacCentralEurope | MAC Central Europe |
| MacCroatian | MAC Croatian |
| MacCyrillic | MAC Cyrillic |
| MacGreek | MAC Greek |
| MacHebrew | MAC Hebrew |
| MacIceland | MAC Iceland |
| Macintosh | MAC |
| MacRoman | MAC European/Western languages |
| MacRomania | MAC Romania |
| MacThai | MAC Thai |
| MacTurkish | MAC Turkish |
| MacUkraine | MAC Ukraine |
| MuleLao-1 | Laotian |
| PT154 | Kazakh |
| RK1048 | Kazakh |
| SHIFT_JIS | Japanese |
| TCVN | Vietnamese |
| TIS-620 | Thai |
| UTF-8 | UNICODE/Universal |
| VISCII | Vietnamese |
Mari kita mencoba beberapa permintaan uji, dalam rangka untuk lebih memahami:
sekarang kita akan terhubung database uji-2.3.sqlite, yang sepenuhnya UTF-8 encoded
ada vokal aksen beberapa di kolom Nama tabel milik Kota
akibatnya, kita akan mencoba untuk mengekstrak mereka menggunakan query SQL
spatialite> SELECT PK_UID, DARI Nama Kota WHERE Nama LIKE '%% ù';
spatialite>
Rupanya, query ini menemukan baris sama sekali ... spatialite> SELECT PK_UID, Nama Kota WHERE DARI PK_UID = 7749;
sekarang kita akan terhubung database uji-2.3.sqlite, yang sepenuhnya UTF-8 encoded
ada vokal aksen beberapa di kolom Nama tabel milik Kota
akibatnya, kita akan mencoba untuk mengekstrak mereka menggunakan query SQL
spatialite> SELECT PK_UID, DARI Nama Kota WHERE Nama LIKE '%% ù';
spatialite>
Rupanya, query ini menemukan baris sama sekali ... spatialite> SELECT PK_UID, Nama Kota WHERE DARI PK_UID = 7749;
| PK_UID | Name |
| 7749 | Vi+¦ |
Mencoba untuk memilih baris pasti mengandung ù dalam Nama, kita kemudian akan mendapatkan beberapa karakter aneh ...
Alasan untuk perilaku ini adalah cepat menjelaskan:
Aku benar-benar melakukan sesi uji spatialite saya pada PC Windows, menggunakan setting italia
sesuai dengan hal ini, platform locale_charset didefinisikan sebagai CP1252 Windows Latin-1;
spatialite dengan mudah dapat mendeteksi ini, secara otomatis mengkonversi input keyboard dari CP1252 ke UTF-8, dan output layar dari UTF-8 untuk CP1252
sayangnya ini tidak tampaknya bekerja sama sekali, alasannya adalah bahwa kita benar-benar berjalan spatialite.exe dari Command Prompt.
sebagai oleh salah satu keanehan Windows banyak, pengaturan italia digunakan oleh Command Prompt bukanlah satu sesuai untuk CP1252 Windows Latin-1, namun lebih tua yang MS-DOS setara, yaitu CP850 DOS / OEM Eropa Barat
kita harus memperbaiki mismatch ini, dalam rangka untuk mendapatkan vokal aksen italia ditangani dengan cara yang benar
spatialite>. CP850 charset
spatialite> SELECT PK_UID, Nama Kota WHERE DARI PK_UID = 7749;
Alasan untuk perilaku ini adalah cepat menjelaskan:
Aku benar-benar melakukan sesi uji spatialite saya pada PC Windows, menggunakan setting italia
sesuai dengan hal ini, platform locale_charset didefinisikan sebagai CP1252 Windows Latin-1;
spatialite dengan mudah dapat mendeteksi ini, secara otomatis mengkonversi input keyboard dari CP1252 ke UTF-8, dan output layar dari UTF-8 untuk CP1252
sayangnya ini tidak tampaknya bekerja sama sekali, alasannya adalah bahwa kita benar-benar berjalan spatialite.exe dari Command Prompt.
sebagai oleh salah satu keanehan Windows banyak, pengaturan italia digunakan oleh Command Prompt bukanlah satu sesuai untuk CP1252 Windows Latin-1, namun lebih tua yang MS-DOS setara, yaitu CP850 DOS / OEM Eropa Barat
kita harus memperbaiki mismatch ini, dalam rangka untuk mendapatkan vokal aksen italia ditangani dengan cara yang benar
spatialite>. CP850 charset
spatialite> SELECT PK_UID, Nama Kota WHERE DARI PK_UID = 7749;
| PK_UID | Name |
| 7749 | Viù |
spatialite> SELECT PK_UID, Name FROM Towns WHERE Name LIKE '%ù%';
| PK_UID | Name |
| 644 | Palù del Fersina |
| 1689 | Viggiù |
| 1878 | Montù Beccaria |
| 3217 | Temù |
| 4289 | Cefalù |
| 5051 | Carrù |
| 5333 | Palù |
| 6684 | Patù |
| 7553 | Cantù |
| 7749 | Viù |
spatialite>
Mencoba untuk memilih baris pasti mengandung ù dalam Nama, kita kemudian akan mendapatkan beberapa karakter aneh ...
Alasan untuk perilaku ini adalah cepat menjelaskan:
Aku benar-benar melakukan sesi uji spatialite saya pada PC Windows, menggunakan setting italia
sesuai dengan hal ini, platform locale_charset didefinisikan sebagai CP1252 Windows Latin-1;
spatialite dengan mudah dapat mendeteksi ini, secara otomatis mengkonversi input keyboard dari CP1252 ke UTF-8, dan output layar dari UTF-8 untuk CP1252
sayangnya ini tidak tampaknya bekerja sama sekali, alasannya adalah bahwa kita benar-benar berjalan spatialite.exe dari Command Prompt.
sebagai oleh salah satu keanehan Windows banyak, pengaturan italia digunakan oleh Command Prompt bukanlah satu sesuai untuk CP1252 Windows Latin-1, namun lebih tua yang MS-DOS setara, yaitu CP850 DOS / OEM Eropa Barat
kita harus memperbaiki mismatch ini, dalam rangka untuk mendapatkan vokal aksen italia ditangani dengan cara yang benar
spatialite>. CP850 charset
spatialite> SELECT PK_UID, Nama Kota WHERE DARI PK_UID = 7749;......
Alasan untuk perilaku ini adalah cepat menjelaskan:
Aku benar-benar melakukan sesi uji spatialite saya pada PC Windows, menggunakan setting italia
sesuai dengan hal ini, platform locale_charset didefinisikan sebagai CP1252 Windows Latin-1;
spatialite dengan mudah dapat mendeteksi ini, secara otomatis mengkonversi input keyboard dari CP1252 ke UTF-8, dan output layar dari UTF-8 untuk CP1252
sayangnya ini tidak tampaknya bekerja sama sekali, alasannya adalah bahwa kita benar-benar berjalan spatialite.exe dari Command Prompt.
sebagai oleh salah satu keanehan Windows banyak, pengaturan italia digunakan oleh Command Prompt bukanlah satu sesuai untuk CP1252 Windows Latin-1, namun lebih tua yang MS-DOS setara, yaitu CP850 DOS / OEM Eropa Barat
kita harus memperbaiki mismatch ini, dalam rangka untuk mendapatkan vokal aksen italia ditangani dengan cara yang benar
spatialite>. CP850 charset
spatialite> SELECT PK_UID, Nama Kota WHERE DARI PK_UID = 7749;......





0 komentar:
Posting Komentar