21 Mart 2021 Pazar

JTS CBS Kütüphanesi Rehberi 3 - Geometrik Alan Hesaplamaları

Previously on JTS

  1.  JTS CBS Kütüphanesi Rehberi  1 - Geometri Modeli
  2. JTS CBS Kütüphanesi Rehberi  2 - Geometrik İlişki Hesaplamaları 

Merhabalar. JTS (Java Topology Suite) rehberimizin önceki bölümlerinde geometri modellerini tanımış, daha sonra ise geometrilerin birbiri ile ilişkilerini incelemiştik. Bu bölümde alan hesaplama yetenekleri üzerinde duracağız. Tüm görselleştirme örnek kodlarına GitHub'da şuradan ulaşabileceğinizi hatırlatarak başlayalım.

Intersection - Kesişim Alanı Hesaplama 

İki adet poligon tanımlayıp bunların kesişim alanını intersection() metodu ile hesaplatıp farklı renkle boyayalım. Örnek projemizdeki KesisimAlanHesaplama.java sınıfını çalıştırarak görselleştirebilirsiniz. 

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(150, 60),
                        new Coordinate(325, 180),new Coordinate(90, 150), new Coordinate(150, 60)};

                Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(210, 120), new Coordinate(350, 120),
                        new Coordinate(400, 210),new Coordinate(250, 300), new Coordinate(180, 150), new Coordinate(210, 120)};
               
                Polygon maviPolygon = geometryFactory.createPolygon(coordinates);
               
                Polygon sariPolygon = geometryFactory.createPolygon(coordinates2);
               
                Polygon kesisimAlani = (Polygon) sariPolygon.intersection(maviPolygon);

Geometrik Kesişim Alan Hesaplama
Geometrik Kesişim Alan Hesaplama

Union - Birleşim Alanı Hesaplama

Kesişim örneğinde tanımladığımız mavi ve sarı poligonun birleşim alanını union() metodu ile hesaplatıp boyayalım. Örnek projemizdeki BirlesimAlanHesaplama.java sınıfını çalıştırarak görselleştirebilirsiniz. 

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(150, 60),
                        new Coordinate(325, 180),new Coordinate(90, 150), new Coordinate(150, 60)};

                Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(210, 120), new Coordinate(350, 120),
                        new Coordinate(400, 210),new Coordinate(250, 300), new Coordinate(180, 150), new Coordinate(210, 120)};
               
                Polygon maviPolygon = geometryFactory.createPolygon(coordinates);
               
                Polygon sariPolygon = geometryFactory.createPolygon(coordinates2);
               
                Polygon birlesimPoligonu = (Polygon) sariPolygon.union(maviPolygon);

Birleşim Alan Hesaplama (Union)
Birleşim Alan Hesaplama (Union)

Unary Union - Tekil Birleşim Alanı Hesaplama

Geometri parametresi almayan union() metodu tekil birleşim operasyonunu gerçekleştirmektedir. Çağrıldığı geometri nesnesi içindeki geometrileri birleştirip bir sonuç dönmektedir. Bizim örneğimizde sarı ve mavi poligondan bir adet MultiPolygon nesnesi oluşturup bu nesnede unary union() metodunu kullanarak yine aynı birleşim poligonunu elde ettiğimizi göreceğiz. Örnek projemizdeki TekilBirlesimAlanHesaplama.java sınıfını çalıştırarak görselleştirebilirsiniz.

 GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(150, 60),
                        new Coordinate(325, 180),new Coordinate(90, 150), new Coordinate(150, 60)};

                Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(210, 120), new Coordinate(350, 120),
                        new Coordinate(400, 210),new Coordinate(250, 300), new Coordinate(180, 150), new Coordinate(210, 120)};
                
                Polygon maviPolygon = geometryFactory.createPolygon(coordinates);
                
                Polygon sariPolygon = geometryFactory.createPolygon(coordinates2);
                
                MultiPolygon multiPoligon = geometryFactory.createMultiPolygon(new Polygon[] {sariPolygon, maviPolygon});
                
                Polygon birlesimPoligonu = (Polygon) multiPoligon.union();

Tekil Birleşim Alan Hesaplama (Unary Union)
Tekil Birleşim Alan Hesaplama (Unary Union)

Difference - Fark Alanı Hesaplama

Yine aynı mavi ve sarı poligon ile devam ediyoruz. Sarı poligonun mavi poligondan farkını difference() metodu ile hesaplatıp boyayalım. Örnek projemizdeki FarkAlanHesaplama.java sınıfını çalıştırarak görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(150, 60),
                        new Coordinate(325, 180),new Coordinate(90, 150), new Coordinate(150, 60)};

                Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(210, 120), new Coordinate(350, 120),
                        new Coordinate(400, 210),new Coordinate(250, 300), new Coordinate(180, 150), new Coordinate(210, 120)};
               
                Polygon maviPolygon = geometryFactory.createPolygon(coordinates);
               
                Polygon sariPolygon = geometryFactory.createPolygon(coordinates2);
               
                Polygon farkPoligonu = (Polygon) sariPolygon.difference(maviPolygon);

Fark Alan Hesaplama (Difference)
Fark Alan Hesaplama (Difference)

Symetric Difference - Simetrik Fark Alanı Hesaplama

Bu örnekten yola çıkarak symDifference() metodunu kullanarak hesapladığımız simetrik farkı, sarı poligonun mavi poligondan farkı ile, mavinin sarıdan farkının birleşimi olarak tanımlayabiliriz. Örnek projemizdeki SimetrikFarkAlanHesaplama.java sınıfını çalıştırarak görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(150, 60),
                        new Coordinate(325, 180),new Coordinate(90, 150), new Coordinate(150, 60)};

                Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(210, 120), new Coordinate(350, 120),
                        new Coordinate(400, 210),new Coordinate(250, 300), new Coordinate(180, 150), new Coordinate(210, 120)};
               
                Polygon maviPolygon = geometryFactory.createPolygon(coordinates);
               
                Polygon sariPolygon = geometryFactory.createPolygon(coordinates2);
               
                MultiPolygon simetrikFarkPoligonu = (MultiPolygon) sariPolygon.symDifference(maviPolygon);

Simetrik Fark Alan Hesaplama (Symetric Difference)
Simetrik Fark Alan Hesaplama (Symetric Difference)

Buffer - Tampon Alanı Hesaplama

