Ticker

6/random/ticker-posts

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

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

 



Yorum Gönder

0 Yorumlar

Ad Code