Professional Documents
Culture Documents
Industrial Islerde Geodeziya Koordinat Sistemleri TR
Industrial Islerde Geodeziya Koordinat Sistemleri TR
YÜKSEK
LİSANS TEZİ
Wael ALNAGAR
Aralık 2019
İSTANBUL TEKNİK ÜNİVERSİTESİ ★ FEN BİLİMLERİ ENSTİTÜSÜ
MÜHENDİSLİK VE TEKNOLOJİ
Wael ALNAGAR
501161668
Aralık 2019
İSTANBUL TEKNİK ÜNİVERSİTESİ ★ FEN BİLİMLERİ ENSTİTÜSÜ
Wael ALNAGAR
501161668
Aralık 2019
İTÜ Fen Bilimleri Enstitüsü Mühendislik ve Teknoloji Anabilim Dalı 521161668
numaralı yüksek lisans öğrencisi Wael ALNAGAR, "COORDINATE SYSTEMS
AND GEODETIC MEASUREMENTS IN
İlgili mevzuatta belirtilen gereklilikleri yerine getirerek hazırladığı "ENDÜSTRİYEL
ÖLÇÜMLER" adlı çalışmasını aşağıda imzaları bulunan jüri önünde sunmuştur.
v
vi
ÖNSÖZ
vii
viii
İÇİNDEKİLER
Sayf
ix
Helmert Dönüşümü - Koordinat Hesaplama
................................................................................................................................Kodu
15
Helmert Dönüşümü -
................................................................................................................................Örne
k16 Üzerinden Kodun Test Edilmesi ......................................................................
3.4.1 Black Cat kullanarak Helmert parametrelerini hesaplama ........................17
3.4.2 Black Cat kullanarak Helmert parametrelerini hesaplama ........................18
3.4.3 Yeni koordinatları hesaplamak için Helmert parametrelerini kullanma ....20
MESAFEYE DAYALI REZEKSIYON (ALAN RETRAKSIYONU) .............22
Giriş22
Matematiksel
.................................................................................................................................Mode
l23
Mesafe Tabanlı Rezeksiyon - Python
.................................................................................................................................Code
25
Mesafeye Dayalı Rezeksiyon -
.................................................................................................................................Örne
k26 Üzerinden Kodun Test Edilmesi ......................................................................
ÇIKIŞ NOKTALARI
....................................................................................................................................POZI
SYONLARI29
Kutupsal Koordinatlardan Yola
................................................................................................................................Çıkm
ak29
Kutupsal Koordinatlardan Yola Çıkma - Python
................................................................................................................................Code
30
Kutupsal Koordinatlardan Yola Çıkma - Kara Kedi
................................................................................................................................Örne
ği31
KARA KEDI
....................................................................................................................................UYGULAMA
SI33
Kara Kedi .........................................................................................................Nedir33
Ana Pencerenin ................................................................................................Kodu33
Kara Kedi Klasör ..............................................................................................İçindekiler34
SONUÇ35
REFERANSLAR.......................................................................................................36
EKLER.......................................................................................................................37
EK A: Helmert dönüşüm parametrelerini hesaplamak için python betiği 38 EK B:
Helmert parametrelerini kullanmak için python betiği ...........................................
43
EK C: Alan geri çekmeyi programlamak için Python kodu....................................47
EK D: Kara Kedi'de kullanılan Kodun belirlenmesi ...............................................49
EK E: Kara Kedi ana penceresinin kodu.................................................................51
ÖZGEÇMİŞ...............................................................................................................55
x
KISALTMALAR
xi
xii
TABLOLAR LİSTESİ
Sayf
17
Tablo 3.2 : "parametreler" dosya içeriği ....................................................................19
Tablo 3.3 : "Helmert Parameters Variance_Covariance" dosya içeriği.....................19
Tablo 3.4 : "Helmert Kullanımı" dosya içeriği. .........................................................20
Tablo 3.5 : "Helmert'ten sonra" dosya içeriği ............................................................21
Tablo 4.1 : "alan geri çekme" dosya içeriği...............................................................26
Tablo 4.2 : "Rezeksiyon sonucu" dosya içeriği .........................................................28
Tablo 4.3 : "Rezeksiyon Varyans Kovaryansı" dosya içeriği ....................................28
Tablo 5.1 : "stakeoutpoints" CSV dosya içeriği ........................................................31
Tablo 5.2 : "Stakeoutresult" dosya içeriği..................................................................32
xiii
xiv
ŞEKİLLER LİSTESİ
Sayfa
xv
xvi
ENDÜSTRİYEL ÖLÇÜMLERDE KOORDİNAT SİSTEMLERİ VE JEODEZİK
ÖLÇÜMLER
ÖZET
xvii
çevrilmesi gerekir
xviii
ölçümler. Ve son olarak bu tezin her adımında tüm çalışmalar örnekler üzerinden
incelenecektir.
xix
ENDÜSTRİYEL ÖLÇEMLERDE KOORDİNAT SİSTEMLERİ VE
JEODEZİK ÖLÇMELER
ÖZET
xx
kullanılması tercih edilmiştir. Bu nedenle, bu çalışmada Helmert dönüşümünün
matematiksel modeli, dönüşüm matrislerinin nasıl hazırlanacağı ve sonuç olarak elde
edilen dönüşüm parametreleri için doğruluk tahmini konularında bilgiler vererek
başlanmıştır. Bundan sonra, referans ve hedef koordinat sistemleri arasındaki
dönüşümü gerçekleştirmek için bu parametreler referans olarak kullanılacaktır.
Bir sonraki adım, bilinmeyen koordinatlar, sadece açılar olmadan bilinen noktalara
olan mesafeleri ölçerek hesaplamak için kullanılabilecek kenar ölçmeleriyle geriden
kestirme tekniğini tanıtmak biçiminde yapılandırılmıştır. Bu, açı ölçmesinin
yapılamadığı durumlarda, endüstriyel parçaların ölçülmesinde ve montajında çok
önemlidir. Endüstriyel ölçmeler sırasında bazı durumlarda ölçülen parçaların ya da
objelerin boyutları ya da görünürlükleri nedeniyle ölçülmesi mümkün olmayabilir, bu
durumda hassas lazer metreler kullanılarak koordinatları iyi bilinen noktalardan
yararlanarak çözüm üretmek mümkün olabilir. Bu aşmadan sonra, tezin ilerleyen
bölümünde koordinatları hesaplamak için, nispeten kolay bir görev olan ancak
endüstri uygulamaları için çok büyük önem arz eden noktaların işaretlenmesi konusu
tartışılmıştır. Çünkü çoğu durumda nokta koordinatlarının bir dizi çeviri ve açıyla
yorumlanması gerekebilir; yapay kolların kinematik hareketlerinin programlanması
buna bir örnek olarak düşünülebilir.
Black Cat yazılımı, bu tez için Python dilinde geliştirilen açık kaynaklı bir bilgisayar
programıdır, açık kaynak kodlu bir uygulama olduğundan, istenildiğinde metroloji ve
endüstriyel tesislerle ilgili diğer birçok sorunun çözümü için geliştirilebilir. Bu
yazılım aracılığıyla yapılan ölçmeler sahada yapılan diğer ölçmelerle
ilişkilendirilebilir. Black Cat yazılımının yapısı, bölüm 3.4.5'te verilmiştir. Bu bölüm
xxi
incelendiğinde endüstriyel ölçmenin dört temel problemini çözmek için oluşturulan 4
ana rutin bir arayüz ile birleştirilerek bu rutinlerin etkileşimli olarak kullanımı
sağlanmaya çalışılmıştır. Kara Kedi yazılımını kullanabilmek için, bilgisayarda
Python
3.6 veya daha üstü yüklü olmalı özellikle "numpy", "math", "mpl_toolkits.mplot3d",
"matplotlib.pyplot", " matplotlib", "pyQt5", "subprocess" kütüphaneleri kullanıma
hazır olmalıdır. Bu kütüphaneler Python yazılımının yüklenmesinden sonra CMD
Balck Cat yazılımı bir zip dosyası kullanılarak bilgisayara yüklenebilir ve doğrudan
kullanılabilir. Yazılmaya ilişkin kodalar tezde ayrıntılı olarak verilmiştir.
Kara Kedi, nesne noktalarını çizme ve bunları birbirine bağlama yeteneğine sahiptir,
aralarındaki topolojik ilişkileri tanımlayarak, bu ilişkilerle, kaynak nokta ile
bağlanacak hedef noktaları seçebilir, bu ilişkilerin CSV giriş dosyaları aracılığıyla
düzenlemesine olanak verir. Tezde detaylı olarak anlatıldığı gibi, nesne koordinatları
birincil ve hedef koordinat sistemlerine olarak ele alınmaktadır.
Tüm Black Cat sonuçları, doğruluk tahmini dosyaları ile birlikte CSV formatında
dosyalara kaydedilir. Doğruluklar ölçümlerin ve hesaplamaların kalitesini
xxii
değerlendirmek için önemlidir. Bu nedenle sonuçlar her zaman ölçme ve
değerlendirme sonrası kontrol edilmelidir.
xxiii
GİRİŞ
Bu farklı koordinat sistemleri, total station - lazer takip cihazları veya bilgisayar
kontrollü CMM makineleri gibi insanlar tarafından çalıştırılabilen farklı koordinat
ölçüm makineleri ile bağlantılı olarak kullanılır.
Problem Tanımı
1
1.1.2 Mesafeler aracılığıyla bilinmeyen nokta koordinatlarının hesaplanması
Uzay geri çekme tekniği, açılar olmadan sadece bilinen noktalara olan mesafeleri
ölçerek bilinmeyen koordinatları hesaplamak için kullanılır, bu endüstriyel parçaların
kurulumunda veya montajında çok önemlidir, çünkü açı ölçümü her zaman
yapılamaz ve hatta Total Station ve diğer mesafe ve açı ölçümlerine dayalı cihazlar
boyut veya görünürlük gibi birçok nedenden dolayı kullanılamaz, bu nedenle bu
durumlarda istenen noktayı iyi bilinen noktalar kümesine bağlamak için yüksek
hassasiyetli lazer metre kullanmak koordinatları hesaplamak için yeterlidir.
Çalışmanın Amacı
2
KOORDINAT SISTEMLERI
Koordinat basitçe bir nokta, üç boyutlu uzayda sabit belirlenmiş bir konum olarak
tanımlanabilir. Karmaşık bir şeklin parametrelerini belirlemek için kullanılan bir dizi
nokta.
Koordinat ölçüm cihazı (CMM), bir nesneyi kabul edilebilir bir doğruluk ve
tekrarlanabilirlik seviyesiyle belirlemek için bir dizi nokta toplamak için kullanılan
bir cihazdır.
- Fotogrametrik sistemler .
Bu koordinat makine sistemleri sadece total istasyonlar, lazer takip cihazları ve lazer
tarayıcılardan ibaret olmayıp, geniş bir teknik çözüm ailesine sahiptir.
Şekil 2.1'de söz konusu koordinat ölçüm sistemleri gösterilmektedir. Bu şekil, çeşitli
uygulama alanları için teknik çözümleri göstermekte ve bu sistemlerin çoklu sensör
karakteri olan ortak özelliklerinin yanı sıra ölçülen nesnelerin farklı boyutlarını
göstermektedir (Sladek, 2016).
3
Koordinat ölçüm sistemleri (Sladek, 2016).
Datum
4
Makine Koordinat Sistemleri (MCS)
MCS, Ana Konuma göre CMM üzerindeki XYZ konumudur. MCS'nin eksenleri
CMM'in hareketine karşılıklı olarak paraleldir. Çoğu manuel tanımlı CMM'in bir ana
konumu yoktur, bu nedenle ana konumları CMM'in sistemin başlangıç noktasındaki
konumudur. Bazı manuel CMM'ler, operatörün CMM'i her seferinde bir eksen
boyunca referans işaretleri üzerinde manuel olarak hareket ettirmesini gerektiren bir
ana konum sunar. Bilgisayar Kontrollü Koordinat Ölçüm Makineleri DCC sistemi
kullanıldığında, başlatma prosedürü CMM'i "Home" etmenizi gerektirir, bu da ana
konumu atamanıza ve tekrarlanabilir bir XYZ sıfır noktası oluşturmanıza yol açar.
Bu nedenle MCS koordinat sistemleri, denetlenmesi gereken endüstriyel parça için
iyi ve doğru ölçüm değerleri elde etmek için uygun bir koordinat sistemi değildir
(Koordinat Sistemlerine Giriş, 2018).
Bu makine parçasını bir koordinat ölçüm makinesi CMM üzerinde ölçebilmek için
her tarafta problarla bir temas gereklidir. Planlama aşamasında, parçanın 3B
koordinat sistemini incelemek yararlı olacaktır. bu, olası bir yönden perspektif bir
çizim yaparak ve ardından 3B PCS'yi üst üste bindirerek yapılacaktır. Aşağıda, 3D
boyutlu PCS için olası bir görünüm olan Şekil 2.4 yer almaktadır (Koordinat
Sistemlerine Giriş, 2018).
5
Çok projeksiyonlu 2D çizim (Koordinat Sistemlerine Giriş,
2018).
6
Parça Koordinat Sistemi Vs Makine Koordinat Sistemi
7
Fikstür Koordinat Sistemi FCS
Bir FCS koordinat sistemi, parça denetim programları sırasında daha sonra yeniden
kullanılmak üzere güvenli bir şekilde kaydedilen ölçülen koordinat sistemi olarak
tanımlanır. Bir Fikstür Koordinat Sisteminin kullanılması, denetimlerin gerçekleştiği
Koordinat Ölçüm Makinelerinde tekrarlanabilir bir konum sağlar (Koordinat
Sistemlerine Giriş, 2018).
8
KOORDINAT DÖNÜŞÜMÜ
𝑋𝑗 𝛿x 𝑋𝑗
[𝑌𝑗 ] = [𝛿𝑦] + 𝑆𝑅(𝜃𝑥 , 𝜃𝑦 , 𝜃𝑧 ) [𝑌𝑗 ] , 1≤ j ≤ n
𝑗
𝑍𝑎 𝛿𝑧 𝑍𝑗
(3.1)
9
𝑅 = 𝑅(𝜃𝑋). 𝑅(𝜃𝑌). 𝑅(𝜃𝑍)
𝑐𝑜𝑠 𝜃𝑍 𝑠𝑖𝑛 𝜃𝑍 0 𝑐𝑜𝑠 𝜃𝑌 0 - 𝑠𝑖𝑛𝜃𝑌 1 0 0
= [- 𝑠𝑖𝑛 𝜃𝑍 𝑐𝑜𝑠 𝜃𝑍 0] [ 0 1 0 ] [0 𝑐𝑜𝑠 𝜃𝑋 𝑠𝑖𝑛 𝜃
0 0 1 𝑠𝑖𝑛 𝜃𝑌 0 𝑐𝑜𝑠 𝜃𝑌 ]𝑋
0 - 𝑠𝑖𝑛 𝜃𝑋 𝑐𝑜𝑠 𝜃𝑋
𝑐𝑜𝑠 𝜃𝑌 𝑐𝑜𝑠 𝜃𝑍 𝑐𝑜𝑠 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑍 + 𝑠𝑖𝑛 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑌 𝑐𝑜𝑠 𝜃𝑍 𝑠𝑖𝑛 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑍 - 𝑐𝑜𝑠 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑌 𝑐𝑜𝑠 𝜃𝑍
= [- 𝑐𝑜𝑠 𝜃𝑌 𝑠𝑖𝑛 𝜃 𝑍 𝑐𝑜𝑠 𝜃𝑋 𝑐𝑜𝑠 𝜃 𝑍 - 𝑠𝑖𝑛 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑌 𝑠𝑖𝑛 𝜃 𝑠𝑖𝑛 𝜃𝑍 𝑋 𝑐𝑜𝑠 𝜃𝑍 + 𝑐𝑜𝑠 𝜃 𝑠𝑖𝑛 𝜃𝑋𝑌 𝑠𝑖𝑛
𝜃 ]𝑍
𝑠𝑖𝑛 𝜃𝑌 - 𝑠𝑖𝑛 𝜃𝑋 𝑐𝑜𝑠 𝜃𝑌 𝑐𝑜𝑠 𝜃𝑋 𝑐𝑜𝑠 𝜃𝑌
(3.2)
𝑎 𝑋= 𝛿𝑋 + 𝑆𝑅𝑋𝑏
(3.3)
(3.4)
𝜃 = 𝜃𝑥0 + 𝛿𝜃𝑥
𝑥
(3.5)
(3.6)
𝑥 𝑦 𝑧
𝛿𝜃𝑥 𝑥 𝛿𝜃𝑦 𝑦 𝛿𝜃𝑧 𝑧
10
= 𝑟0𝑖𝑗 + 𝑒𝑖𝑗 𝛿𝜃𝑥 + 𝑓 𝛿𝜃𝑖𝑗𝑦 + 𝑔 𝛿𝜃𝑖𝑗𝑧
𝑟0 𝑟0 𝑟0
12 22 23
Ve 𝑗𝑖𝑗 =
𝛿𝑟𝑖𝑗
= [-𝑟 -𝑟0 0
-𝑟0 ]
𝛿𝜃𝑧 11 12 13
0 0 0
Eşitlik 6 doğrusal form olarak
yazılabilir:
Tek bir ölçek faktörü için, doğrusallaştırılmış ölçek matrisi olan S'yi aşağıdaki gibi
yazabiliriz S = S0 +δs
(3.8)
Burada S0 1 değeri ile başlatılır ve δs düzeltmedir (Islam, 2007; Andrei, 2006; Fan,
2005). δs genellikle milyonda parça (ppm) olarak yazılır. Ancak bunu milyarda parça
olarak da yazabiliriz (Altamimi ve diğerleri, 2011).
Denklem (3.1), tek ölçek faktörü durumunda 3.3'e 3.7 ve 3.8 eklenerek aşağıdaki gibi
doğrusallaştırılabilir (Islam, 2007)
(3.9)
11
≈ 𝛿𝑋 + (𝑅0 𝑆0 + 𝑅 𝛿0𝑠 + 𝐸𝛿𝜃𝑥 𝑆0 + 𝐹𝛿𝜃 𝑆𝑦0 + 𝐺𝛿𝜃 𝑆𝑧0
3.9 şu şekilde
basitleştirilebilir
Lj (γ×γ) = [l1; l2; l3] = Aj (γ*7) δX(7×γ)
Lj (γ×γ) = Xa - R0 S0 Xb
(3.10)
1𝑙 = 𝑋𝑎 - 𝑆0 (𝑟0 𝑋𝑏 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍 )𝑏
𝑗 11 𝑗 12 13 𝑗
2𝑙 = 𝑌 - 𝑆 (𝑟 𝑋 + 𝑟 𝑌 + 𝑟 𝑍 )
𝑎 0 0 𝑏 0 𝑏 0 𝑏
𝑗 21 𝑗 22 23 𝑗
3𝑙 = 𝑍 - 𝑆 (𝑟 𝑋 + 𝑟 𝑌 + 𝑟 𝑍 )
𝑎 0 0 𝑏 0 𝑏 0 𝑏
𝑗 31 𝑗 32 33 𝑗
𝑎14 = 𝑟0 𝑋𝑏 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍𝑏
11 𝑗 12 13 𝑗
𝑎24 = 𝑟0 𝑋𝑏 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍𝑏
21 𝑗 22 23 𝑗
𝑎34 = 𝑟0 𝑋𝑏 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍𝑏
31 𝑗 32 33 𝑗
𝑎15 = 𝑆0 (-𝑟0 𝑌𝑏 + 𝑟0 𝑍 )𝑏
13 𝑗 12 𝑗
𝑎25 = 𝑆0 (-𝑟0 𝑌𝑏 + 𝑟0 𝑍 )𝑏
23 𝑗 22 𝑗
𝑎 = -𝑆 𝑐𝑜𝑠𝜃 (𝑠𝑖𝑛𝜃 𝑋 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍 )𝑗
0 0 0 𝑏
16 𝑍 𝑋 32 33 𝑏
𝑎 = 𝑆 𝑠𝑖𝑛𝜃 (𝑠𝑖𝑛𝜃 𝑋 + 𝑟 𝑌 + 𝑟0 𝑍𝑗
0 0 0 𝑏 0 𝑏
26 𝑍 𝑌 32 33 𝑏
𝑎36 = 𝑆 (𝑐𝑜𝑠𝜃 𝑋 + 𝑠𝑖𝑛𝜃 𝑠𝑖𝑛𝜃 𝑌 - 𝑐𝑜𝑠𝜃0 𝑐𝑜𝑠𝜃0 𝑍𝑗
0 0 𝑏 0 0 𝑏
𝑦𝑗 𝑋 𝑌 𝑋 𝑌 𝑏
𝑎 = 𝑆 (𝑟 𝑋 + 𝑟 𝑌 + 𝑟 𝑍 )
0 0 𝑏 0 𝑏 0 𝑗
17 21 22 23 𝑏
𝑎 = - 𝑆 (𝑟 𝑋 + 𝑟 𝑌 + 𝑟0 𝑍 )𝑗
0 0 𝑏 0 𝑏
27 11 12 13 𝑏
𝑎37 = 0
12
3.1.4 Dönüşüm parametrelerinin tahmin edilmesi
Daha önce 3.9 veya 3.10'dan hesaplanan dönüşüm parametreleri hatasız değildir,
ancak en küçük kareler tahmini uygulanarak düzeltilebilirler (Islam, 2007; Fan,
2005)
(3.11)
𝛿 , 𝛿𝑦 , 𝛿𝑧 = 𝛿𝑋̂( 1,2,3)
𝑥
𝑆̂ = 𝑆0 + 𝛿𝑆̂ = 𝛿𝑋̂( 4)
𝜃̂𝑥
= 𝜃0𝑥 +𝛿
𝜃 𝑥 = 𝛿𝑋̂( 5)
𝜃̂𝑦
= 𝜃0𝑦 +𝛿
𝜃 𝑦 = 𝛿𝑋̂( 6)
𝜃̂𝑧 = 𝜃 +𝛿
0
𝜃 = 𝛿𝑋̂( 7)
𝑧 𝑧
(3.12)
𝜺 = 𝑳 - 𝑨𝜹𝑿̂
13
Helmert Dönüşümü - Parametrelerin Hesaplanması Kara Kedi Kodu
Black Cat, bu tez için gerekli görevleri yerine getirmek için geliştirilmiş bir
bilgisayar uygulamasıdır, Bu bölümde, dönüşüm parametrelerini doğruluk
tahminleriyle birlikte hesaplamak için hazırlanan kodu tanıtacağız, bu kod python
dilinde yazılmış ve Black Cat uygulamasında kullanılmıştır.
1. import numpy as np
2. matematiği içe aktarın
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7. veri = np.loadtxt('helmert.csv', delimiter=',', skiprows=1, usecols=(0, 1, 2,
3, 4, 5, 6))
8. VERİ = np.array(veri)
9. say = (np.size(DATA, 0)) * 3 # nokta sayısı * 3 for x,y,z
10.
11. p = 206265 # radyandan yay saniyesine
12. s1 = 1
13. A1 = 0
14. A2 = 0
15. A3 = 0
16.
17. c1 = np.eye(count, count)
18. c = np.linalg.inv(c1)
19. del_S = 1
20. del_A1 = 1
21. del_A2 = 1
22. del_A3 = 1
23.
14
Helmert Dönüşümü - Koordinat Hesaplama Kodu
1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6. p = 206265
7.
8. veri = np.loadtxt('using helmert.csv', delimiter=',', usecols=(1,2,3),skipr
ows=1)
9. id = np.loadtxt('using helmert.csv', delimiter=',', usecols=(0),skiprows=1)
15
Helmert Dönüşümü - Örnek Üzerinden Kodun Test Edilmesi
16
3.4.1 Black Cat kullanarak Helmert parametrelerini hesaplama
Öncelikle BAsys1 & BAsys2 koordinatlarını csv virgülle ayrılmış şekil dosyasında hazırlayacağız, dosya şu şekilde görünüyor:
Nokta Kimliği X(sistem1) Y(sistem1) Z(sistem1) X(sistem2) Y(sistem2) Z(sistem2) Topolojik İlişki 1 Topolojik İlişki 2
1 82.6178 12.6907 132.3142 97.151 156.953 129.518 2 5
2 84.812 12.6907 141.4928 102.168 155.818 137.368 3 6
3 84.812 38.9911 141.4928 111.139 180.45 135.365 4 7
4 82.6178 38.9911 132.3142 105.946 181.59 127.393 1 8
5 57.4595 12.6907 138.3284 77.256 165.381 143.795 6 5
6 59.6537 12.6907 147.507 82.368 164.193 151.676 7 6
7 59.6537 38.9911 147.507 91.234 188.877 149.593 8 7
8 57.4595 38.9911 138.3284 86.009 190.018 141.714 5 8
Son 2 sütundaki topolojik ilişkiler, ID noktası ile istenen noktalar arasında çizgiler çizmek için kullanılır (yeni çizgiler eklenirse kod
otomatik olarak yeni topolojik ilişkileri tanır).
Bu dosya Kara Kedi dosyalarıyla aynı dizinde "helmert" adı altında kaydedilmelidir.
17
3.4.2 Black Cat kullanarak Helmert parametrelerini hesaplama
CSV dosyasını doğru bir şekilde hazırladığımızdan emin olduktan sonra, Black Cat
uygulamasında "Parametreleri hesapla düğmesine" basmamız yeterlidir ve
program nesneleri koordinat sistemi1 ve koordinat sistemi2'ye göre otomatik olarak
çizecektir.
18
Bunun yanında aynı dizinde otomatik olarak oluşturulan 2 dosyamız olacak, bu
dosyalar "parameters" ve "Helmert Parameters Variance_Covariance" bu
dosyalar şöyle görünecek:
19
3.4.3 Yeni koordinatları hesaplamak için Helmert parametrelerini kullanma
Bunu yapmak için bir önceki adımda otomatik olarak oluşturulan parametreler
dosyasına ihtiyacımız var, bunun yanında "Helmert Kullanımı" adlı bir dosya
oluşturmamız gerekiyor, bu dosyanın içeriği aşağıdaki gibi düzenlenmelidir:
20
Ve sonuç "after helmert" dosyası Black Cat dizininde otomatik olarak oluşturulacaktır;
dosyanın içeriği aşağıdaki gibi görünecektir:
Bu dosya, gerekli BBsys2 koordinatlarımızı içeren CSV virgülle ayrılmış bir dosyadır.
21
MESAFEYE DAYALI REZEKSIYON (ALAN RETRAKSIYONU)
Giriş
22
Üç kürenin kesişiminden 2 nokta elde edeceğiz. Çünkü iki kürenin kesişimi bir
çemberdir. Ancak bu kesişim çemberi ile üçüncü küre bize 2 nokta verecektir.
Dolayısıyla, iki çözüm olacaktır, nokta tahmini için seçilecek yaklaşık koordinat,
mevcut iki çözüm arasında doğru çözümü belirleyecektir. Bu yüzden doğru yaklaşık
koordinatların seçilmesi önemlidir. Yaklaşık koordinatlar uygun yakınlıkta
belirlenmezse, iteratif çözüm yakınsamama olasılığını doğurur (Bktas, yildirim,
karaahmetoglu, uyar,2018).
Matematiksel Model
Problemi çözmek için, her bir ölçü için yazılacak olan iki nokta arasındaki eğim
uzunluğu denklemine ihtiyacımız var (Bektas vd., 2018).
(4,1)
(4,2)
)/𝑑𝑐
(4,3)
23
Olarak yazılabilir:
AX = b
(4,4)
X = A-1 b
(4,5)
xp= xo + Δx yo + Δy zo
(4,6)
x0 = xp , y0 = yp , z0 = zp
(4,7)
AT Ax = AT b
(4,8)
X = (AT A)-1 AT b
(4,9)
24
Mesafe Tabanlı Rezeksiyon - Python Kodu
Şimdi uzay geri çekilmesi için kullanılan Black Cat python betiği incelenecek, kod
4.2'deki matematiksel modellere bağlı olarak oluşturulacak ve sonuçlar csv
dosyalarına kaydedilecektir.
1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7. distance = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1, us
ecols=(1))
8. MESAFE = np.array(mesafe)
9. koordinatlar = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1,
usecols=(2, 3, 4))
10. KOORDİNATLAR =
np.array(koordinatlar) 11.
12. with open("space retraction.csv", "rb") as f: # rb : ikili modda okumak ve
belirli bir ham dosyadan okumak için
13. from itertools import islice
14.
15. XYZ0 = np.genfromtxt(islice(f, 1, 2), delimiter=",", usecols=(5, 6, 7))
25
Mesafeye Dayalı Rezeksiyon - Örnek Üzerinden Kodun Test Edilmesi
Koordinatları bilinen 5 noktadan oluşan bir grubumuz var, bilinen noktalar ile CC
arasındaki mesafelere bağlı olarak Black Cat programını kullanarak CC noktasının
koordinatlarını hesaplamak istiyoruz, bunu yapmak için giriş dosyamızı
düzenlemeliyiz, bu dosya CSV virgülle ayrılmış olmalı ve veriler aşağıdaki gibi
olmalıdır
No nokta numarası, D bilinen nokta ile istenen (CC) nokta arasındaki mesafe, X Y Z
bilinen noktaların koordinatları, X0 Y0 Z0 bilinmeyen noktanın yaklaşık
koordinatlarıdır, bunu navigasyonel GPS kullanarak veya bilinen noktalar arasındaki
göreceli konumu ile hesaplayabiliriz. Yaklaşık koordinatların doğru sonuçlar elde
etmek için önemli olduğu unutulmamalıdır, bu nedenle sadece rastgele sayılar
olmamalı, gerçek nokta konumuna nispeten yakın olacak şekilde hesaplanmalıdır.
Dosyanın adı "space retraction" olmalı ve "Black Cat" klasörünün aynı dizinine
kaydedilmelidir. Giriş dosyası hazır olduğunda, hesaplamaları yapmak için Black Cat
uygulamasında sadece "distances-based resection" tuşuna basmak yeterlidir.
26
Şekil 4.2 : Kara Kedi arayüzü / mesafelere dayalı rezeksiyon
27
Ve 2 dosya "rezeksiyon sonucu" ve "rezeksiyon Varyans Kovaryansı" otomatik
olarak oluşturulacaktır, bu dosyalar koordinatlara ve istenen CC noktamıza doğruluk
tahminine sahiptir.
28
ÇIKIŞ NOKTALARI POZISYONLARI
Verilen: A, B ve P
δAB, δAP, tAP
α = δAB - δAP
29
Kutupsal Koordinatlardan Yola Çıkma - Python Kodu
Sırada, belirli bir istasyon noktasına (X0, Y0, Z0) göre verilen herhangi bir nokta
listesi için ayar öğelerini listelemek için Black Cat kodu var, kod azimut, yatay
mesafe, eğim mesafesi ve dikey açı değerlerini listeleyen CSV dosyasını
döndürecektir.
1. import numpy as np
2. matematiği içe aktarın
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7.
8.
9. sınıf gözetimi :
10. def init (self):
11. geçmek
12.
13.
14. def hesaplamalar(self , x1, y1, z1, x2, y2, z2):
15. # x1 = float(input('x1'))
16. # y1 = float(input('y1'))
17. # z1 = float(input('z1'))
18. # x2 = float(input('x2'))
19. # y2 = float(input('y2'))
20. # z2 = float(input('z2'))
21.
22. dx = x2 - x1
23. dy = y2 - y1
24. dz = z2 - z1
25.
26. dx == 0 ve dy == 0 ise:
27. azimut = 0
28. elif dx < 0.0 ve dy >= 0 . 0:
29. azimut = 450 - math.atan2(dy, dx) * 180 / math.pi
30. başka:
31. azimut = 90 - math.atan2(dy, dx) * 180 / math.pi
32. D3d = math.sqrt((x2 - x1) ** 2 + ( y2 - y1) ** 2 + (z2 - z1) ** 2)
33. D2d = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
34. VA = math.atan(dz / D2d) * 180 / math.pi
35.
36.
37. dönüş azimut,D2d,D3d,VA
38.
39.
40. stakeoutpoints = np.loadtxt('stakeoutpoints.csv', delimiter= ',' , skiprows
=1 , usecols=(1,2,3))
41.
42.
43. STAKEOUTPOINTS = np.array(stakeoutpoints)
44.
45.
46. with open("stakeoutpoints.csv", "rb") as f: # rb : ikili olarak oku
modundan ve belirli ham verilerden okumak için
47. from itertools import islice
48. XYZ0 = np.genfromtxt(islice(f, 1, 2), delimiter=",", usecols=(4,5,6))
49. XYZ0 = n p .transpose(XYZ0) #+ np.array([20 , -3 , 10])
50.
30
Kutupsal Koordinatlardan Yola Çıkma - Kara Kedi Örneği
Tablo 5.1, Black Cat kurulum giriş dosyasının içeriğidir, x0,y0,z0 istasyon noktası
koordinatlarıdır, x,y,z ise hedef noktaların alanlarıdır (onları ayarlamamız gereken
noktalar), bu dosya "stakeoutpoints" adı altında virgülle ayrılmış CSV olarak
kaydedilmelidir.
Dosyayı hazırladıktan sonra Kara Kedi ile aynı dizine kaydetmemiz gerekir, son
adım Kara Kedi uygulamasını açmak ve "noktaları belirle" düğmesine basmaktır ve
uygulamadan "Sonuçlar 'Stakeoutresult.csv' dosyasına kaydedildi" şeklinde kısa bir
mesaj alacağız.
31
Şekil 5.2 : Kara Kedi komutayı ele geçiriyor
32
KARA KEDİ UYGULAMASI
Black Cat uygulaması, bu tezin amacı için Python dilinde geliştirilmiş açık kaynaklı
bir programdır, açık kaynaklı bir uygulama olduğu için metroloji ve endüstriyel
tesislerle ilgili diğer birçok sorunu çözmek için geliştirilebilir, gelecek vaat eden
alanlardan biri, boyama gibi görevleri gerçekleştirmek için ölçüm cihazlarından gelen
jeomatik verileri sahadaki yapay kollarla birleştirmektir.
, kaynak, vb. Programın yapısı, bu tezin 3,4,5. bölümlerinde tartışılan matematiksel
problemleri çözmek için 4 farklı komut dosyası ve arayüz için bir ekstra komut
dosyasıdır, bu programı kullanabilmek için bilgisayara python 3 yüklenmelidir.6
veya daha yüksek bir sürümünün yüklenmiş olması ve aşağıdaki python
kütüphanelerinin CMD penceresinden (windows komut istemi) (pip install komutu)
kullanılarak yüklenmesi gerekmektedir: (numpy, math, mpl_toolkits.mplot3d,
matplotlib.pyplot, matplotlib, pyQt5, subprocess).
Aşağıda yer alacak olan "mainwindow" betiği hariç tüm program betikleri daha önce
tartışılmıştı, arayüzü oluşturmak için pyQt5 ve QT designer kullanıldı, kod aşağıdaki
gibidir:
33
13.
14. class Ui_MainWindow(object):
15. def setupUi(self, MainWindow):
16. MainWindow.setObjectName("MainWindow")
Kara Kedi dosyası 5 (.py) betik dosyasından oluşur 4 tanesi gizli dosyalardır isimleri
("helmert", "using helmert" , "space retraction" , "stakeOut" ) ve ön dosya adı
"mainwindow", bu uygulamayı açmak için kullanılan dosyadır, bunun yanında 4 giriş
CSV dosyası vardır ("helmert", "using helmert", "space retraction", "stakeoutpoints" )
. Kullanıcı verileri daha önce tartışıldığı gibi bu dosyaların içinde düzenlenmelidir
(tüm dosyaların veri sütunlarını göstermek için başlıkları vardır ve kullanıcıya girdi
dosyalarının düzenlenmesi hakkında bir fikir vermek için her dosyanın içinde sayısal
varsayılan değerler vardır), kullanıcı gerektiğinde satırları (nokta numaraları)
ekleyebilir, çünkü program bunları otomatik olarak tanıyacak ve hesaplamaları buna
göre uyduracaktır, sonuç dosyaları CSV dosyaları ile aynı klasör içinde aşağıdaki
adlar altında otomatik olarak oluşturulur ("parameters", "Helmert Parameters
Variance_Covariance", " after helmert", "after helmert", "Resection result" ,
"Resection Variance Covariance", "Stakeoutresult")
34
SONUÇ
Bunun yanı sıra, Kara Kedi programı açık kaynak kodlu ve kullanımı kolay bir dilde
(Python Dili) geliştirilmiştir ve ayrı betikler olarak yazılmıştır, bu nedenle
gerektiğinde bu betikleri başka herhangi bir yazılıma bağlamak kolay olmalıdır.
35
REFERANSLAR
Al Marzooqi, Y., Fashir, H. ve Ahmed, S.I. (2005). Dubai Emirliği için Datum
Dönüşüm Parametrelerinin Türetilmesi. Firavunlardan
Jeoinformatiğe, FIG Çalışma Haftası 2005 ve GSDI-8,
1-17.
Fan, H. (2005). Teorik Jeodezi. Jeodezi Bölümü, Rapor no. 2016, KTH, Stockholm,
İsveç.
36
EKLER
37
EK A: Helmert dönüşüm parametrelerini hesaplamak için python betiği
1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7. veri = np.loadtxt('helmert.csv', delimiter=',', skiprows=1, usecols=(0, 1,
2, 3, 4, 5, 6))
8. VERİ = np.array(veri)
9. count = (np.size(DATA, 0)) * 3 # nokta sayısı * 3 for x,y,z 10.
11. p = 206265 # radyandan yay saniyesine
12. s1 = 1
13. A1 = 0
14. A2 = 0
15. A3 = 0
16.
17. c1 = np.eye(count, count)
18. c = np.linalg.inv(c1)
19. del_S = 1
20. del_A1 = 1
21. del_A2 = 1
22. del_A3 = 1
23.
24. while (np.abs(del_S) > 10 ** -20 ve np.abs(del_A1) > 10 ** -
20 ve np.abs(del_A2) > 10 ** -20 ve np.abs(
25. del_A3) > 10 ** -20):
26.
27. R = np.array([[np.cos(A2) * n p . c o s ( A3), n p . c o s ( A1) * np.sin(A3) +
np.si n(A1) * np.sin(A2) * n p . c o s ( A3),
28. np.sin(A1) * np.sin(A3) - np.cos(A1) * np.sin(A2) *
n p . c os(A3)],
29. [-
np.cos(A2) * np.sin(A3), np.cos(A1) * np.cos(A3) - np.sin(A1) * np.sin(A2)
* np.sin(A3),
30. np.sin(A1) * np.cos(A3) + np.cos(A1) * np.sin(A2) * np.s
in(A3)],
31. [np.sin(A2), -
np.sin(A1) * n p . c o s ( A2), n p . c o s ( A1) * n p . c o s ( A2)])
32. r00o = R[0, 0]
33. r01o = R[0, 1]
34. r02o = R[0, 2]
35. r10o = R[1, 0]
36. r11o = R[1, 1]
37. r12o = R[1, 2]
38. r20o = R[2, 0]
39. r21o = R[2, 1]
40. r22o = R[2, 2]
41. for i in range(0, np.size(DATA, 0)):
42. a03 = (r00o * V E R İ [ i, 1] + r01o * VERİ[i, 2] + r02o * VERİ[i, 3 ])
43. a13 = (r10o * V E R İ [ i, 1] + r11o * VERİ[i, 2] + r12o * VERİ[i, 3 ])
44. a23 = (r20o * V E R İ [ i, 1] + r21o * VERİ[i, 2] + r22o * VERİ[i, 3 ])
45. a04 = (s1 * (-r02o * VERİ[i, 2] + r01o * VERİ[i, 3]))
46. a14 = (s1 * (-r12o * VERİ[i, 2] + r11o * VERİ[i, 3]))
47. a24 = (s1 * (-r22o * VERİ[i, 2] + r21o * VERİ[i, 3]))
48. a05 = -
s1 * np.cos(A3) * (np.sin(A2) * DATA[i, 1] + r21o * DATA[i, 2] + r22o * DAT
A[i, 3])
49. a15 = s1 * n p .sin(A3) * (np.sin(A2) * V E R İ [ i, 1] + r21o * VERİ[i, 2
] + r22o * VERİ[i, 3])
50. a25 = s1 * (np.cos(A2) * VERİ[i, 1] + np.sin(A1) * np.sin(A2) * DAT
A[i, 2] - n p . c os(A1) * n p . s i n ( A 2) * VERİ[
51. i, 3])
38
52. a06 = (s1 * ( r10o * V E R İ [ i, 1] + r11o * V E R İ [ i , 2] + r12o * V E R İ [ i,
3]))
53. a16 = (-
s1 * (r00o * VERİ[i, 1] + r01o * VERİ[i, 2] + r02o * VERİ[i, 3]))
54. a26 = 0
55. Ai = np.array([[1, 0, 0, a03, a04, a05, a06], [0, 1, 0, a13, a14, a
15, a16], [0, 0, 1, a23, a24, a25, a26]])
56.
57. eğer i == 0 ise:
58. A = Ai
59. başka:
60. A = np.concatenate((A, Ai), axis=0)
61.
62. L1 = V E R İ [ i, 4] - s1 * (r00o * VERİ[i, 1] + r01o * V E R İ [ i , 2] + r02
o * VERİ[i, 3])
63. L2 = V E R İ [ i, 5] - s1 * (r10o * VERİ[i, 1] + r11o * V E R İ [ i , 2] + r12
o * VERİ[i, 3])
64. L3 = V E R İ [ i, 6] - s1 * (r20o * VERİ[i, 1] + r21o * V E R İ [ i , 2] + r22
o * VERİ[i, 3])
65. Li = np.array([L1, L2, L3])
66.
67. eğer i == 0 ise:
68. L = Li
69. başka:
70. L = np.concatenate((L, Li), axis=0)
71.
72. del_XX3 = np.dot(c, A)
73. del_XX4 = np.dot(np.transpose(A), del_XX3)
74. del_XX = np.linalg.inv(del_XX4)
75. del_XX1 = np.dot(c, L)
76. del_XX2 = np.dot(np.transpose(A), del_XX1)
77. del_X = np.dot(del_XX, del_XX2)
78. # del_X = np.dot(del_XX,np.dot(np.transpose(A),np.dot(c,L))
79. del_S = del_X[3]
80. del_A1 = del_X[4]
81. del_A2 = del_X[5]
82. del_A3 = del_X[6]
83.
84. S1 = s1 + del_S
85. A1 = A1 + del_A1
86. A2 = A2 + del_A2
87. A3 = A3 + del_A3
88.
89. dx = del_X[0]
90. dy = del_X[1]
91. dz = del_X[2]
92. S1 = (S1 - 1) * 1000000
93. '''''
94. A1 = A1*p # radyandan yay saniyesine dönüştürme
95. A2 = A2*p
96. A3 = A3*p
97. '''
98. # doğrulama tahmini
99. ep_cap = L - A.dot(del_X)
100. CO_v1 = np.dot(c, ep_cap)
101. CO_v = np.dot(np.transpose(ep_cap), CO_v1) / (count - 7)
102. CXX = CO_v * (del_XX)
103. CX = [CXX[0, 0], CXX[1, 1], CXX[2, 2], CXX[3, 3], CXX[4, 4], CXX[5,
5], CXX[6, 6]]
104. CX = np.sqrt(CX) # varyans kovaryans matrisi
105.
106. print("A1= ", A1 * p, " \n", " A2= ", A2 * p, " \n", " A3= ", A3 * p, " \
n", "S1= ", S1)
107. print("dx= ", dx, " \n", 'dy= ', dy, "\n", 'dz= ', dz)
108. print(CX)
109.
39
110. print("m,m,m,ppm,arsec,arsec,arsec")
111.
112. parametreler = [dx, dy, dz, S1, A1, A2, A3]
113. np.savetxt('parameters.csv', np.column_stack(parameters), fmt='%10.2
0f', delimiter=',', header="dx(m), dy(m), dz(m), S1(Scale = 1+ S1*10^-
6), A1(rad), A2(rad), A3(rad)")
114.
115. METİN = ["m", " m " , " m " , " p pm", " a rsec", "arsec", " a rsec"]
116. np.savetxt('Helmert Parametreleri Varyans_Kovaryans.csv', np.column_s
tack(CX), fmt='%10.20f',
117. header="m,m,m,ppm,arsec,arsec,arsec", delimiter=',')
118. # print(CO_v)
119.
120. # print(VERİ[2,1])
121. # print (S1)
122.
123.
124. # Çizim kodu
125. style.use('ggplot')
126. fig = plt.figure()
127. ax1 = fig.add_subplot(111, projection='3d')
128.
129. TDATA = DATA.transpose()
130.
131. ax1.scatter(TDATA[1], T D A T A [ 2], T D A T A [ 3], c='g', marker='X')
132. ax1.scatter(TDATA[4], T D A T A [ 5], T D A T A [ 6], c='r', marker='o')
133. ax1.set_xlabel('x ekseni')
134. ax1.set_ylabel('y ekseni')
135. ax1.set_zlabel('z ekseni')
136.
137. x1 = TDATA[1]
138. x2 = TDATA[2]
139. x3 = TDATA[3]
140.
141. # Numaralandırma
142.
143. n = np.loadtxt('helmert.csv', delimiter=',', usecols=(0),skiprows=1)
144. N = np.array(n)
145.
146. for i, txt in enumerate(n):
147. ax1.text(TDATA[1, i], TDATA[2, i ], TDATA[3, i], '%s' % (str(txt)
), size=8, zorder=1, color='k')
148. ax1.text(TDATA[4, i], TDATA[5, i ], TDATA[6, i], '%s' % (str(txt)
), size=8, zorder=1, color='k')
149. print(i, txt)
150.
151. # ax1.xticks(x, my_xticks)
152. # plt.xticks(np.arange(TDATA[[0,3],:].min(),TDATA[[0,3],:].max(), 50
))
153. # ax1.yticks(np.arange(TDATA[0].min(), TDATA[0].max(), 0 . 5))
154.
155.
156. # print (n)
157. # print (x1)
158.
159.
160. # Çizgiler çizin
161.
162.
163. from matplotlib.patches import FancyArrowPatch
164. from mpl_toolkits.mplot3d import proj3d
165.
166.
167. class Arrow3D(FancyArrowPatch):
168. def init (self, xs, ys, zs, *args, **kwargs):
40
169. FancyArrowPatch. init (self, (0, 0 ), (0, 0), *args, **kwar
gs)
170. self._verts3d = xs, ys, zs
171.
172. def draw(self, renderer):
173. xs3d, ys3d, zs3d = self._verts3d
174. xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, rendere
r.M)
175. self.set_positions((xs[0], ys[0]), (xs[1], ys[1]))
176. FancyArrowPatch.draw(self, renderer)
177.
178.
179. from mpl_toolkits.mplot3d import Axes3D
180. import matplotlib.pyplot as plt
181.
182. line_Topology = np.loadtxt('helmert.csv', delimiter=',',skiprows=1)
41
42
EK B: Helmert parametrelerini kullanmak için python betiği
1. import numpy as np
2. matematiği içe aktarın
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6. p = 206265
7.
8. veri = np.loadtxt('using helmert.csv', delimiter=',', usecols=(1,2,3),skipr
ows=1)
9. id = np.loadtxt('using helmert.csv', delimiter=',', usecols=(0),skiprows=1)
44
113. for i, txt in enumerate(N-1):
114.
115.
116.
117. a= Arrow3D([TDATA[0,i],TDATA[0,int(txt)], [TDATA[1,i], TDAT
A[1,int(txt)]], [TDATA[2,i], TDATA[2,int(txt)]], mutation_scale=1, lw=1, ar
rowstyle="-|>", color="k")
118. b= Arrow3D([TXYZi[0, i], T X Y Z i [ 0, int(txt)]], [TXYZi[1, i],
TXYZi[1, int(txt)]], [TXYZi[2, i], T X Y Z i [ 2, int(txt)]], mutation_scale=1, l
w=1, arrowstyle="-|>", color="k")
119. ax1.add_artist(a)
120. ax1.add_artist(b)
121.
122.
123. #ax = fig.gca(projection='3d')
124. #ax.set_aspect("equal")
125.
126. # a = Arrow3D([0,1],[0,1],[0,1], mutation_scale=1, lw=1, arro
wstyle="-|>", color="k")
127.
128.
129.
130.
131.
132.
133.
134. plt.show()
45
46
EK C: Alan geri çekmeyi programlamak için Python kodu
1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7. distance = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1, us
ecols=(1))
8. MESAFE = np.array(mesafe)
9. koordinatlar = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1,
usecols=(2, 3, 4))
10. KOORDİNATLAR =
np.array(koordinatlar) 11.
12. with open("space retraction.csv", "rb") as f: # rb : ikili modda okumak ve
belirli bir ham dosyadan okumak için
13. from itertools import islice
14.
15. XYZ0 = np.genfromtxt(islice(f, 1, 2), delimiter=",", usecols=(5, 6, 7))
47
56.
57. # doğrulama (varyans kovaryans matrisi hesaplaması)
58. # Helmert.py'de kullanılan denklemlerin aynısı, sadece değiştirerek: A=A; L=B;
DATA = DIS
TANCE
59. count = (np.size(DISTANCE,0)) #denklem sayısı
60. c1 = np.eye(count,count)
61. c = np.linalg.inv (c1)
62.
63. del_XX3 = np.dot(c,A)
64. del_XX4 = np.dot(np.transpose(A),del_XX3)
65. del_XX = np.linalg.inv(del_XX4)
66. del_XX1 = np.dot(c,B)
67. del_XX2 = np.dot(np.transpose(A),del_XX1)
68. del_X = np.dot(del_XX,del_XX2)
69.
70. ep_cap = B - A.dot(del_X)
71. CO_v1= np.dot(c,ep_cap)
72. CO_v = np.dot(np.transpose(ep_cap),CO_v1)/(count-3)
73. CXX =CO_v*(del_XX)
74. CX = [CXX[0,0],CXX[1,1],CXX[2,2]]
75. CX = np.sqrt(CX) # varyans kovaryans matrisi
76.
77.
78. print(CX)
79.
80.
81. # print (XYZ0)
82. # print (X)
83. # print(B)
84.
85. np.savetxt('Rezeksiyon sonucu.csv', [XYZ0], fmt='%1.4f',
delimiter=',',heade
r= "X0(m),Y0(m),Z0(m)")
86. np.savetxt('Resection Variance Covariance.csv', [CX], fmt='%1.20f', delimit
er=',',header='dx(m),dy(m),dz(m)')
87. # Çizim kodu
88. style.use('ggplot')
89. fig = plt.figure()
90. ax1 = fig.add_subplot(111, projection='3d')
91.
92. TCOORDINATES = COORDINATES.transpose()
93.
94. ax1.scatter(TCOORDINATES[0], T C O O R D I N A T E S [ 1], T C O O R D I N A T E S [ 2],
c='g', marke
r='X')
95. ax1.scatter(XYZ0[0,], X Y Z 0 [ 1,], X Y Z 0 [ 2,], c='r', marker='o')
96. ax1.set_xlabel('x ekseni')
97. ax1.set_ylabel('y ekseni')
98. ax1.set_zlabel('z ekseni')
99.
100.
101. # Numaralandırma
102.
103. n = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1, us
ecols=(0))
104. N = np.array(n)
105.
106. ax1.text(XYZ0[0,], X Y Z 0 [ 1,], X Y Z 0 [ 2,], '%s' % (str("CC")), size=8, z
order=1, color='k')
107. for i, txt in enumerate(n):
108. ax1.text(TCOORDINATES[0, i], T C O O R D I N A T E S [ 1, i],
T C O O R D I N A T E S [ 2,
i], '%s' % (str(txt)), size=8, zorder=1, color='k')
109. print (i,txt)
110.
111.
112.
113.
48
114. plt.show()
49
EK D: Kara Kedi'de kullanılan Kodun belirlenmesi
1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7.
8.
9. sinif gözeti̇mi̇ :
10. def init (self):
11. geçmek
12.
13.
14. def hesaplamalar(self , x1, y1, z1, x2, y2, z2):
15. # x1 = float(input('x1'))
16. # y1 = float(input('y1'))
17. # z1 = float(input('z1'))
18. # x2 = float(input('x2'))
19. # y2 = float(input('y2'))
20. # z2 = float(input('z2'))
21.
22. dx = x2 - x1
23. dy = y2 - y1
24. dz = z2 - z1
25.
26. dx == 0 ve dy == 0 ise:
27. azimut = 0
28. elif dx < 0.0 ve dy >= 0 . 0:
29. azimut = 450 - math.atan2(dy, dx) * 180 / math.pi
30. Başka:
31. azimut = 90 - math.atan2(dy, dx) * 180 / math.pi
32. D3d = math.sqrt((x2 - x1) ** 2 + ( y2 - y1) ** 2 + (z2 - z1) ** 2)
33. D2d = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
34. VA = math.atan(dz / D2d) * 180 / math.pi
35.
36.
37. dönüş azimut,D2d,D3d,VA
38.
39.
40. stakeoutpoints = np.loadtxt('stakeoutpoints.csv', delimiter= ',' , skiprows
=1 , usecols=(1,2,3))
41.
42.
43. STAKEOUTPOINTS = np.array(stakeoutpoints)
44.
45.
46. with open("stakeoutpoints.csv", "rb") as f: # rb : ikili modda
okumak ve belirli bir ham dosyadan okumak için
47. from itertools import islice
48. XYZ0 = np.genfromtxt(islice(f, 1, 2), delimiter=",", usecols=(4,5,6))
49. XYZ0 = n p .transpose(XYZ0) #+ np.array([20 , -3 , 10])
50.
51. i= 0
52. x= stakeOut()
53.
54.
55. STAKEOUTPOINTS içindeki satır için:
56.
57. vi = x.calculations(XYZ0[0],XYZ0[1],XYZ0[2],row[0],row[1],row[2])
58. v = np.array([vi])
59. eğer i == 0 :
60. V=v
61. Başka:
50
62. V = np.concatenate((V,v), axis=0)
63. i=i+1
64.
65.
66.
67.
68. np.savetxt('Sakeoutresult.csv', V ,fmt='%1.6f,%1.4f,%1.4f,%1.6f',delimiter=
',',header="Azimuth(Degree),Horizental Distance(m),Slope
D i s t a n c e ( m),Vertic
al Açı (Derece)")
69. print(np.shape(V))
70. print(V)
51
EK E: Kara Kedi ana penceresinin kodu
52
1. self.line = QtWidgets.QFrame(self.centralwidget)
2. self.line.setGeometry(QtCore.QRect(290, 70, 171, 16))
3. self.line.setFrameShape(QtWidgets.QFrame.HLine)
4. self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
5. self.line.setObjectName("line")
6. self.line_2 = QtWidgets.QFrame(self.centralwidget)
7. self.line_2.setGeometry(QtCore.QRect(280, 240, 181, 16))
8. self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
9. self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
10. self.line_2.setObjectName("line_2")
11. self.line_3 = QtWidgets.QFrame(self.centralwidget)
12. self.line_3.setGeometry(QtCore.QRect(280, 410, 181, 16))
13. self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
14. self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
15. self.line_3.setObjectName("line_3")
16. self.line_4 = QtWidgets.QFrame(self.centralwidget)
17. self.line_4.setGeometry(QtCore.QRect(280, 570, 181, 16))
18. self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
19. self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
20. self.line_4.setObjectName("line_4")
21. MainWindow.setCentralWidget(self.centralwidget)
22. self.menubar = QtWidgets.QMenuBar(MainWindow)
23. self.menubar.setGeometry(QtCore.QRect(0, 0, 1121, 26))
24. self.menubar.setObjectName("menubar")
25. MainWindow.setMenuBar(self.menubar)
26. self.statusbar = QtWidgets.QStatusBar(MainWindow)
27. self.statusbar.setObjectName("statusbar")
28. MainWindow.setStatusBar(self.statusbar)
29.
30. self.retranslateUi(MainWindow)
31. QtCore.QMetaObject.connectSlotsByName(MainWindow)
32.
33.
34. self.calculatingParameters.clicked.connect(self.helmert)
35. self.calculatingNewCoordinates.clicked.connect(self.using_helmert)
36. self.distancesBasedResection.clicked.connect(self.space_retraction)
37. self.stakingOutPoint.clicked.connect(self.stakeOut)
38.
39. def helmert (self):
40. subprocess.call(['python','helmert.py'])
41. def using_helmert (self):
42. subprocess.call(['python','using helmert.py'])
43. def space_retraction (self):
44. subprocess.call(['python','space retraction.py'])
45. def stakeOut (self):
46. subprocess.call(['python','stakeOut.py'])
47. msg = QMessageBox()
48.
49. msg.setIcon(QMessageBox.Information)
50. msg.setText("Sonuçlar 'Stakeoutresult.csv' dosyasına kaydedildi")
51. msg.setWindowTitle("Done")
52. msg.exec()
53.
54.
55. def retranslateUi(self, MainWindow):
56. _translate = QtCore.QCoreApplication.translate
57. MainWindow.setWindowTitle(_translate("MainWindow", "Black Cat"))
58. self.calculatingParameters.setText(_translate("MainWindow", "Calcul
ating Parameters "))
53
1. self.calculatingNewCoordinates.setText(_translate("MainWindow", " ca
Yeni koordinatlar hesaplanıyor"))
2. self.distancesBasedResection.setText(_translate("MainWindow", "dist
ances-based resection "))
3. self.textEdit.setHtml(_translate("MainWindow", " <!DOCTYPE HTML PUBL
IC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-
html40/strict.dtd\">\n"
4. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/cs
s\">\n"
5. "p, li { white-space: pre-wrap; }\n"
6. "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-
size:7.8pt; font-weight:400; font-style:normal;\">\n"
7. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">nokta dosyasını "helmert.csv" olarak adlandırın (şablon
dosyası mevcuttur) </p>\n"
8. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">1. sütun nokta no </p>\n"
9. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">sonraki 3 sütun eski SYS koordinatlarıdır </p>\n"
10. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">son 3 sütun yeni SYS koordinatlarıdır</p>\n"
11. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">varyans-
kovaryans matrisi : </p>\n" altında kaydedilecektir.
12. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">'Helmert Parameters Variance_Covariance.csv' </p>\n"
13. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin- bottom:0px;
margin-left:0px; margin-right:0px; -qt-block-indent:0; text-
indent:0px;\"><br /></p></body></html>"))
14. self.textEdit_2.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PU
BLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-
html40/strict.dtd\">\n"
15. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/cs
s\">\n"
16. "p, li { white-space: pre-wrap; }\n"
17. "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-
size:7.8pt; font-weight:400; font-style:normal;\">\n"
18. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
Verileri "space retraction.csv" adlı dosya olarak kaydedin (şablon dosyası
mevcuttur)
p>\n"
19. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
Dosya 7 sütuna sahip olmalıdır </p>\n"
20. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
İsimler için ilk ham aşağıdaki gibidir: ( NO ,D , X , Y , Z , X0 ,Y0 , Z0 )</p>\n"
21. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
Nokta numaraları için "No"; Mesafeler için "D" </p>\n"
22. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- "XYZ" : nokta koordinatlarıdır </p>\n"
23. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- "X0Y0Z0" : istenen po int'in yaklaşık koordinatıdır</p>\n"
54
1. style=\" font-family:\'Courier New\'; font-
size:8pt; color:#000000;\">" </span></p></body></html>"))
2. self.textEdit_3.setHtml(_translate("MainWindow", " <!DOCTYPE HTML PU
BLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-
html40/strict.dtd\">\n"
3. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/cs
s\">\n"
4. "p, li { white-space: pre-wrap; }\n"
5. "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-
size:7.8pt; font-weight:400; font-style:normal;\">\n"
6. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- Parametreleri hesapladıktan sonra 2. sistemdeki koordinatları
hesaplamak için bu kodu kullanın </p>\n"
7. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- 1. adımdaki parametreler dosyası otomatik olarak
"parametre.csv" altına kaydedilir </p>\n"
8. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- 1. koordinat sisteminin koordinatlarını "us ing helmert.csv"
dosyası altına kaydedin (şablon dosyası mevcuttur) </p>\n"
9. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- Dosya, XYZ koordinatları için herhangi bir isim veya nokta No
olmadan 3 sütuna sahip olmalıdır </p>\n"
10. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- Sonuç Dosyalarının adı "after helmer.csv"</p>\n"
11. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-
bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-
indent:0px;\"><br /></p></body></html>"))
12. self.stakingOutPoint.setText(_translate("MainWindow", "staking out
points"))
13. self.textEdit_4.setHtml(_translate("MainWindow", " <!DOCTYPE HTML PU
BLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-
html40/strict.dtd\">\n"
14. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/cs
s\">\n"
15. "p, li { white-space: pre-wrap; }\n"
16. "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-
size:7.8pt; font-weight:400; font-style:normal;\">\n"
17. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
staking out elemanları şunlardır: Azimut - Dikey Açı - Yatay Mesafe - Eğim
Mesafesi </p>\n"
18. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- Nokta verileri şu şekilde kaydedilmelidir: <span style=\"
font- family:\'Courier New\'; font-
size:8pt; color:#6a8759;\">\'stakeoutpoints.csv\'(şablon dosyası
mevcuttur)</span></p>\n"
19. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -
qt-block-indent:0; text-indent:0px;\"><span style=\" font-
family:\'Courier New\'; font-size:8pt; color:#000000;\">-
Sonuç dosyası </span><span style=\" font-family:\'Courier New\'; font- size:8pt;
color:#6a8759;\">\'Sakeoutresult.csv\'</span></p></body></html>") içine
kaydedilecektir.)
20. if name == " main ":
21. import sys
22. app = QtWidgets.QApplication(sys.argv)
23. MainWindow = QtWidgets.QMainWindow()
24. ui = Ui_MainWindow()
25. ui.setupUi(MainWindow)
26. MainWindow.show()
27. sys.exit(app.exec_())
55
ÖZGEÇMİŞ
E-Mail : waelnajj@gmail.com
EĞİTİM
56