Bir geometrinin sınırlarından istediğimiz birim kadar genişletilmiş şekilde yeni bir geometri elde etmek için buffer() metodunu kullanırız. Örneğimizde, sarı ve mavi poligonlardan 30 birim tamponlu daha geniş poligonlar elde edelim. Örnek projemizdeki TamponAlanHesaplama.java sınıfını çalıştırarak görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(150, 60),
                        new Coordinate(325, 180),new Coordinate(90, 150), new Coordinate(150, 60)};

                Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(210, 120), new Coordinate(350, 120),
                        new Coordinate(400, 210),new Coordinate(250, 300), new Coordinate(180, 150), new Coordinate(210, 120)};
               
                Polygon maviPolygon = geometryFactory.createPolygon(coordinates);
               
                Polygon sariPolygon = geometryFactory.createPolygon(coordinates2);
               
                Polygon tamponluSariPoligon = (Polygon) sariPolygon.buffer(30);
               
                Polygon tamponluMaviPoligon = (Polygon) maviPolygon.buffer(30);

Tamponlu Alan Hesaplama (Buffer)
Tamponlu Alan Hesaplama (Buffer)
 

Önceki Bölümler

  1.  JTS CBS Kütüphanesi Rehberi  1 - Geometri Modeli
  2. JTS CBS Kütüphanesi Rehberi  2 - Geometrik İlişki Hesaplamaları 

Sonraki Bölümler:

JTS CBS Kütüphanesi Rehberi 4 - Delaunay Üçgenleme, Voronoi Diyagram, Convex Hull 

JTS CBS Kütüphanesi Rehberi 5 - Quadtree Nedir? Java'da Örnek Kullanım

 


19 Mart 2021 Cuma

Mühendis Özlü Sözleri


 

 
1. “Mühendisler problem çözmeyi severler. Eğer ortada çözülecek problem yoksa, kendi elleriyle oluştururlar."
- Scott Adams

2. “Mükemmellik, ekleyecek birşey kalmadığında değil, çıkarak birşey kalmadığında elde edilir.”
- Antoine de Saint-Exupery

3. “Bizim işimizde sorun insanların senin fikirlerini çalmasını engellemek değildir, tam aksine fikirlerinizi çalmalarını sağlamaktır!”
- Howard Aiken

4. “Matematik benim tutkum, mühendislik ise mesleğim.”
- Wilfred James Dolor

5. “Herhangi bir aptal ayakta duran bir köprü inşa edebilir, ancak sadece bir mühendis ancak zar zor ayakta duran bir köprü yapabilir.”
- Anonim

6. “İnsan ayağı tam bir mühendislik harikası ve sanat eseridir.”
- Leonardo da Vinci

7. “Ne kadar az hareketli parça, o kadar iyi." "Gerçekten. Mühendislik alanında bundan daha doğru bir söz henüz söylenmedi.”
- Christian Cantrell

8. “Birşeylerin nasıl çalıştığını gerçekten öğrenmek istiyorsanız, o şeyi dağılıp parçalanırken inceleyin.”
- William Gibson

9. “Elli kişi tarafından daha iyi yapılamayacak, beş yüz kişilik bir mühendislik ekibi tarafından yapılan bir işi hiç görmedim.”
- C. Gordon Bell

10. “İnsanların tamamen kusursuz bir şey tasarlamaya çalışırken yaptıkları yaygın bir hata, tamamen aptalların zekasını hafife almaktır.”
- Douglas Adams

11. “Yaptığınız her şeyde mükemmellik için çabalayın. Var olanın en iyisini alın ve daha iyi hale getirin. Var olmadığı zaman, onu tasarlayın.”
- Sir Henry Royce

12. “Normal insanlar, kırılmazsa tamir edilmeyeceğine inanırlar. Mühendisler, kırılmazsa henüz yeterli özelliğe sahip olmadığına inanırlar.”
- Scott Adams

13. “Birinci mühendislik kuralı; prototiplere dikkat edin. Bununla birlikte, kendi özgün iş yapış şekline sahip olmayan bir mühendis tarafından yapılan her şeyden kaçının.”
- Simon R. Green

14. “İyi fikirlere sahip olmanın püf noktası, görkemli bir izolasyon içinde oturup büyük düşünceler düşünmeye çalışmak değildir. İşin püf noktası masaya daha fazla parça almaktır.”
- Steven Johnson

15. “John Kobak şöyle der: Herhangi bir şey öğrenmenin yolu, bir şeyin başarısız olması ve bir daha nasıl başarısız olamayacağını anlamanızdır.”
- Robert S. Arrighi

16. “İmalat, parçaları bir araya getirmekten daha fazlasıdır. Fikirler ortaya koymak, temel ilkeleri test etmek ve mühendisliğin yanı sıra son montajı mükemmelleştirmektir."
- James Dyson

17. “Garbolojinin kötü kokulu alanının roket bilimi, petrol keşfi veya beyin cerrahisinin popülaritesine ulaşmamış olması şaşırtıcı değildir."
- Hans Y. Tammemagi

18. “Tamamladığımız projeler bildiklerimizi gösteriyor - gelecek projeler ne öğreneceğimize karar veriyor.”
- Dr. Mohsin Tiwana

19. “Vaktimi yüksek konseptli şeyler hakkında insanları kandırmakla harcamıyorum; Zamanımı mühendislik ve üretim problemlerini çözmek için harcıyorum.”
- Elon Musk

20. “İyi bir bilim adamı, özgün fikirleri olan kişidir. İyi bir mühendis, mümkün olduğunca az fikirle çalışan bir tasarım yapan kişidir.”
- Freeman Dyson

21. “Benim gibi daha fazla mühendis teknolojiden nefret etseydi dünya daha iyi bir yer olurdu. Tasarladığım şeyleri, başarılı olursam kimse fark etmeyecek. İşler sadece işe yarayacak ve kendi kendini yönetecek.”
- Radia Pearlman

22. “İyimser için bardağın yarısı dolu. Karamsar için bardağın yarısı boş. Mühendis için bardak, olması gerekenden iki kat daha büyük."
- Anonim

23. “Gençlerin tüm insanlık için, daha iyi bir yarın için, bilim ve mühendislikle ilgilenmelerini sağlamaktan daha güçlü bir şekilde inandığım hiçbir şey yok.”

 - Bill Nye

24. “Ama şunu unutma, evlat... Uçaklar savaş için var olmadılar. Para kazanmak için de değiller. Uçaklar güzel rüyalardır. Mühendisler hayalleri gerçeğe dönüştürürler."
- Hayao Miyazaki

25. “Genellikle imkansız olduğunu düşündüğümüz şeyler basit mühendislik problemleridir... Bunları engelleyen fizik yasası yoktur.”
- Michio Kaku

26. “Başlangıçta bir mühendis olmam gerekiyordu, ancak yaratıcı enerjimi, amaç olarak iğrenç bir sermaye kazancı ile günlük yaşamı daha da rafine hale getiren şeylere harcamak zorunda kalma düşüncesi benim için dayanılmazdı.”
- Albert Einstein

