Jarak dari koleksi kosong harus +inf.
Jarak dari koleksi kosong menghasilkan nol.
Jalankan skrip berikut:
from shapely.geometry import Point, LineString
empty_thing = LineString()
assert empty_thing.is_empty
print(empty_thing.distance(Point(1, 1))) # Returns zero, should probably be +inf
Windows 10 64bit
Python 3.6
Shapely 1.6b4 diinstal dari PyPI menggunakan pip
Perilaku ini diwarisi dari GEOS. Jika salah satu geometri kosong, metode jarak mengembalikan 0. Saya pikir ini adalah baris kode yang relevan:
Menarik. Mengingat bahwa mereka secara eksplisit membahas kasus ini, apakah ini berfungsi seperti yang direncanakan? Mengapa hal ini harus terjadi?
Mirip dengan GEOS, JTS mengembalikan 0,0, jadi mungkin perilaku ini sudah dirancang sejak lama.
PostGIS mengembalikan null
untuk skenario ini, karena tidak ada geometri untuk diukur. Saya menyarankan Shapely juga mengembalikan None
jika ada input yang kosong.
@mwtoews Saya ingin melihat pengecualian dimunculkan alih-alih mendapatkan None: maksudnya lebih jelas.
Terima kasih telah mengemukakan ini, @jebob!
Tipe spasial SQL Server mengembalikan NULL, mirip dengan PostGIS. ArcPy Esri menghasilkan kesalahan. Tampaknya kami memiliki 0, NULL, atau kesalahan tergantung pada siapa Anda bertanya. Saya dapat melihat beberapa manfaat di balik argumen untuk salah satu dari mereka, jadi dokumentasi yang jelas mungkin merupakan bagian terpenting dari mengatasi masalah ini. Lagi pula, tanpa konsensus di antara produk geospasial, ini adalah masalah harapan dan bukan kebenaran.
Saya telah berubah pikiran dan cenderung untuk membiarkannya sebagai nol. Berikut analogi dengan Python:
>>> "" in "foo"
True
String kosong ada di setiap string yang tidak kosong. Apakah Anda bersedia menerima bahwa geometri kosong ada di setiap geometri yang tidak kosong dan dengan demikian berada pada jarak 0?
Saya tidak akan menerima bahwa geometri kosong ada di setiap geometri yang tidak kosong, karena operasinya tidak analog.
Dua string yang identik berada di satu sama lain, tetapi dua bentuk yang identik mungkin memiliki offset yang berbeda dan oleh karena itu tidak "dalam" satu sama lain.
Geometri kosong tidak boleh dianggap menempati setiap ruang, karena persimpangan geometri kosong dan geometri X akan mengembalikan X.
Geometri kosong harus lebih jauh dari bentuk apa pun. dist(foo, X) <= dist(foo, union(X+Y)) menurut definisi. Jika X adalah himpunan kosong, maka dist(foo, X) harus mengembalikan tak terhingga agar identitas valid untuk semua foo, Y.
@jebob terima kasih telah bersabar dengan saya. Saya melihat logika di +inf sekarang.
Namun, saya pikir saya lebih suka memperlakukannya sebagai tidak terdefinisi dan memunculkan pengecualian (dalam rilis fitur) karena alasan kegunaan.
Mengangkat pengecualian tampaknya merupakan kandidat kompromi yang baik karena merupakan hasil yang tidak ambigu, sehingga mencegah kebingungan dari mereka yang mengandalkan GEOS/JTS yang mengembalikan nol.
Komentar yang paling membantu
Mirip dengan GEOS, JTS mengembalikan 0,0, jadi mungkin perilaku ini sudah dirancang sejak lama.
PostGIS mengembalikan
null
untuk skenario ini, karena tidak ada geometri untuk diukur. Saya menyarankan Shapely juga mengembalikanNone
jika ada input yang kosong.