Arcgispro’da Python ile Toolbox I
Herkese merhaba,
Bu yazı serisi ile python kullanarak Arcgispro’da çeşitli toolboxlar yapacağız. İlk toolbox projemiz basit bir csv dosyasındaki verileri bir feature class’ın içerisine ekleyeceğiz.
Elimizdeki veriyi İzmir Büyükşehir Belediyesinin açık veri platformundan aldık. Aldığımız veri otobüs hatları güzergahlarının hat numaraları, yönleri ve konumları bulunmatadır.
Kodlamaya başlamadan önce bu veriye uygun bir Feature class oluşturalım.
Şimdi ilk olarak arcgisprodaki projemizde bir notebook oluşturuyoruz.
Şimdi sırada ihtiyacımız olan kütüphaneleri ekleyelim.
import arcpy
import pandas as pdArdından ihtiyacımız değişkenleri tanımlayalım.
fc=r"D:\Medium\Arcpy\Toolbox1\Toolbox1.gdb\Otobus_Hat"
data=r"D:\Medium\Arcpy\Toolbox1\eshot-otobus-hat-guzergahlari.csv"
fields = ['Hat_No', 'Yon', 'SHAPE@']Kod satırları sırası ile
- fc:Feature class’ın bulunduğu dizin.
- data:Verini bulundupu dizin.
- fields: Feature class içerisinde işlem yapacağımız alanlar. Burada ‘hat_no’ ve ‘Yon’ kullanacağımız fieldlar iken ‘SHAPE@’ ise fc’nin çoğrafi değerlere erişebilmemizi sağlar. Buradaki coğrafi değer hat güzergahının vertex(köşe koordinatları).
Şimdi bu verileri pandas ile okuyalım.
df=pd.read_csv(data,sep=";")
dfVeriyi dikkatli bir şekilde incelediğimiz zaman hat no ve yon değerlerinin tekrar ettiğiniz görüyoruz. Enlem ve boylam değerlerini kullanarak güzergah çizebilmek için hat numaraları ile yon değerlerine göre gruplandırmamız gerekiyor ama bundan önce enlem ve boylam değerlerini tek bir kolona liste biçimin de alalım.
df["KONUM"]=list(zip(df['BOYLAM'], df['ENLEM']))
dfŞimdi gruplandırabiliriz.
df1=df.groupby(["HAT_NO","YON"],as_index=False).agg({"KONUM":list})
df1Artık en son oluşturduğumuz Dataframe’i bir döngü içerisinde kullanarak güzergahları fc’in içerisine ekleyebiliriz.
with arcpy.da.InsertCursor(fc,fields) as lines:
for row in df1.itertuples(index=False):
point_array = arcpy.Array([arcpy.Point(x,y ) for x,y in row.KONUM ])
polyline = arcpy.Polyline(point_array,arcpy.SpatialReference(4326))
if row.YON==1:
yon="GIDIS"
else:
yon="DONUS"
lines.insertRow([row.HAT_NO,yon,polyline] )Kodu içerisinde önemli kısımları sırası ile inceleyelim.
- arcpy.da.InsertCursor: Arcpy kütüphansinin içerisinde bulunan ve fc’in içerisine veri eklememize sağlayan komuttur.
- df1.itertuples: df’in içerisinde verileri for döngüsü ile almamızı sağlar.
- arcpy.Array: Her bir güzergahın köşelerinin tamamının liste şeklindeki coğrafi nesne.
- arcpy.Point: Köşe noktalarının koordinatlarının bulunduğu coğrafi nesne.
- arcpy.Polyline: Daha önce aluştruduğumuz liste şeklindeki coğrafi nesneyi kullanarak cizgi formatında yeni bir nesne oluşturuyoruz. Burada arcpy.SpatialReference bir koordinat sistemi tanımlamamızı sağlıyor.
- if ve else : Df’de bulunan YON kolonunda eğer 1 varsa gidiş eğer 2 varsa dönüş olarak yeni bir yon adındaki değişkene atıyoruz.
- lines.insertRow: Df’de alınan ve oluşturulan tüm değeri fc’a eklememizi sağlar.
Tüm kodları doğru biçimde çalıştırdığınızda verilerin haritada ve tabloda rahatlıkla görebilirsiniz.
Tasarladığımız bu sistemi kodlama bilmeyen bire paylaşmayı düşünüyorsak onunda kolay kullanabilmesi için bir toolbox içerisine yerleştireceğiz.
Get ozan uzun’s stories in your inbox
Join Medium for free to get updates from this writer.
Bunun için ilk olarak başta tanımladığımız fc ve data değişkenlerini değiştireceğiz.
fc=arcpy.GetParameterAsText(0)
data=arcpy.GetParameterAsText(1)arcpy.GetParameterAsText Komutu toolbox da oluşturacağımız parametreler ile bağlantı kurmamızı sağlar.
Şimdi yazdığımız notebook’u bir script olarak kaydetmemiz gerekiyor. Bunuda arcgisproda notebook içerisinde çalışırken sol üst köşede bulunan export tuşu ile yapacağız.
Şimdi proje ile birlikte oluşan toolbox’ın üzerine sağ tıklayarak new>Script diyoruz.
General kısmında tool’un ismi bulunduğu dizin ve açıklama vb. değerleri giriyoruz.
Parameters kısmında dışarıdan alacağımız parametreleri oluşturuyoruz. Name kısmında parametre adı. Data Type kısmında dışarıdan alacağımız değerlerin tiplerini alıyoruz. Burada fc için Feature Class , csv için ise File seçiyoruz. Type kısmında ki required kısmı tüm parametrelerin gerekli olduğu ve girirmeden tool’un çalışmayacağı anlamında geliyor. Son olarak Direction kısmı ise hem fc’ı hem de Csv dosyasını dışarıdan aldığımız için Input olarak giriyoruz
Execution kısmıda ise export ettiğimiz script dosyasını yüklüyoruz. Bunu için sağ üsteki dosya simgesini kullanıyoruz. Script’i yükledikten sonra pencereden yazdığımız kodları görebiliriz. Diğer iki kısım bizim için bu projede gerekli olmadığı için pas geçebiliriz.
Ok tuşuna bastıktan sonra tool’umuzu oluşturmuş oluşturuyoruz ve artık test edebiliriz.
Şimdi tool’umuzu tamamladık yalnız tool’umuz sadece kendi projemizde çalışır sebebi ise tool Script’e bağlı olduğundan dolayı. Eğer toolbox’u başka proje ve bilgisayardan çalışması için embed yapmamız gerekiyor. Bunu sağ tık properties kısmına geldikten sonra execution kısmından çözebiliriz. Embed yapmak için kırmızı alet kutusuna basmalıyız
Embed işleminden sonra kırmızı alet kutusunun yerine yeşil ok geliyor. Bu yeşil ok python dosyasını export etmemizi sağlar. Dikkat ettiyseniz embedten sonra script dosyasının bulunduğu dizin arık gözükmüyor çünkü kodumuz artık tool’un içerisinde gömülü oluyor. Ayrıca beyaz kilit tuşuna basarak kodumuza şifre koyabiliriz.







