GeoJSON, çeşitli coğrafik şekilleri tanımlamaya yarayan JSON tabanlı bir standarttır. Standardı detaylı incelediğimizde, tanımlı şekiller arasında dairenin bulunmadığını görüyoruz. Peki, dairesel çizim ihtiyacını nasıl karşılayabiliriz?
Bu yazımızda, yeni geliştirdiğimiz ultimate-geojson java kütüphanesini kullanarak nasıl dairesel çizim elde edilebileceği konusu üzerinde duracağız.
Biraz Matematik
Bir düzlemde bir noktaya eşit uzaklıktaki sonsuz noktalar kümesine çember diyoruz. Bu çemberin içinde kalan alana da daire diyoruz. Sonsuz noktayı hesaplamak ve tutmak şu anki teknolojide pek mümkün olmadığından, çember üzerinde kabul edilebilir çoklukta nokta bularak mükemmel olmasa da dairesel çizimler elde etmek mümkün olmaktadır.
İhtiyacımız olan, merkez noktası olarak aldığımız bir koordinatın, belirli bir yarıçap mesafe uzaklıktaki noktasının koordinatını bulmak. Bunu 360 farklı açı için tekrarlarsak, bulduğumuz 360 nokta ile bir daire temsil eder hale gelebiliriz.
Dünya yüzeyi düz olmadığından alışılageldik trigonometrik hesaplamalar, merkez noktaya yarıçap kadar uzaklıktaki koordinatları bulmakta yetersiz kalmaktadır. Bunun için kütüphanemizde şuradaki dünyanın küreselliğini dikkate alan formülü kullandık.
Pasta Dilimini Nasıl Yapacağız?
Taramak istediğimiz açı aralığını belirledikten sonra, sadece o aralıkta kalan noktaları bularak, yay çizimini elde edebiliriz.
Show me the code!
ultimate-geojson kütüphanesi kullanarak, hesaplamalara elinizi bulaştırmadan dairesel çizim elde edebilirsiniz.
CircularDrawingAlgorithmImpl circleDrawer = new CircularDrawingAlgorithmImpl();
List<PositionDto> circlePoints = circleDrawer.getCirclePositions(new PositionDto(35,38), 10000.0);
UltimateGeoJSONFactory factory = new UltimateGeoJSONFactory();
PolygonDto circleAsPolygon = factory.createPolygon(circlePoints);
String geoJSON = UltimateGeoJSONBuilder.getInstance().toGeoJSON(circleAsPolygon);
Yay çizimi de benzer bir şekilde, fakat yayın başlangıç ve bitiş açıları verilmek suretiyle çizilebilmektedir.
CircularDrawingAlgorithmImpl circleDrawer = new CircularDrawingAlgorithmImpl();
PositionDto center = new PositionDto(35,38);
List<PositionDto> arcPositions = circleDrawer.getArcPositions(center, 10000, 0, 45);
UltimateGeoJSONFactory factory = new UltimateGeoJSONFactory();
PolygonDto polygon = factory.createPolygon(arcPositions);
String geoJSON = UltimateGeoJSONBuilder.getInstance().toGeoJSON(polygon);
DEMO
0 Yorumlar