Saya punya beberapa ribu poligon di SpatiaLite. Saya mencoba melakukan kueri "sentuhan":
select map1.* from map1,map2
where touches(map1."Geometry",map2."Geometry")
dan wow, apakah ini PERLAHAN!
Namun, jika saya memintanya untuk melakukannya hanya untuk satu paket di map1, itu berjalan sangat cepat.
select map1.* from map1,map2
where touches(map1."Geometry",map2."Geometry")
and map1."ROWID" = 753
Saya berharap bahwa permintaan pertama akan berjalan lebih lambat, tetapi ini sangat lambat. Ini berjalan sangat cepat dalam SQLServer, Manifold GIS, dan PostGIS. Apakah Spatialite benar-benar tidak efisien?
spatialite
ajl
sumber
sumber
Jawaban:
Tidak, SpatiaLite tidak terlalu lambat, Anda hanya perlu menggunakan indeks spasial. Karena keterbatasan dalam desain SQLite, menggunakan indeks spasial dalam kueri tidak terlihat seperti di PostGIS.
Berikut adalah contoh yang dimodifikasi dari SpatiaLite Cookbook http://www.gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/neighbours.html
Setelah membuat indeks spasial pada set data poligon Anda
sumber
Dalam buku Eric Westra 'Python Geospatial Development' halaman 188 menunjukkan bahwa untuk operasi CONTAINS setidaknya Spatialite dapat, mungkin secara mengejutkan, berjalan lebih cepat daripada MySQL dan PostGIS - jika prosedur pengindeksan spasial yang terlibat diikuti.
sumber
Saya menulis blog tentang ini beberapa waktu lalu. Lihat http://www.frogmouth.net/blog/?p=23
Micha juga menulis blog yang menarik tentang topik ini .
sumber