Saya memiliki file titik, relokasi hewan setiap jam, dan saya ingin dapat menempatkan buffer di sekitar setiap titik dan menghitung jumlah titik berikutnya yang berada dalam zona buffer. Saya mencari metode yang akan bekerja di sepanjang file titik, seperti jendela bergerak, yang hanya akan menghitung titik-titik berikutnya yang berada dalam zona penyangga.
Misalnya pada titik 10 saya menempatkan buffer 1500m dan saya ingin tahu apakah titik 11 berada di dalam buffer dan jika demikian maka apakah titik 12 berada di dalam buffer dan sebagainya. Saya tidak ingin tahu apakah titik 52 berada di dalam zona buffer kecuali semua poin sebelumnya berada di dalam buffer. Saya juga tidak ingin tahu apakah poin 9 atau 8 dll berada dalam buffer.
Saya telah menemukan dan mencoba kotak alat tambahan yang disebut "analisis titik jendela bergerak" yang berfungsi sebagai jendela bergerak pada file titik. Ini bekerja dengan baik, tetapi sangat lambat, dan mencakup semua titik yang ada di dalam zona penyangga bahkan jika mereka bukan titik yang berurutan. Saya tidak dapat menemukan cara untuk membuatnya terlihat pada poin berurutan.
Saya ingin metode yang akan menyediakan tabel output karena saya memiliki banyak titik data untuk dilihat dengan cara ini.
Saya menggunakan ArcGIS 10. Setiap bantuan yang dapat diberikan oleh siapa pun akan sangat dihargai.
sumber
R
, mari kita jelajahi solusi berbasis R.Jawaban:
Diberikan daftar lokasi titik (lebih disukai dalam koordinat yang diproyeksikan, sehingga jaraknya mudah dihitung), masalah ini dapat diselesaikan dengan lima operasi sederhana :
Hitung jarak titik-titik.
Untuk setiap titik i, i = 1, 2, ..., identifikasi indeks titik-titik tersebut pada jarak kurang dari radius buffer (seperti 1500).
Batasi indeks tersebut menjadi i atau lebih besar.
Pertahankan hanya grup indeks berurutan pertama yang tidak memiliki jeda.
Keluarkan hitungan grup itu.
Dalam
R
, masing-masing sesuai dengan satu operasi. Untuk menerapkan urutan ini pada setiap titik, akan lebih mudah untuk merangkum sebagian besar pekerjaan dalam fungsi yang kita tentukan , dengan demikian:(Lihat di bawah untuk versi yang lebih efisien dari fungsi ini.)
Saya telah membuat fungsi ini cukup fleksibel untuk menerima berbagai daftar titik (
xy
) dan jarak buffer (r
) sebagai parameter.Biasanya, Anda akan membaca file lokasi titik (dan, jika perlu, urutkan berdasarkan waktu). Di sini, untuk menunjukkan ini dalam tindakan, kami hanya akan menghasilkan beberapa data sampel secara acak :
Jarak tipikal mereka adalah 300 * Sqrt (2) = sekitar 500. Kami melakukan perhitungan dengan menerapkan fungsi ini ke titik-titik dalam array
xy
(dan kemudian menempelkan hasilnya kembali kexy
, karena ini akan menjadi format yang nyaman untuk mengekspor ke GIS ):Anda kemudian akan menganalisis
result
array lebih lanjut , baik dalamR
atau dengan menulisnya ke file dan mengimpornya ke perangkat lunak lain. Berikut adalah hasil untuk data sampel :(Ingatlah bahwa penghitungan mencakup titik di mana mereka didasarkan, sehingga setiap penghitungan harus 1 atau lebih besar.)
Jika Anda memiliki ribuan titik, metode ini terlalu tidak efisien : ini menghitung terlalu banyak jarak titik-ke-titik yang tidak perlu. Tetapi karena kami telah merangkum pekerjaan dalam
forward
fungsi, inefisiensi mudah untuk diperbaiki. Ini adalah versi yang akan bekerja lebih baik ketika lebih dari beberapa ratus poin terlibat:Untuk menguji ini, saya membuat poin acak seperti sebelumnya tetapi memvariasikan dua parameter:
n
(jumlah poin) dan standar deviasi mereka (hard-coded seperti 300 di atas). Deviasi standar menentukan jumlah rata-rata poin dalam setiap buffer ("rata-rata" pada tabel di bawah): semakin banyak, semakin lama algoritma ini diperlukan untuk berjalan. (Dengan algoritme yang lebih canggih, waktu tayang tidak akan terlalu tergantung pada berapa banyak poin di setiap buffer.)sumber
Saya pikir yang terbaik adalah skrip sedikit rutin menggunakan ArcPy. Saya akan membuat sesuatu seperti pseudo-code ini:
Saya tidak yakin apa yang ingin Anda lakukan dengan informasi tersebut tetapi saya kira Anda bisa membuat bidang di tabel Anda dan memperbaruinya dengan hitungan poin berurutan (jika demikian, tambahkan bidang terlebih dahulu).
Saya akan merekomendasikan membuat lapisan fitur (seperti tampilan tabel database tetapi untuk fitur di Arc). Buat dua dari data asli dan buka kursor pembaruan pada set pertama yang menentukan jenis keseluruhan Anda (karena ESRI tidak memenuhi permintaan SQL penuh). Gunakan yang kedua untuk memilih berdasarkan lokasi dari dan membuka Kursor Pencarian pada set pilihan yang dihasilkan.
[EDIT SEBAGAI PERMINTAAN Jame] Kasar saja menggunakan Model Builder. Jika Anda belum pernah menggunakan Pembuat Model sebelumnya, yang harus Anda lakukan adalah klik kanan di arcToolbox. Pilih 'Tambah kotak Alat'. Klik kanan pada toolbox baru dan klik 'New-> model'. Setelah Anda memiliki jendela model baru, seret dan letakkan alat dan data yang Anda butuhkan ke jendela dan tautkan secara visual bersama-sama (menggunakan alat panah kecil). Ketika Anda sudah sejauh yang Anda bisa (Anda tidak akan dapat menambahkan kursor Anda di sini), gunakan opsi di Menu File Model Builder untuk mengekspor ke Python. Itu akan membuat Anda sebagian besar jalan ke sana. Ini adalah kode yang dibuat secara otomatis sehingga akan menjadi sedikit jahat tetapi fungsional. Kemudian gunakan tautan dalam jawaban saya di atas untuk memahami dan menambahkan kursor.
Jika Anda baru mengenal Python, jangan takut menulis kode! Python adalah bahasa scripting yang sangat mudah untuk mendapatkan hasil dari dengan cepat. Esri juga memiliki panduan tentang hal itu.
Jika Anda mengalami masalah dengan kode Anda, poskan ke forum ini dan minta bantuan. Ada BANYAK orang di sini yang dapat membantu. Satu peringatan - pastikan Anda menggunakan bantuan yang tepat dari ESRI. Mereka secara besar-besaran mengubah API Python antara versi 9.x dan 10 (masing-masing arcgisscripting dan arcpy). Jadi, jika Anda menggunakan ArcGIS 9.x, temukan tautan yang setara untuk menambang!
sumber
Anda dapat menggunakan pembuat model di ArcGIS untuk menemukan nilai ID berurutan. Saya mengekspor model saya sebagai skrip python. Kode akan menghasilkan shp baru yang memiliki nilai ID berurutan. !INDO! adalah bidang ID dasar. Anda harus memperbarui jalur point2.shp, nama, dan nama bidang ID untuk cocok dengan kasus Anda.
sumber