-
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 for real building models you need more complex tools, if you need them - just ask in our email list.
// ++ 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);