Bagaimana cara membagi titik dengan poligon menggunakan ArcGIS Desktop?

8

Saya mencari cara untuk membagi poin dengan kelas fitur county polygon. Gambar terlampir menunjukkan dua kelas fitur: satu terdiri dari poin dan yang lainnya adalah kelas fitur county poligon. Alat pisah akan ideal jika memungkinkan poin. Saya lebih suka keluaran bersih tanpa bidang tambahan yang ditambahkan ke atribut titik. Selain itu, saya ingin memiliki nama county dari kelas fitur poligon yang mendefinisikan kelas fitur titik baru (misalnya Kiowa, Clark, Comanche). Saya menghargai semua solusi dan saran.

Untuk contoh ini, produk akhir harus tiga kelas fitur titik bernama "Kiowa", "Clark" dan "Comanche" yang dihasilkan dari satu, kelas fitur titik yang lebih besar. Sebuah solusi otomatis akan ideal, karena saya memiliki banyak, banyak titik FC yang digabung atas lusinan negara untuk bekerja dengannya (kira-kira mencakup negara bagian KS).

masukkan deskripsi gambar di sini

Harun
sumber
3
Operasi ini dikenal oleh pengguna perangkat lunak ESRI sebagai gabungan spasial . Lihat juga gis.stackexchange.com/questions/11047 dan gis.stackexchange.com/questions/23398 .
Whuber
@whuber I membayangkan setidaknya 5 langkah dengan pendekatan join spasial: 1) join spasial 2) pilih poin berdasarkan county 3) buat FC baru berdasarkan seleksi, 4) Ubah nama FC berdasarkan County 5) Hapus bidang baru (mis. "Join_count "). Saya perlu menemukan cara untuk mengotomatisasi proses (salah satu tautan Anda menjanjikan). Saya juga berharap bahwa saya menghadap ke pendekatan yang lebih sederhana seperti apa yang "split" akan capai untuk kelas fitur poligon. Saya khawatir saya mungkin harus pergi ke rute kursor.
Aaron
Puis-je avoir le lien en langue française?
Aaron, komentar Anda tidak cocok dengan pertanyaan Anda. Tampaknya pertanyaan tidak mengindikasikan bahwa Anda menginginkan satu output FC untuk masing-masing daerah. Langkah-langkah lain tidak perlu: sekali dan untuk semua, buat salinan county FC yang hanya atributnya adalah nama county. Penggabungan spasial ke poin Anda menyelesaikan pekerjaan. Jika Anda pertama kali menggabungkan semua dataset titik (yang merupakan desain database pintar secara umum) maka seluruh proyek Anda dapat diselesaikan hanya dalam dua langkah: (1) gabungan spasial (2) membagi output dengan nama county: lihat jawaban blah238.
whuber
@KhalilouWAGUE le lien de la jointure spatial en fr help.arcgis.com/fr/arcgisdesktop/10.0/help/index.html#//…
geogeek

Jawaban:

4

Setelah menggunakan Spatial Join atau Intersect untuk mendapatkan atribut County name pada setiap titik, coba gunakan alat Split Layer oleh Atribut Dan Patterson yang tersedia di Geoprocessing Model dan Script Tool Gallery .

Atau Anda bisa menggunakan ModelBuilder untuk mengotomatisasi ini menggunakan pendekatan berbeda yang melibatkan Select Layer by Location (klik thumbnail untuk gambar penuh).

masukkan deskripsi gambar di sini

Diangkat dari utas ini di forum ESRI: Memilih Kelompok berdasarkan Lokasi dan Mengekspor Bentuk

blah238
sumber
3

Jauh lebih mudah untuk menggunakan perintah intersect.
Matikan bidang yang tidak diinginkan.
1. Berpotongan dengan output baru.
2. Gabungkan output dengan oid asli.
3. Hitung bidang baru dengan nama cnty.

Lihat ettools untuk beberapa versi penyatuan spasial yang disempurnakan dan dipisah berdasarkan lokasi.

Brad Nesom
sumber
2

Dari apa yang saya baca, saya hanya akan menjalankan overlay (Alat Analisis ArcToolbox - Overlay - dan Identity, Intersect, atau Spatial Join) dari poin Anda dengan dataset poligon county. Di ArcMap Anda bisa membatasi bidang yang ditampilkan di layer county ke bidang dengan nama county, dan hanya bidang yang akan ditambahkan ke hasilnya. Jika bahkan bidang yang ditambahkan terlalu banyak, hitung nilainya ke dalam bidang yang cocok di tabel poin dan kemudian hapus bidang yang ditambahkan.

hidung belang
sumber
2

Dengan menggunakan Python, Anda dapat memutarkan "Select Layer By Location" untuk meraih poin yang tumpang tindih dengan setiap countie, dan kemudian menyimpannya sebagai Shapefile. Itu akan menjadi seperti ini:

import arcgisscripting
# starts geoprocessing
gp = arcgisscripting.create()
gp.OverWriteOutput = 1

# Variable iniciation
points = u"Path for your point shape"
counties = u"Path for counties shape"
outDir = u"path for output directory"

#Load points as a layer
gp.MakeFeatureLayer(points, "points")

# Go county by county
rows = gp.searchcursor(counties)
row = rows.next()

# loop County by county overlap
while row.countyName: #adapt to your countie table of attributes
    # Make a layer from the feature class
    gp.MakeFeatureLayer(counties, "counties lyr", "[countieName]='" + row.countieName + "'")
    # Select all points that intersect the current countie polygon
    gp.SelectLayerByLocation(points, "intersect", "counties_lyr", 0, "new_selection")
    outSHP = outDir + row.counties + u".shp"
    gp.CopyFeatures_management(points, outSHP)
    print(outSHP)
    row = rows.next()
 # End of loop

 del rows, row, gp

 #END

Saya belum mengujinya, Anda mungkin harus menyesuaikannya dengan kasus Anda.

Sunting: Mengubah Select_analysis oleh CopyFeatures_management mengikuti saran @ blah238.

Alexandre Neto
sumber
1
Saya mungkin akan mengubah Select_analysis ke CopyFeatures_management atau serupa - Anda sudah melakukan seleksi sehingga berlebihan.
blah238
Anda benar, bahwa hasilnya sama, saya telah mengeditnya untuk membuatnya lebih jelas.
Alexandre Neto
Terima kasih untuk skrip ini. Apakah ada cara untuk melakukan ini di luar memori lokal? Masalah yang saya temui dengan dataset saya adalah 7,5 juta poin tidak suka ditambahkan sebagai layer.
Aaron
Anda akan menambahkan sebagai layer hanya sebagian dari poin (dari masing-masing daerah). Menjalankan skrip di luar ArcMap, Anda bahkan tidak perlu menampilkannya sehingga bisa bekerja dengan cara apa pun. Tetapi Anda dapat mencoba hal lain. Mulailah dengan membuat spasi (atau berpotongan) antara titik dan poligon, ini akan membuat file sementara dengan info titik + nama county. Kemudian Anda mengulangi kabupaten dan menggunakan Select_analysis (SpatialJoint_temp, outSHP, "[countieName] = '" + row.countieName + "" "). Saya pikir itu akan berhasil juga, tetapi saya tidak tahu apakah itu lebih atau kurang efisien daripada solusi pertama.
Alexandre Neto
0

Sekarang ada video tutorial eLearning (tidak gratis, tetapi relatif murah) yang disebut Menggunakan ArcPy Cursors untuk Membagi berdasarkan Atribut dan Lokasi yang mencakup menunjukkan cara:

Tulis skrip Python untuk membagi satu kelas fitur menggunakan kelas fitur poligon menjadi satu kelas fitur per fitur yang ditemukan dalam setiap lokasi poligonnya

Saya pikir ini membahas persyaratan dari pertanyaan ini.

Penafian : Saya adalah penulis dan penyaji tutorial video eLearning ini

PolyGeo
sumber