ArcGIS for Desktop kullanarak nokta çevresinde kare tampon oluşturma?


31

Bir nokta özelliğinden bir kare tampon oluşturmak istiyorum ancak içine giren kodu anlamıyorum.

Benzer sorular forums.esri sitesinde de sorulmuştu ancak bu 10 yıldan daha uzun bir süre önce yapıldı ve kodu denediğimde işe yaramadı.

Bir nokta özelliğinden kare tamponu nasıl oluşturabilirim?


gis.stackexchange.com/questions/12479/… aslında bir nüshadır (çünkü bu sorunun genellemesine hitap eder), fakat burada zaten kare tamponlara özgü iyi cevaplar olduğu için, her iki konuyu da açık bırakmak en iyisidir. onları birleştirmek yerine ayırın. Ancak daha fazla çözüm istiyorsanız, diğer ipliği de okuyun!
whuber

2
Tamam teşekkürler whuber. Bu web sitesini dün yeni buldum ve hâlâ tanımaya başladım. Bunu gelecekteki postalarım / sorularla yapmaya çalışacağım. Bu siteyi ArcGIS forumlarından çok daha fazla beğeniyorum.
Kimball,

Bu yorumu herhangi bir şekilde eleştiri olarak kastetmedim, Kimball: bu iki konuyu birleştirmeyi önlemek için vardı, hepsi bu. Topluluğumuza Hoşgeldiniz! (Lütfen arkadaşlarınıza bizden, özellikle de ArcGIS forumlarındakilerden
bahsedin

Sağ. Öyle demek istemediğini biliyorum. Bu topluluktan çok keyif alıyorum ve bu yeni forum hakkında başkalarına anlatmaya başladım.
Kimball

Önemli payınız için teşekkür ederiz. Sağladığınız komut dosyasını kullanarak koordinatlarını elle yazmadan dikdörtgen arabellekler oluşturmak için nokta özelliklerinde bir dizi alan verisini nasıl kullanabileceğimi merak ediyorum. Teşekkürler

Yanıtlar:


47

ArcMap 10 ile şu adımları deneyin:

  1. Tampon puanınızı özelliğini (ArcToolbox> Analiz Araçlar> Yakınlık> Tampon). Doğrusal ünite kutusunda doğru mesafeyi seçtiğinizden emin olun.
  2. Yeni oluşturduğunuz tamponları Özellik Zarfından Çokgen aracına (Veri Yönetimi Araçları> Özellikler> Çokgenden Özellik Zarfına) girin. Birden fazla puanınız varsa "Çok bölümlü özellikler oluştur" kutusunu seçtiğinizden emin olun.

Bir Python çözümü için:

Kare arabellek oluşturmak için SearchCursor ve InsertCursor kullanma

görüntü tanımını buraya girin


2
+1 Çözümün işe yaradığını gösteren cevaplar en iyisidir.
whuber

12

Olası bir çözüm, istediğiniz normal yarıçapa sahip standart ESRI arabellek aracını kullanarak istediğiniz normal yarıçap arabelleklerinizi oluşturmak ve ardından elde edilen bu arabellek özellik sınıfında Çokgenli Bir Zarf Özelliği Zarfı yapmak olacaktır. Bu, her özelliğin kapsamı etrafında kare bir zarf özelliği oluşturur. Poligon Özelliği Zarfı, Veri Yönetimi> Özellikler içinde bulunur. Model oluşturucu modeli şuna benzer:

görüntü tanımını buraya girin


Mükemmel çözüm! Ayrıca, tamponun çıktısını bir in_memory katmanı (in_memory \ tmpBuffer) olarak oluşturarak, gereksiz verileri diske yazmaktan kaçınabilir ve işlemi çok daha hızlı yapabilirsiniz.
RyanDalton

9

Aaron kodunun sonunda bağlanmış olan script sadece kare tamponlar için kullanılabildiğinden ve daha yeni arcpy.da modülünden faydalanmadığından, dikdörtgen tamponlar oluşturmak için kullanılabilecek bir senaryo yazdım. 10k rasgele nokta veri setinde, 10 saniyede tamamlandı:

görüntü tanımını buraya girin

import os, arcpy

point_FC = arcpy.GetParameterAsText(0)
w = float(arcpy.GetParameterAsText(1))
h = float(arcpy.GetParameterAsText(2))
output_FC = arcpy.GetParameterAsText(3)

def rect(coord, w, h):
        #Given XY coordinates and rectangle dimensions,
        #return a polygon object of a rectangle centered about the point
        x,y = coord
        w *= 0.5
        h *= 0.5
        xmin,xmax = x-w, x+w
        ymin,ymax = y-h, y+h
        poly = ((xmin, ymax), (xmax, ymax), (xmax, ymin), (xmin, ymin))
        return arcpy.Polygon(arcpy.Array(arcpy.Point(*p) for p in poly))

#Create output feature class.
spatref = arcpy.Describe(point_FC).spatialReference
folder, base = os.path.split(output_FC)
arcpy.CreateFeatureclass_management(folder, base, "POLYGON", spatial_reference=spatref)

#Get field object for every field in input except OID and Shape.
fields = [f for f in arcpy.ListFields(point_FC) if f.type not in ("OID", "Geometry")]

for field in fields:
         arcpy.AddField_management(output_FC, field.name, field.type, field.precision,
                                   field.scale, field.length, field.aliasName,
                                   field.isNullable, field.required, field.domain)

#Get field names to be inputted to cursors.
#Need SHAPE@XY token to read point coords and SHAPE@ token to write polygon coords.
fnames = [f.name for f in fields]
fields_in = fnames[::]
fields_out = fnames[::]
fields_in.append("SHAPE@XY")
fields_out.append("SHAPE@")

#Create buffers and write attributes to output FC, if any.
count = int(arcpy.GetCount_management(point_FC)[0])
arcpy.SetProgressor("step", "Buffering...", 0, count, 1)
with arcpy.da.SearchCursor(point_FC, fields_in) as Scursor,  arcpy.da.InsertCursor(output_FC, fields_out) as Icursor:
        for i,row_in in enumerate(Scursor):                
                #"Convert" point to rectangle
                arcpy.SetProgressorPosition(i)
                feature = list(row_in)
                feature[-1] = rect(feature[-1], w, h)                
                Icursor.insertRow(feature)


1

Aaron'un cevabına alternatif olarak, Gelişmiş lisansı olmayanlar için Minimum Sınırlama Geometrisi aracını kullanın. Aşağıdaki adımlar (Aaron'dan değiştirilmiş):

  1. Tampon puanınızı özelliğini (ArcToolbox> Analiz Araçlar> Yakınlık> Tampon). Doğrusal ünite kutusunda doğru mesafeyi seçtiğinizden emin olun.
  2. Yeni oluşturulan tamponlarınızı Minimum Sınırlama Geometrisi aracına (Veri Yönetimi Araçları> Özellikler> Minimum Sınırlama Geometrisi) girin. 'RECTANGLE_BY_AREA' veya 'RECTANGLE_BY_WIDTH' kullanın, diğer seçenekler sadece Gelişmiş lisansla kullanılabilir.

