-
Notifications
You must be signed in to change notification settings - Fork 75
Polygons with 3D height
nutiteq edited this page Sep 5, 2012
·
5 revisions
Following code snippet adds one polygon with height, we call them 3D polygons. It is fine to render basic buildings boxes. Of course the photo-realistic building models you need more complex tools, if you need them - just drop an email to the email list or [email protected].
// ++ add one 3DPolygon object
// first define coordinates, convert them to suitable ArrayList
double[][] coords = {{-122.40646892021,37.785019682367},{-122.40554410462,37.784292332704},{-122.40544277466,37.784372558055},{-122.40500646292,37.784024535593},{-122.40607402081,37.783181380135},{-122.40653512604,37.783549640611},{-122.40676940667,37.783737355482},{-122.40715774837,37.783430153173},{-122.40782501696,37.783947859678}};
ArrayList<ImmutableMapPos> mapPoses = new ArrayList<ImmutableMapPos>();
for(double[] coord:coords){
mapPoses.add(mapLayer.getProjection().fromWgs84((float)coord[0],(float)coord[1]));
}
// now define style for the buildings. Usually just color
Polygon3DStyle polygon3DbuildingStyle = Polygon3DStyle.builder().setColor(Color.GREEN | 0x40ffffff).build();
// now you can make real building object. Height is here empirically found value which gives nice result.
Polygon3D building3D = new Polygon3D(mapPoses, null, 0.5f, new DefaultLabel("Westfield San Francisco Centre"), polygon3DbuildingStyle, null);
// create layer and add object to it, add layer to map
Polygon3DLayer polygon3DLayer = new Polygon3DLayer(mapLayer.getProjection());
polygon3DLayer.add(building3D);
mapView.getLayers().addLayer(polygon3DLayer);