package test.geocoder;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import com.google.code.geocoder.Geocoder;
import com.google.code.geocoder.GeocoderRequestBuilder;
import com.google.code.geocoder.model.GeocodeResponse;
import com.google.code.geocoder.model.GeocoderAddressComponent;
import com.google.code.geocoder.model.GeocoderRequest;
import com.google.code.geocoder.model.GeocoderResult;
import com.google.code.geocoder.model.GeocoderResultType;
import com.google.code.geocoder.model.GeocoderStatus;
import com.google.code.geocoder.model.LatLng;
import com.google.code.geocoder.model.LatLngBounds;
/**
* Cette classe a été créée à des fins de tests / documentation
*/
@Ignore
public class TestGeocoder {
private static Geocoder geocoder;
@BeforeClass
public static void setUp() {
geocoder = new Geocoder();
}
@Test
public void testURL() throws IOException {
//Obtenir une réponse
GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress("Lyon, France").setLanguage("fr").getGeocoderRequest();
GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
assertEquals(geocoderResponse.getStatus(), GeocoderStatus.OK);
}
@Test
public void reverseGeocoding() throws IOException {
GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setLocation(new LatLng("45.772216", "4.859242")).setLanguage("fr").getGeocoderRequest();
GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
assertNotNull(geocoderResponse);
assertEquals(GeocoderStatus.OK, geocoderResponse.getStatus());
assertFalse(geocoderResponse.getResults().isEmpty());
final GeocoderResult geocoderResult = geocoderResponse.getResults().iterator().next();
assertTrue(geocoderResult.getFormattedAddress().contains("Rue Jean Novel"));
}
@Test
public void testAccurateSearch() throws IOException {
//My Home :-)
String myHome = "237 Avenue Jean Jaurès 69007 Lyon France";
GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress(myHome)
.setRegion("fr").setLanguage("fr").getGeocoderRequest();
GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
assertFalse(geocoderResponse.getResults().isEmpty());
GeocoderResult geocoderResult = geocoderResponse.getResults().iterator().next();
LatLng location = geocoderResult.getGeometry().getLocation();
geocoderRequest = new GeocoderRequestBuilder().setLocation(location).setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertTrue(geocoderResult.getFormattedAddress().contains(myHome));
}
@Test
public void testBoundingCity() throws IOException {
LatLng limit_southwest = new LatLng("45.434616", "4.479726");
LatLng limit_northeast = new LatLng("45.53778", "4.889763");
GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress("st martin").setRegion("fr").setLanguage("fr").getGeocoderRequest();
GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
assertTrue(geocoderResponse.getResults().size() > 1 );
geocoderRequest = new GeocoderRequestBuilder().setAddress("st martin")
.setRegion("fr")
.setLanguage("fr")
.setBounds(new LatLngBounds(limit_southwest, limit_northeast)).getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
for(GeocoderResult result : geocoderResponse.getResults()) {
List<GeocoderAddressComponent> addressComponents = result.getAddressComponents();
for(GeocoderAddressComponent addressComponent : addressComponents) {
if (addressComponent.getTypes().contains(GeocoderResultType.ADMINISTRATIVE_AREA_LEVEL_1.value())) {
assertTrue(addressComponent.getLongName().equals("Rhône-Alpes"));
}
}
}
}
/*
* Gecoder API ne permet pas de rechercher des objets touristiques
*/
@Test
public void testSitraObject() throws IOException{
String obt_domaine_skiable = "Domaines skiables";
String obt_patrimoine_naturel = "Patrimoine Naturel";
String obt_fetes_manifestations = "Fêtes et Manisfestations";
GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress(obt_domaine_skiable).setRegion("fr").setLanguage("fr").getGeocoderRequest();
GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
assertEquals(geocoderResponse.getStatus(), GeocoderStatus.ZERO_RESULTS);
geocoderRequest = new GeocoderRequestBuilder().setAddress(obt_patrimoine_naturel).setRegion("fr").setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertEquals(geocoderResponse.getStatus(), GeocoderStatus.ZERO_RESULTS);
geocoderRequest = new GeocoderRequestBuilder().setAddress(obt_fetes_manifestations).setRegion("fr").setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertEquals(geocoderResponse.getStatus(), GeocoderStatus.ZERO_RESULTS);
}
/*
* Geocoder API ne permet pas de rechercher des points d'interets ormis les parcs, aéroport, réserve naturel (natural_feature)
*/
@Test
public void testTourismName() throws IOException {
String domaine_skiable = "La croix fry"; //Domaine skiable
String restaurant = "Mc Donalds";
String fete = "Fêtes des lumières";
String parc = "Parc de la tête d'or";
GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress(domaine_skiable).setRegion("fr").setLanguage("fr").getGeocoderRequest();
GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
assertFalse(geocoderResponse.getResults().iterator().next().getTypes().contains(GeocoderResultType.POINT_OF_INTEREST.value()));
geocoderRequest = new GeocoderRequestBuilder().setAddress(restaurant).setRegion("fr").setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertFalse(geocoderResponse.getResults().iterator().next().getTypes().contains(GeocoderResultType.POINT_OF_INTEREST.value()));
geocoderRequest = new GeocoderRequestBuilder().setAddress(fete).setRegion("fr").setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertEquals(geocoderResponse.getStatus(), GeocoderStatus.ZERO_RESULTS);
geocoderRequest = new GeocoderRequestBuilder().setAddress("restaurant Lyon").setRegion("fr").setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertFalse(geocoderResponse.getResults().iterator().next().getTypes().contains(GeocoderResultType.POINT_OF_INTEREST.value()));
geocoderRequest = new GeocoderRequestBuilder().setAddress(parc).setRegion("fr").setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertTrue(geocoderResponse.getResults().iterator().next().getTypes().contains(GeocoderResultType.PARK.value()));
geocoderRequest = new GeocoderRequestBuilder().setAddress("Aéroport").setRegion("fr").setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertTrue(geocoderResponse.getResults().iterator().next().getTypes().contains(GeocoderResultType.AIRPORT.value()));
geocoderRequest = new GeocoderRequestBuilder().setAddress("L'Yon, Vendée, Pays de la Loire").setRegion("fr").setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertTrue(geocoderResponse.getResults().iterator().next().getTypes().contains(GeocoderResultType.NATURAL_FEATURE.value()));
}
/*
* La recherche sur des noms de rue, avenue, etc se limite à 10
*/
@Test
public void testAutocompleteAdress() throws IOException {
String adress = "place foch";
GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress(adress).setRegion("fr").setLanguage("fr").getGeocoderRequest();
GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
assertTrue(geocoderResponse.getResults().size() == 10);
adress = "rue Victor Hugo";
geocoderRequest = new GeocoderRequestBuilder().setAddress(adress).setRegion("fr").setLanguage("fr").getGeocoderRequest();
geocoderResponse = geocoder.geocode(geocoderRequest);
assertTrue(geocoderResponse.getResults().size() == 10);
}
@Test
public void testCodePostal() throws IOException {
String codePostal = "69007";
GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress(codePostal).setRegion("fr").setLanguage("fr").getGeocoderRequest();
GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
assertTrue(geocoderResponse.getResults().size() > 0);
}
}