Arcgispro’da Python ile toolbox III
Herkese merhaba,
Bu blog yazısında parsel verilerini okuyup köşe koordinatlarını csv formatında aktaracağımız tool’u python ile kodlayacağız.
Get ozan uzun’s stories in your inbox
Join Medium for free to get updates from this writer.
Hemen kodlamaya başlayalım ve adım adım geliştirelim. İlk olarak gerekli kütüphaneleri import ediyoruz.
import arcpy
import jsonArdından girdi ve çıktı değişkenlerini tanımlıyoruz. Yazının sonunda bu kodları değiştireceğiz.
fc=r"D:\Medium\Arcpy\toolbox2\toolbox2.gdb\Parsel_ITRF"
output=r"D:\Medium\Arcpy\toolbox2\output\koordinatlar.csv"Şimdi SearchCursor ile parsel verilerinin hem geometrisini hemde ada ve parsel verisini çekelim.
with arcpy.da.SearchCursor(fc,("SHAPE@JSON","Ada","Parsel")) as rows:
for row in rows:
Ada=row[1]
Parsel=row[2]
print(Ada+"-----"+Parsel)
print("******************")
print(row[0])Burada SHAPE@JSON tüm verilerin geometrilerini json formatında almamızı sağlıyor. Bu koordinatalrı en iyi çekmenin yollarıdan biri.
Çıktıya baktığımız zaman köşe koordinatları , koordinat sistemi gibi işimize yarayan önemli bilgileri içermektedir. Bu verileri okuyabilmek için json formatını dictionary formatına dönüştürmeliyiz.
with arcpy.da.SearchCursor(fc,("SHAPE@JSON","Ada","Parsel")) as rows:
for row in rows:
Ada=row[1]
Parsel=row[2]
json_data=json.loads(row[0])
print(Ada+"-----"+Parsel)
print("******************")
print(json_data)Çıktıya baktığımız zaman İhtiyacımız olan koordinatların rings adındaki bir key de liste halinde olduğunu görüyoruz. Liste içerisinde ekstra bir liste olmasının sebebi ise bazı persel verilerinin multipolygon olmasından kaynaklanır. Bu yüzden iç içe for döngülerini kullanacağız. Koordinatları alabilmek için aşağıdaki kodu aşağıdaki gibi güncelleyelim.
with arcpy.da.SearchCursor(fc,("SHAPE@JSON","Ada","Parsel")) as rows:
for row in rows:
Ada=row[1]
Parsel=row[2]
json_data=json.loads(row[0])
rings=json_data["rings"]
print(Ada+"-----"+Parsel)
print("******************")
for ring in rings:
for coodinate in ring:
X=round(coodinate[1],2)
Y=round(coodinate[0],2)
print("X= "+str(X)+" Y= "+str(Y))Çıktıya baktığımıza ada ve parsele göre verileri okunabilir şekilde alabiliyoruz ama csv formatına uygun değil bu yüzden çıktıyı uygun halde güncelliyoruz.
with arcpy.da.SearchCursor(fc,("SHAPE@JSON","Ada","Parsel")) as rows:
for row in rows:
Ada=row[1]
Parsel=row[2]
json_data=json.loads(row[0])
rings=json_data["rings"]
for ring in rings:
for coodinate in ring:
X=round(coodinate[1],2)
Y=round(coodinate[0],2)
print(Ada+","+Parsel+","+str(X)+","+str(Y))Şimdi cvs formatına uygun oldu artık dosyanın içerisine yazabiliriz.
with open(output,"w") as file:
file.write("Ada,Parsel,X,Y\n")
with arcpy.da.SearchCursor(fc,("SHAPE@JSON","Ada","Parsel")) as rows:
for row in rows:
Ada=row[1]
Parsel=row[2]
json_data=json.loads(row[0])
rings=json_data["rings"]
for ring in rings:
for coodinate in ring:
X=round(coodinate[1],2)
Y=round(coodinate[0],2)
file.write(Ada+","+Parsel+","+str(X)+","+str(Y)+"\n")Sırada bu kodu bir tool’un içerisine eklemek var ama ondan önce başta tanımladığımız değişkenleri değiştirmeliyiz.
fc=arcpy.GetParameterAsText(0)
index=arcpy.GetParameterAsText(1)
name=arcpy.GetParameterAsText(2)
output=index+"/{0}.csv".format(name)Burada parametre sayısını 3'e çıkardık. İlk parametre Parsel verilerini aldığımız fc, ikinici parametre csv dosyasını kayıt edeceğimiz klasörün bulunduğu dizin son olarak ise üçüncü parametrede ise csv dosyasının adını alıyoruz. Tüm işlemleri tamamladıktan sonra notebook’umuz export ediyoruz ve tool’umuzu oluşturuyoruz. Bu aşamaları daha önceki yazılarda yazdığım için direk parametrelerin olduğu kısma geçiyoruz.
tool’u oluturduktan sonra istdiğimiz gibi çalıştırabiliriz.