27. “En önemli şey, en önemli şeyin en önemli şey olarak kalmasını sağlamaktır.”
- Donald P. Coduto

28. “Elektronları keşfetmek ve hareketlerini yöneten denklemleri bulmak heyecan vericidir; ama bu prensipleri elektrikli konserve açacakları tasarlamak için kullanmak sıkıcı. Şimdilerde artık sadece konserve açacakları var.”
- Neal Stephenson

29. “Uçaklar bilim tarafından değil, tersine sanat tarafından tasarlanmıştır. Mühendisliğin bilim olmadan da yapabileceğini söylemek istemiyorum, aksine bilimsel temellere dayanmaktadır, ancak bilimsel araştırma ile mühendislik ürünü arasında mühendisin sanatı tarafından kapatılması gereken büyük bir boşluk vardır.”
- British Engineer to the Royal Aeronautical Society, 1922.

30. “Mükemmel bir köprü, bir milletin ihtişamını ve dehasını tanıtmaya hizmet etmesi gereken büyük bir anıttır; kişi kendini mimari olarak mükemmelleştirme çabalarıyla meşgul etmemelidir. Çünkü zevk her zaman değişime açıktır. Ancak her zaman yapısında ve dekorasyonunda uygun olan sağlamlık karakterini muhafaza etmeye çalışmalıdır.”
- Jean Peronnet

31. “Mühendis, rakamlarla arası iyi olan, ancak bir muhasebeci kişiliğine sahip olmayan kişidir.”
- Anonim

32. “Mimarlar ve mühendisler, halkın rızası, halkın onayı ve çoğu zaman kamu parasıyla kendi anıtlarını inşa ettikleri için en şanslı insanlar arasındadır.”
- John Prebble

33. “Mühendislik, tamamen anlamadığımız malzemeleri, doğru bir şekilde değerlendiremeyeceğimiz kuvvetlere dayanacak şekilde kesin olarak analiz edemeyeceğimiz şekillere dönüştürme sanatıdır, öyle ki halkın cehaletimizin kapsamından şüphelenmek için hiçbir nedeni yoktur.”
- Dr. AR Dykes

 

34. “Mühendislik, bazı bilinen ihtiyaçları karşılamak için çevremizdeki fiziksel dünyayı dönüştüren herhangi bir yapının tasarımını ve yapımını düzenleme çabasını ifade eder.”
- G.F.C. Rogers

35. “Mühendislik ... kabaca ama yetersiz olmayan bir şekilde tanımlayacak olursak, herhangi bir beceriksizin bir şekilde iki dolarla yapabileceği bir şeyi bir dolarla daha iyi yapma sanatıdır.”
- Arthur Mellen Wellington

36. “ Mühendisler ... sadece teknisyen değildir ve insana ve medeniyetin ilerlemesine fayda sağlamayı vaat etmeyen hiçbir projeye onay vermemeli veya isimlerini ödünç vermemelidir.”
- John Fowler

37. “Mühendisler ... insanüstü değildirler. Varsayımlarında, hesaplamalarında, sonuçlarında hatalar yaparlar. Hatalar yapmaları affedilebilir olduğu gibi onları yakalamaları da beklenir. Bu nedenle, modern mühendisliğin özü, sadece kişinin kendi işini kontrol edebilmesi değil, aynı zamanda işini kontrol ettirmesi ve başkalarının çalışmalarını kontrol edebilmesidir.”
- Henry Petroski

38. “Hayallerden gelen vizyonu alıp bilim ve matematiğin büyüsünü uygulayarak, mesleğimin mirasını ve doğanın malzemeleri hakkındaki bilgilerimi bir tasarım oluşturmak için birleştiriyorum.”
- Anonim


39. “Deneyim sadece teoriyi doğrulamaya hizmet etmekle kalmaz, aynı zamanda onu bozmadan ondan farklılık gösterir, teorinin ulaşamadığı yeni gerçeklere götürür.”
- Dalembert

40. “Bir tünel hattının döşenmesinden nihai tamamlanmasına kadar, iş ya proje sahiplerinin pahasına yapılmış bir dizi deney ya da önceki deneyimin sonuçlarının bir dizi mantıklı uygulaması olabilir.”
- H.S. Drinker

41. “İnşaat mühendisliğini tercih edin, çünkü inşaat mühendisliği size insanları yönetme konusunda en çok şeyi öğreten mühendislik dalıdır. İnsanları yönetmek çok, çok yararlı ve neredeyse ne yaptığınıza bakılmaksızın faydalı olan bir beceridir.”
- Sir John Harvey Jones

42. “Başarısız olmadım ama ampul yapmamak için 1000 yol buldum.”
- Thomas Edison

43. “Köprülerin inşasında uyulacak kuralların veya koşulların belirlenmesine karşıyım ki, bugünün önyargılarını veya hatalarını kanun olarak kaydetmek veya kayıt altına almak yarınki iyileşmenin önünü tıkamış utanç verici bir şey olabilir.”
- Isambard Kingdom Brunel

44. “Mühendislik tarihi gerçekten de bozulmaların ve bu bozulmalardan öğrenmenin tarihidir. Üniversitede bana şu öğretilmişti ki 'mühendis en çok hurdalıkta öğrenir.”
- C.A. Claremont, Spanning Space

45. “Mühendislere dikkat etmek gerekir. Dikiş makinesiyle başlarlar, atom bombasıyla bitirirler.”
- Marcel Pagnol, Critiques des Critiques


46. “Yıllar geçtikçe insanlar başta bilseler bile bunu hangi mühendisin yaptığını unuturlar. Veya bir politikacı ona kendi adını verir. Ya da onu finanse etmek için diğer insanların parasını kullanan bir sponsorun adı ile anarlar. Ancak mühendisin kendisi, sadece birkaç mesleğin bilebileceği tatminlerle geçmiş başarı zincirlerine bakar. Ve profesyonel meslektaşlarının övgüsü, istediği tek ödüldür.”
- Herbert Hoover

47. “Mühendislik veya teknoloji, daha önce var olmayan şeylerin yapımıdır, oysa bilim, uzun süredir var olan şeylerin keşfedilmesidir."
- David Billington

48.“Yanlış gidebilecek bir şey ile yanlış gitmesi mümkün olmayan bir şey arasındaki en büyük fark, yanlış gitmesi mümkün olmayan bir şey ters gittiğinde, genellikle ulaşıp tamir etmenin imkansız hale gelmesidir.”
- Douglas Adams

