package com.gisgraphy.reversegeocoding; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; import org.junit.Assert; import org.junit.Test; import com.gisgraphy.addressparser.Address; import com.gisgraphy.addressparser.commons.GeocodingLevels; import com.gisgraphy.addressparser.format.BasicAddressFormater; import com.gisgraphy.addressparser.format.DisplayMode; import com.gisgraphy.domain.geoloc.entity.City; import com.gisgraphy.domain.geoloc.entity.HouseNumber; import com.gisgraphy.domain.geoloc.entity.OpenStreetMap; import com.gisgraphy.domain.geoloc.entity.ZipCode; import com.gisgraphy.helper.GeolocHelper; import com.gisgraphy.importer.LabelGenerator; import com.gisgraphy.test.GisgraphyTestHelper; import com.vividsolutions.jts.geom.Point; public class AddressHelperTest { AddressHelper addressHelper = new AddressHelper(); BasicAddressFormater formater = BasicAddressFormater.getInstance(); LabelGenerator generator = LabelGenerator.getInstance(); @Test public void getNearestHouse_WrongParameter() { Assert.assertNull(addressHelper.getNearestHouse(new TreeSet<HouseNumber>(), null)); Assert.assertNull(addressHelper.getNearestHouse(null, GeolocHelper.createPoint(3D, 4D))); Assert.assertNull(addressHelper.getNearestHouse(new TreeSet<HouseNumber>(), GeolocHelper.createPoint(3D, 4D))); } @Test public void getNearestHouse_OneHouse() { TreeSet<HouseNumber> houses = new TreeSet<HouseNumber>(); Point houseLocation = GeolocHelper.createPoint(3D, 4D); HouseNumber house = new HouseNumber("1",houseLocation); houses.add(house); Point searchPoint = GeolocHelper.createPoint(6D, 7D); HouseNumberDistance nearestHouse = addressHelper.getNearestHouse(houses, searchPoint); Assert.assertEquals(new HouseNumberDistance(house, GeolocHelper.distance(searchPoint, houseLocation)),nearestHouse); } @Test public void getNearestHouse_SeveralHouse() { TreeSet<HouseNumber> houses = new TreeSet<HouseNumber>(); Point houseLocation = GeolocHelper.createPoint(4D, 5D); HouseNumber house_far = new HouseNumber("far",houseLocation); Point houseLocation2 = GeolocHelper.createPoint(3.1D, 4.1D); HouseNumber house2_near = new HouseNumber("near",houseLocation2); houses.add(house_far); houses.add(house2_near); Point searchPoint = GeolocHelper.createPoint(3D, 4D); HouseNumberDistance nearestHouse = addressHelper.getNearestHouse(houses, searchPoint); Assert.assertEquals(new HouseNumberDistance(house2_near, GeolocHelper.distance(searchPoint, houseLocation2)),nearestHouse); } @Test public void buildAddressFromOpenstreetMap_NullOpenstreetmap(){ Assert.assertNull(addressHelper.buildAddressFromOpenstreetMap(null)); } @Test public void buildAddressFromOpenstreetMap(){ OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet(); osm.setAdm1Name("adm1Name"); osm.setAdm2Name("adm2Name"); osm.setAdm3Name("adm3Name"); osm.setAdm4Name("adm4Name"); osm.setAdm5Name("adm5Name"); osm.setZipCode("zipCodeSet"); osm.setCountryCode("US"); Address address = addressHelper.buildAddressFromOpenstreetMap(osm); Assert.assertEquals(osm.getName(), address.getStreetName()); Assert.assertEquals(osm.getIsIn(), address.getCity()); Assert.assertEquals(osm.getIsInPlace(), address.getCitySubdivision()); Assert.assertEquals(osm.getIsInAdm(), address.getState()); Assert.assertEquals(osm.getAdm1Name(), address.getAdm1Name()); Assert.assertEquals(osm.getAdm2Name(), address.getAdm2Name()); Assert.assertEquals(osm.getAdm3Name(), address.getAdm3Name()); Assert.assertEquals(osm.getAdm4Name(), address.getAdm4Name()); Assert.assertEquals(osm.getAdm5Name(), address.getAdm5Name()); Assert.assertEquals("When there is a zipcode, we take it","zipCodeSet", address.getZipCode()); Assert.assertEquals(osm.getCountryCode(), address.getCountryCode()); Assert.assertEquals(osm.getLatitude(), address.getLat()); Assert.assertEquals(osm.getLongitude(), address.getLng()); Assert.assertEquals(generator.getFullyQualifiedName(address), address.getFormatedFull()); Assert.assertNotNull(address.getFormatedPostal()); Assert.assertEquals(formater.getEnvelopeAddress(address, DisplayMode.COMMA), address.getFormatedPostal()); Assert.assertEquals(GeocodingLevels.STREET, address.getGeocodingLevel()); Assert.assertEquals(osm.isToll(), address.isToll()); Assert.assertEquals(osm.getSurface(), address.getSurface()); Assert.assertEquals(osm.getLanes(), address.getLanes()); Assert.assertEquals(osm.getSpeedMode()+"", address.getSpeedMode()); Assert.assertEquals(osm.getAzimuthStart(), address.getAzimuthStart()); Assert.assertEquals(osm.getAzimuthEnd(), address.getAzimuthEnd()); Assert.assertEquals(osm.getMaxSpeed(), address.getMaxSpeed()); Assert.assertEquals(osm.getMaxSpeedBackward(), address.getMaxSpeedBackward()); Assert.assertEquals(osm.isOneWay(), address.isOneWay()); Assert.assertEquals(osm.getStreetType().toString(), address.getStreetType()); Assert.assertEquals(osm.getLength(), address.getLength()); Assert.assertEquals(osm.getMaxSpeedBackward(), address.getMaxSpeedBackward()); } @Test public void buildAddressFromOpenstreetMap_severalZip(){ OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet(); osm.setAdm1Name("adm1Name"); osm.setAdm2Name("adm2Name"); osm.setAdm3Name("adm3Name"); osm.setAdm4Name("adm4Name"); osm.setAdm5Name("adm5Name"); osm.setCountryCode("US"); osm.setZipCode(null); Assert.assertTrue("the zipcodes should be filled for this set, please fix the dataset",osm.getIsInZip().size()>0); Address address = addressHelper.buildAddressFromOpenstreetMap(osm); Assert.assertEquals(osm.getName(), address.getStreetName()); Assert.assertEquals(osm.getIsIn(), address.getCity()); Assert.assertEquals(osm.getIsInPlace(), address.getCitySubdivision()); Assert.assertEquals(osm.getIsInAdm(), address.getState()); Assert.assertEquals(osm.getAdm1Name(), address.getAdm1Name()); Assert.assertEquals(osm.getAdm2Name(), address.getAdm2Name()); Assert.assertEquals(osm.getAdm3Name(), address.getAdm3Name()); Assert.assertEquals(osm.getAdm4Name(), address.getAdm4Name()); Assert.assertEquals(osm.getAdm5Name(), address.getAdm5Name()); Assert.assertEquals("When there is more than one zipcode, we take the best one except if already fill",generator.getBestZipString(osm.getIsInZip()), address.getZipCode()); Assert.assertEquals(osm.getCountryCode(), address.getCountryCode()); Assert.assertEquals(osm.getLatitude(), address.getLat()); Assert.assertEquals(osm.getLongitude(), address.getLng()); Assert.assertEquals(generator.getFullyQualifiedName(address), address.getFormatedFull()); Assert.assertNotNull(address.getFormatedPostal()); Assert.assertEquals(formater.getEnvelopeAddress(address, DisplayMode.COMMA), address.getFormatedPostal()); Assert.assertEquals(GeocodingLevels.STREET, address.getGeocodingLevel()); Assert.assertEquals(osm.isToll(), address.isToll()); Assert.assertEquals(osm.getSurface(), address.getSurface()); Assert.assertEquals(osm.getLanes(), address.getLanes()); Assert.assertEquals(osm.getSpeedMode()+"", address.getSpeedMode()); Assert.assertEquals(osm.getAzimuthStart(), address.getAzimuthStart()); Assert.assertEquals(osm.getAzimuthEnd(), address.getAzimuthEnd()); Assert.assertEquals(osm.getMaxSpeed(), address.getMaxSpeed()); Assert.assertEquals(osm.getMaxSpeedBackward(), address.getMaxSpeedBackward()); Assert.assertEquals(osm.isOneWay(), address.isOneWay()); Assert.assertEquals(osm.getStreetType().toString(), address.getStreetType()); Assert.assertEquals(osm.getLength(), address.getLength()); Assert.assertEquals(osm.getMaxSpeedBackward(), address.getMaxSpeedBackward()); } @Test public void buildAddressFromOpenstreetMap_severalZip_zip_already_filled(){ OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet(); osm.setAdm1Name("adm1Name"); osm.setAdm2Name("adm2Name"); osm.setAdm3Name("adm3Name"); osm.setAdm4Name("adm4Name"); osm.setAdm5Name("adm5Name"); osm.setCountryCode("US"); Assert.assertTrue("the zipcodes should be filled for this set, please fix the dataset",osm.getIsInZip().size()>0); Address address = addressHelper.buildAddressFromOpenstreetMap(osm); Assert.assertEquals(osm.getName(), address.getStreetName()); Assert.assertEquals(osm.getIsIn(), address.getCity()); Assert.assertEquals(osm.getIsInPlace(), address.getCitySubdivision()); Assert.assertEquals(osm.getIsInAdm(), address.getState()); Assert.assertEquals(osm.getAdm1Name(), address.getAdm1Name()); Assert.assertEquals(osm.getAdm2Name(), address.getAdm2Name()); Assert.assertEquals(osm.getAdm3Name(), address.getAdm3Name()); Assert.assertEquals(osm.getAdm4Name(), address.getAdm4Name()); Assert.assertEquals(osm.getAdm5Name(), address.getAdm5Name()); Assert.assertEquals("When there is more than one zipcode, we take the best one except if already fill",osm.getZipCode(), address.getZipCode()); Assert.assertEquals(osm.getCountryCode(), address.getCountryCode()); Assert.assertEquals(osm.getLatitude(), address.getLat()); Assert.assertEquals(osm.getLongitude(), address.getLng()); Assert.assertEquals(generator.getFullyQualifiedName(address), address.getFormatedFull()); Assert.assertNotNull(address.getFormatedPostal()); Assert.assertEquals(formater.getEnvelopeAddress(address, DisplayMode.COMMA), address.getFormatedPostal()); Assert.assertEquals(GeocodingLevels.STREET, address.getGeocodingLevel()); Assert.assertEquals(osm.isToll(), address.isToll()); Assert.assertEquals(osm.getSurface(), address.getSurface()); Assert.assertEquals(osm.getLanes(), address.getLanes()); Assert.assertEquals(osm.getSpeedMode()+"", address.getSpeedMode()); Assert.assertEquals(osm.getAzimuthStart(), address.getAzimuthStart()); Assert.assertEquals(osm.getAzimuthEnd(), address.getAzimuthEnd()); Assert.assertEquals(osm.getMaxSpeed(), address.getMaxSpeed()); Assert.assertEquals(osm.getMaxSpeedBackward(), address.getMaxSpeedBackward()); Assert.assertEquals(osm.isOneWay(), address.isOneWay()); Assert.assertEquals(osm.getStreetType().toString(), address.getStreetType()); Assert.assertEquals(osm.getLength(), address.getLength()); Assert.assertEquals(osm.getMaxSpeedBackward(), address.getMaxSpeedBackward()); } @Test public void buildAddressFromOpenstreetMapAndPoint(){ OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet(); Point point = GeolocHelper.createPoint(2D, 3D); Address address = addressHelper.buildAddressFromOpenstreetMapAndPoint(osm,point); Assert.assertEquals(osm.getName(), address.getStreetName()); Assert.assertEquals(osm.getIsIn(), address.getCity()); Assert.assertEquals(osm.getIsInPlace(), address.getCitySubdivision()); Assert.assertEquals(osm.getIsInAdm(), address.getState()); Assert.assertEquals(osm.getZipCode(), address.getZipCode()); Assert.assertEquals(osm.getCountryCode(), address.getCountryCode()); Assert.assertEquals(osm.getLatitude(), address.getLat()); Assert.assertEquals(osm.getLongitude(), address.getLng()); Assert.assertEquals(GeocodingLevels.STREET, address.getGeocodingLevel()); Assert.assertEquals(osm.isToll(), address.isToll()); Assert.assertEquals(osm.getSurface(), address.getSurface()); Assert.assertEquals(osm.getLanes(), address.getLanes()); Assert.assertEquals(osm.getSpeedMode()+"", address.getSpeedMode()); Assert.assertEquals(osm.getAzimuthStart(), address.getAzimuthStart()); Assert.assertEquals(osm.getAzimuthEnd(), address.getAzimuthEnd()); Assert.assertEquals(osm.getMaxSpeed(), address.getMaxSpeed()); Assert.assertEquals(osm.getMaxSpeedBackward(), address.getMaxSpeedBackward()); Assert.assertEquals(generator.getFullyQualifiedName(address), address.getFormatedFull()); Assert.assertEquals(formater.getEnvelopeAddress(address, DisplayMode.COMMA),address.getFormatedPostal()); // Assert.assertEquals(GeolocHelper.distance(point, osm.getLocation()), address.getDistance().doubleValue(),0.01); } @Test public void buildAddressFromHousenumberDistance(){ OpenStreetMap osm = GisgraphyTestHelper.createOpenStreetMapForJohnKenedyStreet(); String number = "2"; HouseNumber houseNumber = new HouseNumber(number,GeolocHelper.createPoint(3D, 4D)); String name = "houseName"; houseNumber.setName(name); osm.addHouseNumber(houseNumber); Double distance =55D; HouseNumberDistance houseNumberDistance = new HouseNumberDistance(houseNumber, distance ); Address address = addressHelper.buildAddressFromHouseNumberDistance(houseNumberDistance); Assert.assertEquals(osm.getName(), address.getStreetName()); Assert.assertEquals(osm.getIsIn(), address.getCity()); Assert.assertEquals(osm.getIsInPlace(), address.getCitySubdivision()); Assert.assertEquals(osm.getIsInAdm(), address.getState()); Assert.assertEquals(osm.getZipCode(), address.getZipCode()); Assert.assertEquals(osm.getCountryCode(), address.getCountryCode()); Assert.assertEquals(houseNumber.getLatitude(),address.getLat()); Assert.assertEquals(houseNumber.getLongitude(), address.getLng()); Assert.assertEquals(GeocodingLevels.HOUSE_NUMBER, address.getGeocodingLevel()); Assert.assertTrue(address.getFormatedFull().contains("2 ")); // Assert.assertEquals(distance, address.getDistance().doubleValue(),0.01); Assert.assertEquals(name, address.getName()); Assert.assertEquals(number, address.getHouseNumber()); Assert.assertEquals(generator.getFullyQualifiedName(address), address.getFormatedFull()); Assert.assertEquals(formater.getEnvelopeAddress(address, DisplayMode.COMMA),address.getFormatedPostal()); Assert.assertTrue(address.getFormatedFull().contains(number)); Assert.assertTrue(address.getFormatedPostal().contains(number)); Assert.assertEquals(osm.isToll(), address.isToll()); Assert.assertEquals(osm.getSurface(), address.getSurface()); Assert.assertEquals(osm.getLanes(), address.getLanes()); Assert.assertEquals(osm.getSpeedMode()+"", address.getSpeedMode()); Assert.assertEquals(osm.getAzimuthStart(), address.getAzimuthStart()); Assert.assertEquals(osm.getAzimuthEnd(), address.getAzimuthEnd()); Assert.assertEquals(osm.getMaxSpeed(), address.getMaxSpeed()); Assert.assertEquals(osm.getMaxSpeedBackward(), address.getMaxSpeedBackward()); } @Test public void buildAddressFromcity(){ City city = new City(); city.setName("name"); city.setIsInAdm("isInAdm"); city.setAdm1Name("adm1Name"); city.setAdm2Name("adm2Name"); city.setAdm3Name("adm3Name"); city.setAdm4Name("adm4Name"); city.setAdm5Name("adm5Name"); city.setIsInAdm("isInAdm"); Set<ZipCode> zipcodes = new HashSet<ZipCode>(); zipcodes.add(new ZipCode("zip")); city.setZipCodes(zipcodes); city.setLocation(GeolocHelper.createPoint(2D, 3D)); city.setCountryCode("countryCode"); Address address = addressHelper.buildAddressFromcity(city); Assert.assertEquals(city.getName(), address.getCity()); Assert.assertEquals(city.getIsInAdm(), address.getState()); Assert.assertEquals(city.getAdm1Name(), address.getAdm1Name()); Assert.assertEquals(city.getAdm2Name(), address.getAdm2Name()); Assert.assertEquals(city.getAdm3Name(), address.getAdm3Name()); Assert.assertEquals(city.getAdm4Name(), address.getAdm4Name()); Assert.assertEquals(city.getAdm5Name(), address.getAdm5Name()); Assert.assertEquals(city.getZipCodes().iterator().next().toString(), address.getZipCode()); Assert.assertEquals(city.getCountryCode(), address.getCountryCode()); Assert.assertEquals(GeocodingLevels.CITY, address.getGeocodingLevel()); Assert.assertEquals(city.getLatitude(), address.getLat()); Assert.assertEquals(city.getLongitude(), address.getLng()); Assert.assertEquals(generator.getFullyQualifiedName(address), address.getFormatedFull()); Assert.assertEquals(formater.getEnvelopeAddress(address, DisplayMode.COMMA),address.getFormatedPostal()); } @Test public void buildAddressFromCityAndPoint(){ City city = new City(); city.setName("name"); city.setIsInAdm("isInAdm"); city.setAdm1Name("adm1Name"); city.setAdm2Name("adm2Name"); city.setAdm3Name("adm3Name"); city.setAdm4Name("adm4Name"); city.setAdm5Name("adm5Name"); city.setIsInAdm("isInAdm"); Set<ZipCode> zipcodes = new HashSet<ZipCode>(); zipcodes.add(new ZipCode("zip")); city.setZipCodes(zipcodes); city.setLocation(GeolocHelper.createPoint(2D, 3D)); city.setCountryCode("countryCode"); Point point = GeolocHelper.createPoint(5D, 4D); Address address = addressHelper.buildAddressFromCityAndPoint(city,point); Assert.assertEquals(city.getName(), address.getCity()); Assert.assertEquals(city.getIsInAdm(), address.getState()); Assert.assertEquals(city.getAdm1Name(), address.getAdm1Name()); Assert.assertEquals(city.getAdm2Name(), address.getAdm2Name()); Assert.assertEquals(city.getAdm3Name(), address.getAdm3Name()); Assert.assertEquals(city.getAdm4Name(), address.getAdm4Name()); Assert.assertEquals(city.getAdm5Name(), address.getAdm5Name()); Assert.assertEquals(city.getZipCodes().iterator().next().toString(), address.getZipCode()); Assert.assertEquals(city.getCountryCode(), address.getCountryCode()); Assert.assertEquals(GeocodingLevels.CITY, address.getGeocodingLevel()); Assert.assertEquals(city.getLatitude(), address.getLat()); Assert.assertEquals(city.getLongitude(), address.getLng()); Assert.assertEquals(generator.getFullyQualifiedName(address), address.getFormatedFull()); Assert.assertEquals(formater.getEnvelopeAddress(address, DisplayMode.COMMA),address.getFormatedPostal()); Assert.assertEquals(GeolocHelper.distance(point, city.getLocation()), address.getDistance().doubleValue(),0.0001); } }