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

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

/*
* Copyright 2008 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.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.maps.client.InfoWindow;
import com.google.gwt.maps.client.InfoWindowContent;
import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.geocode.Geocoder;
import com.google.gwt.maps.client.geocode.LatLngCallback;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.maps.client.overlay.Marker;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitHandler;

/**
* You can access the Google Maps API geocoder via the GClientGeocoder object.
* Use the GClientGeocoder.getLatLng() method to convert a string address into a
* GLatLng. Because geocoding involves sending a request to Google's servers, it
* can take some time. To avoid making your script wait, you should pass in a
* callback function to execute after the response returns.
*
* In this example, we geocode an address, add a marker at that point, and open
* an info window displaying the address.
*/
public class GeocoderDemo extends MapsDemo {

  private static final LatLng ATLANTA = LatLng.newInstance(33.7814790, -84.3880580);

  private static HTML descHTML = null;
  private static final String descString = "<p>Creates a 500 x 300 pixel map "
    + "viewport centered on Atlanta, GA USA.</p>"
      + "<p>Type an address in the textbox.  Clicking the 'Go' button will"
      + "contact the Google Geocoding service, display the resulting "
      + "Lat/Lng coordinates, and re-position the map with those coordinates"
      + "in the center </p>\n"
      + "<p>Equivalent to the Maps JavaScript API Example: "
      + "<a href=\"http://code.google.com/apis/maps/documentation/examples/geocoding-simple.html\">"
      + "http://code.google.com/apis/maps/documentation/examples/geocoding-simple.html</a></p>\n";

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

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

      @Override
      public String getName() {
        return "Geocoding: Simple";
      }
    };
  }

  private Geocoder geocoder;
  private Label latLabel;
  private Label lngLabel;

  private MapWidget map;

  public GeocoderDemo() {
    Panel panel = new FlowPanel();
    final FormPanel form = new FormPanel();
    form.setAction("#");

    Panel formElements = new FlowPanel();
    final TextBox address = new TextBox();
    address.setVisibleLength(60);
    address.setText("10 10th Street, Atlanta, GA");
    formElements.add(address);
    formElements.add(buildLatLngPanel());
    this.displayLatLng(ATLANTA);

    Button submit = new Button("Go!");
    submit.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        form.submit();
      }
    });
    formElements.add(submit);
    form.add(formElements);
    form.addSubmitHandler(new SubmitHandler() {
      public void onSubmit(SubmitEvent event) {
        showAddress(address.getText());
        event.cancel();
      }
    });
    panel.add(form);

    map = new MapWidget(ATLANTA, 13);
    map.setSize("500px", "300px");
    panel.add(map);
    initWidget(panel);
    geocoder = new Geocoder();
  }

  /*
   * Build a horizontal panel to display latitude and longitude returned from
   * the geocoding service.
   *
   * Broke this function out to make the constructor more readable.
   */
  private Panel buildLatLngPanel() {
    HorizontalPanel horiz = new HorizontalPanel();
    horiz.add(new Label("Lat:"));
    latLabel = new Label();
    horiz.add(latLabel);
    horiz.add(new Label("Long:"));
    lngLabel = new Label();
    horiz.add(lngLabel);
    horiz.setSpacing(10);
    return horiz;
  }

  private void displayLatLng(LatLng point) {
    NumberFormat fmt = NumberFormat.getFormat("#.0000000#");
    latLabel.setText(fmt.format(point.getLatitude()));
    lngLabel.setText(fmt.format(point.getLongitude()));
  }

  private void showAddress(final String address) {
    final InfoWindow info = map.getInfoWindow();
    geocoder.getLatLng(address, new LatLngCallback() {
      public void onFailure() {
        Window.alert(address + " not found");
      }

      public void onSuccess(LatLng point) {
        map.setCenter(point, 13);
        Marker marker = new Marker(point);
        map.addOverlay(marker);
        info.open(marker, new InfoWindowContent(address));
        displayLatLng(point);
      }
    });
  }
}
TOP

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

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.