is there resource on how use indooratlas sdk?
i'm getting confused how show floorplan , getting current location.
please kindly me.
here's how:
1) initialize indooratlas instance:
indooratlas ia = indooratlasfactory.createindooratlas(context, listener, apikey, apisecret);
2) obtain instance of floorplan:
futureresult<floorplan> result = ia.fetchfloorplan(floorplanid); result.setcallback(new resultcallback<floorplan>() { @override public void onresult(final floorplan result) { mfloorplan = result; loadfloorplanimage(result); } // handle error conditions }
3) obtain actual image:
void loadfloorplanimage(floorplan floorplan) { bitmapfactory.options options = createbitmapoptions(floorplan); futureresult<bitmap> result = ia.fetchfloorplanimage(floorplan, options); result.setcallback(new resultcallback<bitmap>() { @override public void onresult(final bitmap result) { // have floor plan bitmap, updateimageviewinuithread(result); } // handle error conditions } }
4) start positioning:
ia.startpositioning(venueid, floorid, floorplanid);
5) show positions on floor plan:
public void onserviceupdate(servicestate state) { // position on original floor plan image int = state.getimagepoint().geti(); int j = state.getimagepoint().getj(); // take account how floor plan image has been scaled // , draw position pointf scaledpoint = new pointf(); util.calculatescaledpoint((int) floorplan.dimensions[0], (int) floorplan.dimensions[1], i, j, mimageview, scaledpoint); drawnewpositioninuithread(scaledpoint.x, scaledpoint.y); }
of course can start positioning first , obtain image. cache image locally said, how.
util.java:
public class utils { /** * calculates scaling factor image original dimensions of * {@code originalwidth x originalheight} being displayed {@code imageview}. * * assumption example code a) layout has been performed * {@code imageview} , {@link android.widget.imageview.scaletype#center_inside} used. * * @param originalwidth height of original bitmap displayed using {@code imageview} * @param originalheight width of original bitmap displayed using {@code imageview} */ public static float calculatescalefactor(int originalwidth, int originalheight, imageview imageview) { if (imageview.getscaletype() != imageview.scaletype.center_inside) { throw new illegalargumentexception("only scale type of center_inside supported, was: " + imageview.getscaletype()); } final int availablex = imageview.getwidth() - (imageview.getpaddingleft() + imageview.getpaddingright()); final int availabley = imageview.getheight() - (imageview.getpaddingtop() + imageview.getpaddingbottom()); if (originalwidth > availablex || originalheight > availabley) { // original image not fit without scaling return originalwidth > availablex ? availablex / (float) originalwidth : availabley / (float) originalheight; } else { return 1f; // no scaling required } } /** * calculates point draw coordinates {@code x} , {@code y} in bitmap that's * original dimensions {@code originalwidth x originalheight} , may scaled down * it's been displayed {@code imageview}. * * @param originalwidth width of original bitmap before scaling * @param originalheight height of original bitmap before scaling * @param x x-coordinate on original bitmap * @param y y-coordinate on original bitmap * @param imageview view used display bitmap * @param point point result value stored * @see #calculatescalefactor(int, int, imageview) */ public static void calculatescaledpoint(int originalwidth, int originalheight, int x, int y, imageview imageview, pointf point) { final float scale = calculatescalefactor(originalwidth, originalheight, imageview); final float scaledwidth = originalwidth * scale; final float scaledheight = originalheight * scale; // when image inside view smaller view , image centered (assumption) // there empty space around image (here offset) final float offsetx = math.max(0, (imageview.getwidth() - scaledwidth) / 2); final float offsety = math.max(0, (imageview.getheight() - scaledheight) / 2); point.x = offsetx + (x * scale); point.y = offsety + (y * scale); } }