49. “Dünyanın refahı büyük ölçüde mühendislerin çalışmasına bağlıdır. Mesleğin büyük bir geleceği ve sınırsız kapsamı var; Her ülkede her türden yeni eser isteniyor ve istenecek ve hayal gücü ve hevese sahip genç bir adam için daha çekici bir meslek düşünemiyorum. Bilimsel bilgi kadar hayal gücü de gereklidir.”
-Sir William Halcrow

50. “Pek çok yönden köprü kurma hikayesinin medeniyet hikayesi olduğuna şüphe yok. Bununla, bir halkın ilerlemesinin önemli bir bölümünü kolaylıkla ölçebiliriz.”
- Franklin D. Roosevelt

51. “Mühendislik bilimden oldukça farklıdır. Bilim adamları doğayı anlamaya çalışır. Mühendisler doğada olmayan şeyler yapmaya çalışırlar. Mühendisler buluşu zorlarlar.”
- Yuan-Cheng Fung

52. “Mühendisler ve miktar ölçme uzmanları estetiği tartıştıklarında ve mimarlar vinçlerin ne yaptığını araştırdıklarında doğru yolda olacağız demektir.”
- Ove Arup

53. “Mühendisin hayatı boyunca yaptığı iş, doğal güçlerin sistematik olarak uygulanmasından ve doğal kaynakların insan hizmetinde sistematik olarak geliştirilmesinden oluşur.”
- Harry Walter Tyler

54. “Bilim adamı yeni bir malzeme veya enerji türü keşfeder ve mühendis bunun yeni bir kullanım alanını keşfeder.”
- Gordon Lindsay Glegg

55. Bir bilim adamı yeni bir yıldız keşfedebilir ama yıldız yapamaz. Bir mühendisten bunu kendisi için yapmasını istemesi gerekirdi.”
- Gordon Lindsay Glegg

56. “Mühendislik, yürüyen bir ansiklopedi gibi sadece bilmek ve bilgili olmak değildir; mühendislik yalnızca analiz değildir; mühendislik sadece var olmayan mühendislik problemlerine zarif çözümler getirme kapasitesine sahip olmak değildir; mühendislik, teknolojik değişimin gücünü organize etme sanatını icra etmektir… Mühendisler, bilim ve toplum arasında bir yerde çalışırlar.”
- Gordon Stanley Brown

57. “Binalarımızı şekillendiriyoruz, sonra onlar bizi şekillendiriyor.”
- Winston Churchill

58. “Mühendislik, insanlığın kullanımı ve rahatlığı için doğadaki büyük güç kaynaklarını yönlendirme sanatıdır.”
- Thomas Tredgold

59. “Mühendislik, refah üretmek için doğal kaynakların verimli kullanımına yönelik bilimin profesyonel ve sistematik uygulamasıdır."
- Theodore Jesse Hoover

60. “Mühendisler iş dünyasında iş insanlarından daha mı iyidir? Tartışmalı. İş adamları kesinlikle daha büyük evlere sahipler, daha süslü arabalar kullanıyorlar, daha güzel kıyafetler giyiyorlar ve daha iyi görünen arkadaşları var. Mühendisler bu tür parayı harcayacak zaman yönetimi becerilerinden yoksundur. Mümkün olan en hızlı ve en verimli şekilde en fazla parayı kazanmanın yollarını bulmak için tüm zamanlarını harcıyorlar. Ve sonra anladıklarında süreci optimize ediyorlar.”
- Raul Perez

61. “Kimse hatalarla öğrenmek istemez, ancak başarılardan son teknolojinin ötesine geçecek kadar öğrenemeyiz.”
- Henry Petroski

62. “Bilim hepimizi şaşırtabilir ve büyüleyebilir ama dünyayı değiştiren mühendisliktir.”
- Isaac Asimov

63. “Bilim adamları dünyayı olduğu gibi incelerler, mühendisler hiç olmamış dünyaları ortaya çıkarırlar.”
- Theodore von Karman

64. “Medeniyetin öyküsü, bir bakıma mühendisliğin öyküsüdür - doğanın güçlerini insanın iyiliği için çalıştırmaya yönelik o uzun ve çetin mücadeledir.”
- Lyon Sprague DeCamp
 

65. “Erkekler köprüler kurar ve çöllere demiryolları atarlar, ancak yine de bir düğmeyi dikmenin kendilerinin ötesinde olduğunu başarılı bir şekilde iddia ederler.”
- Heywood Broun

66. “İdeal mühendis bir karışımdır… O bir bilim adamı değildir, matematikçi değildir, sosyolog veya yazar değildir, ancak mühendislik problemlerinin çözümünde bu disiplinlerden herhangi birinin veya tümünün bilgi ve tekniklerini kullanabilir.”
- N.W. Dougherty

67. “Mühendislik, insanın kullanımı için doğa tarafından sağlanan ve depolanan, enerji, kinetik ve potansiyeli koruma bilimidir. Bu enerjiyi en iyi şekilde kullanmak mühendislik işidir, böylece mümkün olan en az israf yapılabilir.”
- William A. Smith
 

68. “Yeni ekonomik dünya hakkında bildiğimiz tek şey bize mühendis yetiştiren ulusların avukat yetiştirenlere üstün geleceğini söylüyor. Şimdiye kadar hiçbir millet, büyüklüğe giden yolu dava etmedi.”
- Richard Lamm

69. “Görüyorsunuz, amacım mühendislik dünyasını karıştırmak değil, sadece güzel bir sanat eseri ortaya koymaktı.”
- Kit Williams

70. “İyi bir mühendis tersten düşünür ve kendisine önerdiği bileşenlerin ve sistemlerin biçimsel sonuçlarını sorar.”
- Helmut Jahn

71. “Mühendislik dehasının büyük zaferleri - lokomotif, makas köprüsü, çelik ray - ... mühendislikten ziyade bir icattır.”
- Arthur Mellen Wellington
 

72. “Bir teori, tanımlayıcı olasılıklar açısından o kadar zengin olabilir ki, herhangi bir veriye uyacak şekilde yapılabilir.”
- Phillip Johnson-Laird

73. “Herhangi bir tasarım aşamasında mühendisin ilk sorunu, sorunun gerçekte ne olduğunu keşfetmektir.”
- Anonim

74. “Mevcut gerçeklikle savaşarak bir şeyleri asla değiştiremezsiniz. Bir şeyi değiştirmek için mevcut modeli geçersiz kılan yeni bir model oluşturun.”
- Buckminster Fuller

75. “Mühendislik zihni harekete geçirir. Çocuklar kolayca sıkılır. Dışarı çıkıp ellerini kirletmek zorundalar: bir şeyler yapmak, bir şeyleri parçalamak, bir şeyleri düzeltmek. Okullar bunu sunabildiğinde, bir hayat mühendisiniz olacak.”
- Bruce Dickinson

76. “Mühendislerin zorlamaları olmasaydı, insanlık tekerleği asla görmezdi, onun yerine yamuk yaygınlaşırdı. Çünkü pazarlamadaki biri herkesi büyük bir frenleme yeteneğine sahip olduğuna ikna ederdi.”
- Scott Adams

77. “O zamanlarda (1909) baş mühendis neredeyse her zaman aynı zamanda baş test pilotuydu. Bu, havacılığın erken dönemlerinde zayıf mühendisliği ortadan kaldırmaya yarayan bir şanstı.”
- Igor Sikorsky

78. “Sanırım bana en çok sorulan soru şu: "O kapsülün içinde oturup geri sayımı dinlerken nasıl hissettin?" Bunun cevabı kolay. Fırlatmaya hazır bir şekilde hepsi bir hükümet sözleşmesindeki en düşük teklif veren tarafından inşa edilen iki milyon parçanın üzerinde oturduğunuzu bilseniz tam olarak nasıl hissedeceğinizi hissettim.”
- John Glenn

79. “Biz, bilmeyenlerin önderliğindeki isteksizler, nankör için imkansız olanı yapıyoruz. Çok uzun zamandır o kadar çok şey yaptık ki, çok az şeyle, artık hiçbir şey yapmadan her şeyi yapmaya yetkin durumdayız."
- Anonim

80. “Ne zaman bir iş yapıp yapamayacağınız sorulduğunda, onlara 'Kesinlikle yapabilirim!' Deyin Sonra çalışın ve nasıl yapılacağını öğrenin.”
- Theodore Roosevelt

81. “Mühendis, filozof ile teknisyen arasında bir arabulucudur ve iki yabancı arasındaki bir tercüman gibi her ikisinin de dilini, dolayısıyla hem pratik hem de teorik bilgiye sahip olmanın mutlak gerekliliğini anlamalıdır.”
- Henry Palmer

82. “Bir problem üzerinde çalışırken asla güzelliğini düşünmem ama bitirdiğimde çözüm güzel değilse yanlış olduğunu bilirim.”
- R. Buckminster Fuller

83. "Bilim adamı, anlık bir sonucu hedeflemez. Gelişmiş fikirlerinin hemen ele alınacağını beklemez. Onun işi çiftçi gibidir. Görevi, gelecek olanların temelini atmak ve yolu göstermektir. O yaşar, çalışır ve umut eder.”
- Nikola Tesla

Daha fazlası için :

Yazılımcı Özlü Sözleri tıklayın.

Çalışmak ve İş ile Alakalı Atasözleri ve Deyimler 


12 Mart 2021 Cuma

JTS CBS Kütüphanesi Rehberi 2 - Geometrik İlişki Hesaplamaları

Merhabalar. JTS rehberimizin bir önceki bölümünde geometrik modelleri tanımıştık. Şimdi ise kesişir mi, içerir mi gibi ilişki hesaplamalarının nasıl yapıldığını göreceğiz.

Geometri modeli kapsamındaki tüm nesneler Geometry sınıfından türemektedir. Bu sınıfın bize sunduğu bazı hesaplama metodlarını inceleyeceğiz.

Görselleştirme

Geometrik Kapsama Hesaplama
Geometrik Kapsama Hesaplama

Tüm bu bilgiler görselleştirilmez ise anlaşılması zor olabilirdi. Bu nedenle basit bir Swing arayüzü ile yaptığımız hesaplamaları bir JPanel üzerine çizmek faydalı olacaktır. Bu yazıdaki tüm denemeleri çalıştırıp görselleştirebileceğiniz kodların bulunduğu projeye GitHub'da şuradan ulaşabilirsiniz. 

paintComponent metodunu override ettiğimiz JPanel'den türeyen JTSGorsellestirmePanel sınıfında, java.awt.Graphics nesnesini kullanarak 2D çizimler yapacağız. Yalnız, bu Graphics sınıfının çizim metodları integer türünde değerler almakta. JTS hesaplamaları ise double değerler de dönebilmektedir. Bu nedenle görselleştirmeler %100 gerçek noktalara oturmayıp hafif hassasiyet kaybı yaşanmış şekilde çizilebilecektir.

JTSGorsellestimePanel.java
JTSGorsellestimePanel.java
 

Her görselleştirme için farklı DrawingCommand nesnelerini bu panele draw command olarak ekleyecek ve istediğimiz çizimleri ekranda görebileceğiz. 

DrawingCommand.java
DrawingCommand.java

 Örneğin iki LineString'in kesişimini görselleştirdiğimizde ekranda şöyle bir panel göreceğiz.

Kesişim LineString

Area - Alan

Bir üçgeni temsil edecek Polygon nesnesi oluşturup getArea() metodu ile alanını hesaplatalım. Örnek projemizde AlanHesaplama.java sınıfını çalıştırarak görselleştirebilirsiniz.

        GeometryFactory geometryFactory = new GeometryFactory();

        Coordinate[] coordinates = new Coordinate[] { new Coordinate(150, 60), new Coordinate(200, 150),  new Coordinate(90, 150),new Coordinate(150, 60)};

         Polygon polygon = geometryFactory.createPolygon(coordinates);
               
        double alan = polygon.getArea();

Geometrik Alan Hesaplama
Geometrik Alan Hesaplama

Tanımladığımız üçgenin koordinatlarından, üçgenin yüksekliğinin 150 - 60 = 90 birim, taban uzunluğunun ise, 200 - 90 = 110 birim olduğu görülüyor. Üçgenin alanı formülünden 90 * 110 /2 = 4950 olarak alanı doğru hesapladığını görebiliyoruz.

Length / Perimeter - Uzunluk Çevre

Bir çizgiyi temsil edecek LineString tanımlayıp uzunluğunu hesaplatalım. Çevre hesaplamak için de bir beşgeni temsil edecek Polygon nesnesi tanımlayıp çevresini hesaplatalım. Örnek projemizdeki UzunlukCevreHesaplama.java sınıfını çalıştırarak görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(150, 60), new Coordinate(200, 150),
                        new Coordinate(80, 80), new Coordinate(40, 160), new Coordinate(50, 60)};

                LineString lineString = geometryFactory.createLineString(coordinates);
               
                double uzunluk = lineString.getLength();
               
               
                Coordinate[] polygonCoordinates = new Coordinate[] { new Coordinate(60, 250), new Coordinate(160, 270),
                        new Coordinate(170, 330), new Coordinate(100, 350), new Coordinate(50, 280), new Coordinate(60, 250)};
               
                Polygon polygon = geometryFactory.createPolygon(polygonCoordinates);
               
                double poligonCevre = polygon.getLength();

Uzunluk Çevre Hesaplama
Uzunluk Çevre Hesaplama

Distance / isWithinDistance - Uzaklık, Mesafe İçinde mi

Bir nokta ve poligon tanımlayalım. Noktanın poligona olan uzaklığını hesaplayalım. Daha sonra bu uzaklığa göre, isWithinDistance metodu ile verdiğimiz mesafe içinde poligon nesnesi var mı kontrolünü yapalım. UzaklikHesaplama.java sınıfını çalıştırarak sonuçları ekranda görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(250, 60), new Coordinate(300, 150),  new Coordinate(190, 150),new Coordinate(250, 60)};

                Polygon polygon = geometryFactory.createPolygon(coordinates);
               
                Point point = geometryFactory.createPoint(new Coordinate(100, 100));
               
                double distance = polygon.distance(point);
               
                DistanceOp op = new DistanceOp(polygon, point);
               
                Coordinate[] nearestPoints = op.nearestPoints();
               
                boolean mesafedeMi103 = point.isWithinDistance(polygon, 103);
               
                boolean mesafedeMi102 = point.isWithinDistance(polygon, 102);

Uzaklık Hesaplama
Uzaklık Hesaplama

Contains / Within - İçeriyor, İçinde

Bir önceki örnekte kullandığımız poligonun içinde olan ve dışında olan iki nokta oluşturalım. contains metodu ile içeriyor kontrolü yapalım. within metodu ile de içinde mi kontrolü yapalım. IceriyorHesaplama.java sınıfını çalıştırarak sonuçları ekranda görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(250, 60), new Coordinate(300, 150),  new Coordinate(190, 150),new Coordinate(250, 60)};

                Polygon polygon = geometryFactory.createPolygon(coordinates);
               
                Point point = geometryFactory.createPoint(new Coordinate(100, 100));
               
                Point point2 = geometryFactory.createPoint(new Coordinate(250, 85));
               
                boolean poligonPoint1iIceriyorMu = polygon.contains(point);
               
                boolean poligonPoint2yiIceriyorMu = polygon.contains(point2);
               
                boolean point1PoligonunIcindeMi = point.within(polygon);
               
                boolean point2PoligonunIcindeMi = point2.within(polygon);

İçerir Hesaplama
İçerir Hesaplama

Covers / CoveredBy - Kapsıyor, Tarafından Kapsanıyor

Bir dörtgen ve dörtgenin içinde bulunacak şekilde bir üçgen tanımlayalım. covers metodu ile dörtgenin üçgeni kapsadığını, coveredBy metodu ile de üçgenin dörtgen tarafından kapsandığını gösterelim. KapsiyorHesaplama.java sınıfını çalıştırarak sonuçları ekranda görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(250, 110), new Coordinate(300, 200),  new Coordinate(190, 200),new Coordinate(250, 110)};

                Polygon polygon = geometryFactory.createPolygon(coordinates);
               
                Coordinate[] dortgenCoordinates = new Coordinate[] { new Coordinate(110, 80), new Coordinate(370, 90),  new Coordinate(370, 250),new Coordinate(100, 250) , new Coordinate(110, 80)};

                Polygon dortgen = geometryFactory.createPolygon(dortgenCoordinates);
               
                boolean dortgenPoligonuKapsiyorMu = dortgen.covers(polygon);
               
                boolean poligonDortgenTarafindanKapsaniyorMu = polygon.coveredBy(dortgen);


 

Kapsama Hesaplama
Kapsama Hesaplama

Intersects / Disjoint - Kesişir, Ayrık

3 adet çizgi çizelim ve bunların ilk ikisi kesişiyor olsun. intersects metodu ile çizgi 1 ve çizgi 2'nin kesiştiğini, çizgi 3'ün kesişmediğini gösterelim. disjoint metodu ile de çizgi 3 ve çizgi 1'in ayrık olduğunu gösterelim. KesisimHesaplama.java sınıfını çalıştırarak sonuçları ekranda görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates = new Coordinate[] { new Coordinate(50, 50), new Coordinate(150, 150) };

                LineString cizgi1 = geometryFactory.createLineString(coordinates);

                LineString cizgi2 = geometryFactory.createLineString(new Coordinate[] { new Coordinate(80, 40), new Coordinate(30, 250) });

                boolean cizgi1Cizgi2KesisirMi = cizgi1.intersects(cizgi1);
               
                Point intersectionPoint = (Point) cizgi1.intersection(cizgi2);
               
                LineString cizgi3 = geometryFactory.createLineString(new Coordinate[] { new Coordinate(210, 75), new Coordinate(350, 170) });

               
                boolean cizgi3Cizgi1AyrikMi = cizgi3.disjoint(cizgi1);
               
                boolean cizgi3Cizgi1KesşsşrMi = cizgi3.intersects(cizgi1);

Kesişim Hesaplama
Kesişim Hesaplama

Crosses - Kesiyor

Birbirini kesen geometrilerde crosses çağrısı true dönmektedir. KesiyorHesaplama.java sınıfını çalıştırarak sonuçları ekranda görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates1 = new Coordinate[] { new Coordinate(60, 60), new Coordinate(110, 110), new Coordinate(155, 60),
                        new Coordinate(60, 60)};

                Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(150, 120), new Coordinate(300, 120),
                        new Coordinate(300, 180), new Coordinate(150, 180), new Coordinate(150, 120) };
               
                Coordinate[] coordinates3 = new Coordinate[] { new Coordinate(40, 75), new Coordinate(350, 120) };
               
                Coordinate[] coordinates4 = new Coordinate[] { new Coordinate(210, 160), new Coordinate(350, 250) };

                Polygon poly1 = geometryFactory.createPolygon(coordinates1);

                Polygon poly2 = geometryFactory.createPolygon(coordinates2);
               
                LineString line1 = geometryFactory.createLineString(coordinates3);
               
                LineString line2 = geometryFactory.createLineString(coordinates4);


                System.out.println("poly1.crosses(line1)  " + (poly1.crosses(line1)));
              
                System.out.println("-----------------");

                System.out.println("line1.crosses(poly2)  " + (line1.crosses(poly2)));
          
                System.out.println("-----------------");

                System.out.println("line1.crosses(poly1)  " + (line1.crosses(poly1)));
               
                System.out.println("-----------------");
               
                System.out.println("poly2.crosses(line2)  " + poly2.crosses(line2));
               
                System.out.println("-----------------");
               
                System.out.println("line2.crosses(poly2)  " + line2.crosses(poly2)); 

Kesme Hesaplama
Kesme Hesaplama

Overlaps - Kaplıyor, Örtüşüyor ve Touches - Dokunuyor

