Package com.google.gwt.maps.sample.hellomaps.client

Source Code of com.google.gwt.maps.sample.hellomaps.client.StreetviewDemo

/*
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.maps.sample.hellomaps.client;

import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.event.StreetviewInitializedHandler;
import com.google.gwt.maps.client.event.MapClickHandler;
import com.google.gwt.maps.client.event.StreetviewPitchChangedHandler;
import com.google.gwt.maps.client.event.StreetviewYawChangedHandler;
import com.google.gwt.maps.client.event.StreetviewZoomChangedHandler;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.maps.client.overlay.Polygon;
import com.google.gwt.maps.client.streetview.LatLngStreetviewCallback;
import com.google.gwt.maps.client.streetview.StreetviewPanoramaOptions;
import com.google.gwt.maps.client.streetview.StreetviewPanoramaWidget;
import com.google.gwt.maps.client.streetview.Pov;
import com.google.gwt.maps.client.streetview.StreetviewClient;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
* This demo shows how to construct a {@link StreetviewPanoramaWidget}, handle
* Street View events and perform a panorama lookups.
*/
public class StreetviewDemo extends MapsDemo {
  private static HTML descHTML = null;
  private static final String descString = "<p>Creates a Street View Panorama "
      + "and a Map to demonstrate dispatching event between these two objects.</p>"
      + "<p>Expect to see a polygon object that represents you Street View point of"
      + " view on a map. Click on a map to change your location in Street View.</p>";

  public static MapsDemoInfo init() {
    return new MapsDemoInfo() {
      @Override
      public MapsDemo createInstance() {
        return new StreetviewDemo();
      }

      @Override
      public HTML getDescriptionHTML() {
        if (descHTML == null) {
          descHTML = new HTML(descString);
        }
        return descHTML;
      }

      @Override
      public String getName() {
        return "Streetview Test";
      }
    };
  }

  private final VerticalPanel panel;
  private final MapWidget map;
  private final StreetviewPanoramaWidget panorama;
  private final StreetviewClient svClient;
  private final LatLng tenthStreet = LatLng.newInstance(33.78148, -84.38713);

  private LatLng currentLatLng = tenthStreet;
  private Pov currentPov = Pov.newInstance();
  private Polygon viewPolygon;

  public StreetviewDemo() {
    StreetviewPanoramaOptions options = StreetviewPanoramaOptions.newInstance();
    options.setLatLng(tenthStreet);
    svClient = new StreetviewClient();
    panorama = new StreetviewPanoramaWidget(options);
    panorama.setSize("500px", "300px");

    map = new MapWidget(tenthStreet, 16);
    map.setSize("500px", "300px");
    map.addMapClickHandler(new MapClickHandler() {
      public void onClick(MapClickEvent event) {
        LatLng point = event.getLatLng() == null ? event.getOverlayLatLng()
            : event.getLatLng();
        if (point != null) {
          svClient.getNearestPanoramaLatLng(point,
              new LatLngStreetviewCallback() {
                @Override
                public void onFailure() {
                }

                @Override
                public void onSuccess(LatLng point) {
                  panorama.setLocationAndPov(point, Pov.newInstance());
                }
              });
        }
      }
    });

    panorama.addInitializedHandler(new StreetviewInitializedHandler() {
      public void onInitialized(StreetviewInitializedEvent event) {
        currentLatLng = event.getLocation().getLatLng();
        currentPov = event.getLocation().getPov();
        map.setCenter(currentLatLng);
        updatePolyline();
      }
    });

    panorama.addPitchChangedHandler(new StreetviewPitchChangedHandler() {
      public void onPitchChanged(StreetviewPitchChangedEvent event) {
        currentPov.setPitch(event.getPitch());
        updatePolyline();
      }
    });

    panorama.addYawChangedHandler(new StreetviewYawChangedHandler() {
      public void onYawChanged(StreetviewYawChangedEvent event) {
        currentPov.setYaw(event.getYaw());
        updatePolyline();
      }
    });

    panorama.addZoomChangedHandler(new StreetviewZoomChangedHandler() {
      public void onZoomChanged(StreetviewZoomChangedEvent event) {
        currentPov.setZoom(event.getZoom());
        updatePolyline();
      }
    });

    panel = new VerticalPanel();
    panel.add(panorama);
    panel.add(map);
    initWidget(panel);
  }

  private void updatePolyline() {
    if (viewPolygon != null) {
      map.removeOverlay(viewPolygon);
    }

    // Some simple math to calculate viewPolygon

    double yaw = currentPov.getYaw();
    double distanceFactor = Math.cos(Math.toRadians(currentPov.getPitch())) * 0.0015 + 0.0005;
    double zoomFactor = currentPov.getZoom() * 0.7 + 1;

    LatLng[] points = new LatLng[11];
    points[0] = points[10] = currentLatLng;
    for (int i = 1; i < 10; i++) {
      double angle = Math.toRadians(yaw + (i - 5) * 7d / zoomFactor);
      points[i] = LatLng.newInstance(currentLatLng.getLatitude()
          + Math.cos(angle) * distanceFactor, currentLatLng.getLongitude()
          + Math.sin(angle) * distanceFactor);
    }

    viewPolygon = new Polygon(points, "blue", 1, 0.5, "blue", 0.15);
    map.addOverlay(viewPolygon);
  }
}
TOP

Related Classes of com.google.gwt.maps.sample.hellomaps.client.StreetviewDemo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.