Shapely: MultiPoint.difference(Point) tidak menjaga urutan asli

Dibuat pada 1 Apr 2019  ·  3Komentar  ·  Sumber: Toblerity/Shapely

Contoh sederhana:

>>> from shapely.geometry import MultiPoint, Point
>>> points = MultiPoint([Point(0, 0), Point(1, 0), Point(1, 1), Point(0, 1)])
>>> points.wkt
'MULTIPOINT (0 0, 1 0, 1 1, 0 1)'
>>> bad_point = Point(1, 0)
>>> points.difference(bad_point).wkt
'MULTIPOINT (0 0, 0 1, 1 1)'

Seperti yang Anda lihat, menghapus Point dari MultiPoint dengan menggunakan difference merusak urutan awal. Output yang diharapkan adalah:

'MULTIPOINT (0 0, 1 1, 0 1)'

Apakah ini bug atau karena desain? Documents tidak mengatakan apa pun tentang perilaku ini.

Versi indah: 1.6.4.post1, diinstal dari conda.

documentation geos wontfix

Komentar yang paling membantu

Lihat OGC 06-103r4 untuk akses fitur sederhana , 6.1.5 untuk MultiPoint:

Poin tidak terhubung atau diurutkan dengan cara yang penting secara semantik (lihat diskusi di GeometryCollection).

Jadi ini menunjukkan perilaku itu berdasarkan desain. Itu juga perilaku yang sama di JTS .

Objek serupa yang mempertahankan ketertiban adalah [Multi]LineString , tetapi contohnya perlu diproses secara berbeda.

Semua 3 komentar

Ini adalah perilaku yang diwarisi dari GEOS, perpustakaan yang Shapely adalah pembungkusnya.

Saya tidak berpikir ini adalah bug per se . Ini bukan cara kerja algoritma yang menghitung perbedaan. Kedua output secara geometris setara. Saya tidak berpikir model fitur sederhana menempatkan signifikansi pada urutan bagian dalam koleksi.

Sesuatu yang menjelaskan ini dapat ditambahkan ke dokumentasi. Saya tidak yakin di mana tempat terbaik untuk menambahkannya karena ini bukan sesuatu yang spesifik untuk metode perbedaan.

Lihat OGC 06-103r4 untuk akses fitur sederhana , 6.1.5 untuk MultiPoint:

Poin tidak terhubung atau diurutkan dengan cara yang penting secara semantik (lihat diskusi di GeometryCollection).

Jadi ini menunjukkan perilaku itu berdasarkan desain. Itu juga perilaku yang sama di JTS .

Objek serupa yang mempertahankan ketertiban adalah [Multi]LineString , tetapi contohnya perlu diproses secara berbeda.

Ok aku paham. Saya pikir kata peringatan bahwa seseorang tidak boleh bergantung pada pelestarian pesanan dapat ditambahkan di akhir bagian _Koleksi_ .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat