Previously on JTS
- JTS CBS Kütüphanesi Rehberi 1 - Geometri Modeli
- 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 |
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) |
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) |
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) |
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) |
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) |
Önceki Bölümler
- JTS CBS Kütüphanesi Rehberi 1 - Geometri Modeli
- 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
JTS CBS Kütüphanesi Rehberi 6 - Douglas Peucker Geometri Basitleştirme ve Yoğunlaştırma
0 Yorumlar