EDIT : Bu seçenek, 'ENVELOPE' seçeneğini kullanmadan (Gelişmiş bir lisans gerektirir), elde edilen kare tamponların yönünü kontrol etmenize izin vermez. 'Çıktıya nitelik olarak geometri özellikleri ekle (isteğe bağlı)' seçeneğini işaretleyerek - ortaya çıkan ofset, çıktı özellik sınıfında 'MBG_Orientation' olarak kaydedilir. Bu daha sonra eğer istenirse özellikleri tekrar merkeze döndürmek için kullanılabilir - bkz. ArcPy? Kullanarak özellik tablosundaki değere göre çokgen döndürme. Bunun için potansiyel bir çözüm.

görüntü tanımını buraya girin


Özel özellik sınıfım için, bu iş akışını kullanarak kareleri farklı yönlerde döndürerek sona erer. Belki üst üste binen tampon çevrelerim var. Emin değil. Esri'nin Aaron'un yöntemini aynı özellik sınıfımda kullanmasını sağladım ve tamponlanmış halkaları döndürmedi.
Andrew,

@Andrew, haklısın, bu bir Gelişmiş Lisans olmadan aracın bir sınırlamadır. ENVELOPE seçeneğini kullanmak, yukarıdaki Aaron yöntemiyle aynı sonucu verir ancak aynı zamanda Gelişmiş Lisansa da ihtiyaç duyar. Potansiyel bir geçici çözüm, 'özellikler olarak geometri özellikleri ekle' seçeneğini işaretlemek, yatırıldıkları miktarı bulmak (tutarlı olmaları gerekir), ardından elde edilen kare arabellekleri bir düzenleme oturumunda bu miktar kadar döndürmek olacaktır. Bunu henüz denemedim.
Dùn Caan

0

Bu site , geographiclib JavaScript ve js2shapefile kullanarak csv'nin kare ya da dikdörtgen ya da daire tamponlarına nasıl dönüştürüleceğini açıklar.

Sorununuzu çözüp çözmediğine bir göz atabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.