overlaps ve touches metodlarını ortak bir örnekte gösterelim. Sadece köşe noktaları aynı olan, alan olarak birbirinin üstüne düşmeyen geometriler, birbirine dokunuyor demektir. touches çağrıları true döner. Köşe noktalarından da ileri gidip, birbirinin üstüne gelen alanları olan geometriler de örtüşüyor demektir. overlaps çağrıları true döner. DokunmaHesaplama.java sınıfındaki görselleştirmeyi incelediğimizde daha anlaşılır olacaktır. 

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates1 = new Coordinate[] { new Coordinate(60, 60), new Coordinate(110, 110), new Coordinate(155, 60),
                        new Coordinate(60, 60)};

                Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(155, 60), new Coordinate(250, 150), new Coordinate(310, 40),
                        new Coordinate(155, 60)};

                Coordinate[] coordinates3 = new Coordinate[] { new Coordinate(150, 120), new Coordinate(300, 120),
                        new Coordinate(300, 180), new Coordinate(150, 180), new Coordinate(150, 120) };
               
                Polygon poly1 = geometryFactory.createPolygon(coordinates1);

                Polygon poly2 = geometryFactory.createPolygon(coordinates2);
              
                Polygon poly3 = geometryFactory.createPolygon(coordinates3);
               
                System.out.println("poly1.touches(poly2)  " + (poly1.touches(poly2)));

                System.out.println("poly1.intersects(poly2)  " + (poly1.intersects(poly2)));

                System.out.println("poly1.overlaps(poly2)  " + (poly1.overlaps(poly2)));
              
                System.out.println("-----------------");
                System.out.println("poly1.touches(poly3)  " + (poly1.touches(poly3)));

                System.out.println("poly1.intersects(poly3)  " + (poly1.intersects(poly3)));

                System.out.println("poly1.overlaps(poly3)  " + (poly1.overlaps(poly3)));
              
                System.out.println("-----------------");
                System.out.println("poly3.touches(poly1) " + (poly3.touches(poly1)));

                System.out.println("poly3.intersects(poly1)  " + (poly3.intersects(poly1)));

                System.out.println("poly3.overlaps(poly1)  " + (poly3.overlaps(poly1)));
              
                System.out.println("-----------------");

                System.out.println("poly3.touches(poly2)  " + (poly3.touches(poly2)));

                System.out.println("poly3.intersects(poly2)  " + (poly3.intersects(poly2)));

                System.out.println("poly3.overlaps(poly2)  " + (poly3.overlaps(poly2)));
              
              
                System.out.println("-----------------");

                System.out.println("poly2.touches(poly3)  " + (poly2.touches(poly3)));

                System.out.println("poly2.intersects(poly3)  " + (poly2.intersects(poly3)));

                System.out.println("poly2.overlaps(poly3)  " + (poly2.overlaps(poly3)));

Dokunma Hesaplama
Dokunma Hesaplama

Equals - Eşit

JTS kütüphanesinde geometrilerin eşitlik kontrolü 2 farklı şekilde yapılabilmektedir. 

  • Geometrilerin ifade ettiği manaların eşit olup olmadığını hesaplayan equals(Geometry other) metodu. Bu metod iki geometri nesnesinin koordinat verileri farklı dahi olsa ifade ettikleri şekil aynı ise true dönmektedir. Örneğin, (0, 1), (0, 3) ve (0, 5)  noktalarından oluşan çizgi ile (0,5) ve (0, 1) noktalarından oluşan çizgi aynı şekli ifade etmektedir. Ayrıca dikkat çekilmesi gereken bir nokta var. Bu metodun equals şeklinde isimlendirilmesi hoş olmamış. Çünkü Java Object nesnesinin equals(Object obj) metodu ile karıştırılması oldukça olası. Kaldı ki aşağıda örneklerde görüleceği üzere JTS'in equals metodunu çağırmak için parametre (Geometry) nesnesine cast edilmek zorunda. Geometry tipinde olmayan bir parametre ile çağrılırsa Object equals metodu çalıştırılmış oluyor. 
  • Geometrilerin içerdiği koordinat verilerinin aynı olup olmadığına bakan equalsExact(Geometry other) metodu. Burada geometrilerin ifade ettiği şekil önemli değildir. Tüm koordinat verilerinin aynı olup olmadığına bakılmaktadır. equalsExact(Geometry other) metodu, equals(Geometry other) metodundan daha hızlı çalışmaktadır.

EsitlikHesaplama.java sınıfını çalıştırarak sonuçları ekranda görselleştirebilirsiniz.

GeometryFactory geometryFactory = new GeometryFactory();

                Coordinate[] coordinates1 = new Coordinate[] { new Coordinate(60, 60), new Coordinate(150, 60), new Coordinate(350, 60)};
                  
                Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(350, 60), new Coordinate(60, 60)};
              
                LineString line1 = geometryFactory.createLineString(coordinates1);
              
                LineString line2 = geometryFactory.createLineString(coordinates2);
              
                System.out.println("(line1.equals((Object)line2)) " + (line1.equals((Object)line2)));
              
                System.out.println("(line1.equals(line2)) " + (line1.equals(line2)));
              
                System.out.println("(line1.equals((Geometry)line2)) " + (line1.equals((Geometry)line2)));
              
                System.out.println("(line1.equalsExact(line2)) " + (line1.equalsExact(line2)));

Eşitlik Hesaplama
Eşitlik Hesaplama

Önceki Bölüm:

JTS CBS Kütüphanesi Rehberi 1 - Geometri Modeli

Sonraki Bölümler

JTS CBS Kütüphanesi Rehberi 3 - Geometrik Alan Hesaplamaları

JTS CBS Kütüphanesi Rehberi 4 - Delaunay Üçgenleme, Voronoi Diyagram, Convex Hull  

JTS CBS Kütüphanesi Rehberi 5 - Quadtree Nedir? Java'da Örnek Kullanım

 


 

 

 



1 Mart 2021 Pazartesi

JTS CBS Kütüphanesi Rehberi 1 - Geometri Modeli

Merhabalar. 2019 yılı başından beri işimde bir CBS (coğrafi bilgi sistemi) ürünü üzerinde çalışıyorum. Java dünyasında harita üzerinde geliştirilen pek çok yetenekte JTS (JTS Topology Suite) kütüphanesinin yeteneklerinden faydalanılmakta. Hatta sadece GIS yazılımlarında değil, nesnelerin çarpışıp çarpışmadığını kontrol etmek amacıyla oyunlarda bile kullanılabilmektedir. Fakat internette arattığımda bu kütüphane ile alakalı Türkçe kaynak azlığı dikkatimi çekti. İhtiyacı olanlara yardımcı olmasını umarak dilim döndüğünce bu kütüphaneden bahsedeceğim yazı dizisine başlıyorum. 


 

Kurulum

