Ticker

6/random/ticker-posts

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

JTS CBS Kütüphanesi Rehberi  6 - Douglas Peucker Geometri Basitleştirme ve Yoğunlaştırma  

 




Yorum Gönder

0 Yorumlar