/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
*
* 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 org.onebusaway.webapp.gwt.where_library.impl;
import org.onebusaway.geospatial.model.CoordinateBounds;
import org.onebusaway.geospatial.services.SphericalGeometryLibrary;
import org.onebusaway.transit_data.model.SearchQueryBean;
import org.onebusaway.webapp.gwt.where_library.rpc.WebappServiceAsync;
import org.onebusaway.webapp.gwt.where_library.services.CombinedSearchResult;
import org.onebusaway.webapp.gwt.where_library.services.CombinedSearchService;
import com.google.gwt.maps.client.geocode.Geocoder;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.maps.client.geom.LatLngBounds;
import com.google.gwt.search.client.AddressLookupMode;
import com.google.gwt.search.client.LocalSearch;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class CombinedSearchServiceImpl implements CombinedSearchService {
private static WebappServiceAsync _service = WebappServiceAsync.SERVICE;
@Override
public void search(SearchQueryBean query, int placeTimeoutMillis,
AsyncCallback<CombinedSearchResult> callback) {
LatLngBounds originalBounds = getBounds(query.getBounds());
System.out.println(query.getBounds());
System.out.println(originalBounds);
LatLngBounds smallerBounds = null;
if (originalBounds != null) {
LatLng center = originalBounds.getCenter();
CoordinateBounds cb2 = SphericalGeometryLibrary.bounds(
center.getLatitude(), center.getLongitude(), 4000);
smallerBounds = getBounds(cb2);
System.out.println(cb2);
System.out.println(smallerBounds);
}
CombinedSearchHandlerImpl handler = new CombinedSearchHandlerImpl(
originalBounds, placeTimeoutMillis, callback);
// Start the route and stop search
_service.getRoutesAndStops(query, handler);
// Google Maps Geocoder Search
Geocoder geocoder = new Geocoder();
if (smallerBounds != null)
geocoder.setViewport(smallerBounds);
geocoder.getLocations(query.getQuery(), handler);
// Google Local Search
LocalSearch search = new LocalSearch();
search.setAddressLookupMode(AddressLookupMode.ENABLED);
if (!smallerBounds.isEmpty())
search.setCenterPoint(smallerBounds.getCenter());
search.addSearchCompleteHandler(handler);
search.execute(query.getQuery());
}
private LatLngBounds getBounds(CoordinateBounds bounds) {
LatLngBounds b = LatLngBounds.newInstance();
if (bounds != null) {
b.extend(LatLng.newInstance(bounds.getMinLat(), bounds.getMinLon()));
b.extend(LatLng.newInstance(bounds.getMaxLat(), bounds.getMaxLon()));
}
return b;
}
}