Öncelikle Maven bağımlılığına şuradan ulaşabilirsiniz. Maven repolarında jts diye arattığınızda kafa karıştırıcı bir durumla karşılaşıyorsunuz. Farklı paket adına sahip sürümler mevcut. Kütüphane 1.14 sürümüne kadar com.vividsolutions.jts paket adına sahip idi. Geliştiren ekip değiştiğinden dolayı 1.15 sürümünden itibaren org.locationtech.jts paket adına sahip olarak yayınlanıyor. Ben bu yazıyı yazarken en güncel sürüm 1.18.0 idi.

Geometri Modeli

JTS kütüphanesi, OGC'nin (Open Geospatial Consortium) standart olarak tanımladığı tüm geometrik tipleri desteklemektedir. Bunlar:

  • Point ve MultiPoint (nokta ve çoklu nokta)
  • LineString ve MultiLineString (çizgi ve çoklu çizgi)
  • Polygon ve MultiPolygon (poligon ve çoklu poligon)
  • İçinde karışık türlerin bulunabileceği GeometryCollection

Coordinate Sınıfı

Geometri modeli sınıflarını oluşturan konum bilgilerini tutan sınıf Coordinate sınıfıdır. X, Y ve Z koordinat verilerini tutabilmektedir. CBS yazılımlarında X boylam, Y enlem, Z de yükseklik verisini tutacak şekilde kullanılmaktadır. Yükseklik verisini tutsa da, JTS kütüphanesinin 3D (3 boyutlu) geometrik hesaplama kabiliyeti bulunmuyor. Geometrik hesaplamalarında sadece X ve Y değerlerini dikkate alıyor. Oyunlarda bu X, Y ve Z değerleri piksel ve derinlik tutmak için de kullanılabilmektedir.

    Coordinate coordinate = new Coordinate(3, 5, 10);

GeometryFactory

Geometri modeli kapsamındaki nesneleri üretmek için GeometryFactory sınıfı kullanılmaktadır.

GeometryFactory geometryFactory = new GeometryFactory();

Point

Bir adet Coordinate nesnesi alarak oluşturulur. 

    Point point = geometryFactory.createPoint(coordinate);

MultiPoint

Birden fazla konum verisi alarak oluşturulur.

    Coordinate[] coordinates = new Coordinate[] { new Coordinate(39, 33), new Coordinate(46, 23)};

    MultiPoint multiPoint = geometryFactory.createMultiPointFromCoords(coordinates);

LineString

Çizgi nesneleri LineString kullanarak temsil edilmektedir. Birden fazla konum alarak oluşturulur. simple, non-simple, closed, not-closed türleri vardır. Kendisi ile kesişmeyen çizgilere simple, kesişenlere ise non-simple denilmektedir. Başlangıç ve bitiş koordinatları aynı olan çizgilere closed denilmektedir.

Line String
line string

LineRing

LineString sınıfının bir alt sınıfı olan LineRing closed ve simple LineString nesneleri oluşturmak için kullanılmaktadır. Closed veya simple olmayan koordinat dizisiyle LineRing oluşturmaya çalışılırsa hata alınacaktır.

java.lang.IllegalArgumentException: Points of LinearRing do not form a closed linestring

MultiLineString

Birden fazla LineString nesnesi alarak oluşturulur.

    Coordinate[] coordinates1 = new Coordinate[] { new Coordinate(39, 33), new Coordinate(46, 23)};
         
    LineString lineString1 = geometryFactory.createLineString(coordinates1);
       
    Coordinate[] coordinates2 = new Coordinate[] { new Coordinate(26, 38), new Coordinate(30, 37),    new Coordinate(40.5, 39.785)};
         
    LineString lineString2 = geometryFactory.createLineString(coordinates2);
       
    LineString[] lineStrings = new LineString[] {lineString1, lineString2};
       
    MultiLineString multiLineString = geometryFactory.createMultiLineString(lineStrings);

Polygon

Bir adet LineRing veya LineRing oluşturulabilecek koordinat dizisi alarak oluşturulur. Yani başlangıç ve bitiş koordinatları aynı olmayan veriden oluşturulmaya çalışılırsa hata atacaktır.

 java.lang.IllegalArgumentException: Points of LinearRing do not form a closed linestring

Örnek bir poligon üretimi şu şekildedir.

    Coordinate[] polygonCoordinates = new Coordinate[] { new Coordinate(39, 33),

     new Coordinate(46, 23), new Coordinate(40, 27), new Coordinate(39, 33)};        

    Polygon polygon = geometryFactory.createPolygon(polygonCoordinates);

 

Ayrıca içerisinde boşluk olan poligonlar da üretilebilmektedir. 


    Coordinate[] polygonCoordinates = new Coordinate[] { new Coordinate(39, 33),

    new Coordinate(46, 23), new Coordinate(40, 27), new Coordinate(39, 33)};
       
    Coordinate[] holeCoordinates = new Coordinate[] { new Coordinate(40, 34),

    new Coordinate(45, 24), new Coordinate(41, 26), new Coordinate(40, 34)};
            

    LinearRing hole = geometryFactory.createLinearRing(holeCoordinates);    

    LinearRing[] holes = new LinearRing[] { hole };
       
    LinearRing shell = geometryFactory.createLinearRing(polygonCoordinates);
       
    Polygon polygonWithHole = geometryFactory.createPolygon(shell, holes);

Polygon
Polygon

 

MultiPolygon

Birden fazla poligon nesnesi alarak oluşturulur.

    Polygon[] polygons = new Polygon[] {polygon, polygonWithHole};        

    MultiPolygon multiPolygon = geometryFactory.createMultiPolygon(polygons);

  GeometryCollection

Diğer tüm geometri tipleri içerebilecek bir koleksiyon türü görevi görmektedir. 

    Geometry[] geometries = new Geometry[] {point, multiLineString, polygon, multiPolygon};    

    GeometryCollection geometryCollection = geometryFactory.createGeometryCollection(geometries);

 Sonraki Bölümler

JTS CBS Kütüphanesi Rehberi  2 - Geometrik İlişki Hesaplamaları 

JTS CBS Kütüphanesi Rehberi 3 - Geometrik Alan Hesaplamaları   

JTS CBS Kütüphanesi Rehberi 4 - Delaunay Üçgenleme, Voronoi Diyagram, Convex Hull  

JTS CBS Kütüphanesi Rehberi 5 - Quadtree Nedir? Java'da Örnek Kullanım

 

Java'da Thread ve Semaphore Kullanımı Bayram Harçlığı Örneği

Normal Dede, SemaphoreDede, AtomicDede ve SynchronizedDede torunlarına bayram harçlığını doğru bir şekilde dağıtabilecek mi? Bayram harçlığı...