Author: stianh
Date: 2007-05-11 13:47:39 +0200 (Fri, 11 May 2007)
New Revision: 5062
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
trunk/core-api/src/main/java/no/schibstedsok/searchportal/util/GeoSearchUtil.java
Log:
SEARCH-225 Added calculated value for search restriction in selected area of
map.
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
===================================================================
---
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
2007-05-11 09:55:05 UTC (rev 5061)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/AddressSearchCommand.java
2007-05-11 11:47:39 UTC (rev 5062)
@@ -77,11 +77,9 @@
final String center = GeoSearchUtil.getCenter(pdo);
LOG.debug("center : " + center);
- //TODO: calculate this.
- final String restrictRadius = "50";
params.setParameter(new SearchParameter("qtf_geosearch:unit",
GeoSearchUtil.RADIUS_MEASURE_UNIT_TYPE));
- params.setParameter(new SearchParameter("qtf_geosearch:radius",
restrictRadius));
+ params.setParameter(new SearchParameter("qtf_geosearch:radius",
GeoSearchUtil.getRadiusRestriction(pdo)));
params.setParameter(new SearchParameter("qtf_geosearch:center",
center));
}
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
===================================================================
---
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
2007-05-11 09:55:05 UTC (rev 5061)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/CatalogueSearchCommand.java
2007-05-11 11:47:39 UTC (rev 5062)
@@ -141,10 +141,9 @@
final String center = GeoSearchUtil.getCenter(pdo);
LOG.debug("center : " + center);
-
- final String restrictRadius = "10";
+
params.setParameter(new SearchParameter("qtf_geosearch:unit",
GeoSearchUtil.RADIUS_MEASURE_UNIT_TYPE));
- params.setParameter(new SearchParameter("qtf_geosearch:radius",
restrictRadius));
+ params.setParameter(new SearchParameter("qtf_geosearch:radius",
GeoSearchUtil.getRadiusRestriction(pdo)));
params.setParameter(new SearchParameter("qtf_geosearch:center",
center));
}
/**
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
===================================================================
---
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
2007-05-11 09:55:05 UTC (rev 5061)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/mode/command/WhiteSearchCommand.java
2007-05-11 11:47:39 UTC (rev 5062)
@@ -113,10 +113,9 @@
}
final String center = GeoSearchUtil.getCenter(pdo);
-
- final String restrictRadius = "50";
+
params.setParameter(new SearchParameter("qtf_geosearch:unit",
GeoSearchUtil.RADIUS_MEASURE_UNIT_TYPE));
- params.setParameter(new SearchParameter("qtf_geosearch:radius",
restrictRadius));
+ params.setParameter(new SearchParameter("qtf_geosearch:radius",
GeoSearchUtil.getRadiusRestriction(pdo)));
params.setParameter(new SearchParameter("qtf_geosearch:center",
center));
}
Modified:
trunk/core-api/src/main/java/no/schibstedsok/searchportal/util/GeoSearchUtil.java
===================================================================
---
trunk/core-api/src/main/java/no/schibstedsok/searchportal/util/GeoSearchUtil.java
2007-05-11 09:55:05 UTC (rev 5061)
+++
trunk/core-api/src/main/java/no/schibstedsok/searchportal/util/GeoSearchUtil.java
2007-05-11 11:47:39 UTC (rev 5062)
@@ -1,17 +1,18 @@
/*
* $Id:$
*/
+
package no.schibstedsok.searchportal.util;
import javax.measure.units.SI;
-
import no.schibstedsok.searchportal.datamodel.request.ParametersDataObject;
import org.apache.log4j.Logger;
import org.jscience.geography.coordinates.LatLong;
import org.jscience.geography.coordinates.UTM;
import org.jscience.geography.coordinates.crs.ReferenceEllipsoid;
+
/**
* Utility class for GEO search.
*
@@ -20,47 +21,52 @@
* @version $Revision:$
*/
public class GeoSearchUtil {
-
+
/** Logger for this class. */
private static final Logger LOG = Logger.getLogger(GeoSearchUtil.class);
-
+
/** Constants for selected map rectangel. */
private static final String MIN_X = "minX";
+
private static final String MAX_X = "maxX";
+
private static final String MIN_Y = "minY";
+
private static final String MAX_Y = "maxY";
-
+
/** Measure unit to use. */
public static final String RADIUS_MEASURE_UNIT_TYPE = "km";
-
+
/** The sort by to use when the search is a geo search. */
public static final String GEO_SORT_BY = "geo_spec_sortable";
-
+
+
/** Utility class, should be used by calling static methods. */
- private GeoSearchUtil(){
-
+ private GeoSearchUtil() {
+
}
-
-
+
+
/**
* Calcluates a center point from minX,maxX,minY,maxY parameters.
* @param requestParameters Parameters for the request.
* @return The center point in latlong format.
*/
- public static String getCenter(final ParametersDataObject
requestParameters){
-
- if(!isGeoSearch(requestParameters)){
- throw new IllegalArgumentException("Given requestParameter object
must contain parameters: minX,maxX,minY,maxY");
+ public static String getCenter(final ParametersDataObject
requestParameters) {
+
+ if (!isGeoSearch(requestParameters)) {
+ throw new IllegalArgumentException(
+ "Given requestParameter object must contain parameters:
minX,maxX,minY,maxY");
}
-
+
final int minX = Integer.parseInt((String)
requestParameters.getValue(MIN_X).getString());
final int maxX = Integer.parseInt((String)
requestParameters.getValue(MAX_X).getString());
final int minY = Integer.parseInt((String)
requestParameters.getValue(MIN_Y).getString());
final int maxY = Integer.parseInt((String)
requestParameters.getValue(MAX_Y).getString());
-
+
final UTM utmMin = UTM.valueOf(33, 'W', minX, minY, SI.METER);
final UTM utmMax = UTM.valueOf(33, 'W', maxX, maxY, SI.METER);
-
+
final LatLong llMin = UTM.utmToLatLong(utmMin,
ReferenceEllipsoid.WGS84);
final LatLong llMax = UTM.utmToLatLong(utmMax,
ReferenceEllipsoid.WGS84);
@@ -71,31 +77,48 @@
LOG.debug("(" + minX + "," + minY + ") (" + llMinX + "," + llMinY +
")");
LOG.debug("(" + maxX + "," + maxY + ") (" + llMaxX + "," + llMaxY +
")");
-
- final String center = new StringBuilder("(").append(llMinX + (llMaxX -
llMinX) / 2).append(",")
- .append(llMinY + (llMaxY - llMinY) / 2).append(")").toString();
+
+ final String center = new StringBuilder("(").append(llMinX + (llMaxX -
llMinX) / 2).append(",").append(
+ llMinY + (llMaxY - llMinY) / 2).append(")").toString();
return center;
}
-
-
-
+
+
/**
* Responsible for checking if a ParameterDataObject is a geosearch.
* @param requestParameters
* @return true if the given parameter object contains minX,maxX,minY,maxY
values.
*/
public static boolean isGeoSearch(final ParametersDataObject
requestParameters) {
-
- if (requestParameters.getValue(MIN_X) == null ||
requestParameters.getValue(MAX_X) == null || requestParameters.getValue(MIN_Y)
== null
- || requestParameters.getValue(MAX_Y) == null) {
+
+ if (requestParameters.getValue(MIN_X) == null ||
requestParameters.getValue(MAX_X) == null
+ || requestParameters.getValue(MIN_Y) == null ||
requestParameters.getValue(MAX_Y) == null) {
return false;
}
-
- if (requestParameters.getValue(MIN_X).getString().length() == 0 ||
requestParameters.getValue(MAX_X).getString().length() == 0 ||
requestParameters.getValue(MIN_Y).getString().length() == 0
- || requestParameters.getValue(MAX_Y).getString().length() ==
0) {
+
+ if (requestParameters.getValue(MIN_X).getString().length() == 0
+ || requestParameters.getValue(MAX_X).getString().length() == 0
+ || requestParameters.getValue(MIN_Y).getString().length() == 0
+ || requestParameters.getValue(MAX_Y).getString().length() == 0) {
return false;
}
return true;
}
+
+
+ public static int getRadiusRestriction(ParametersDataObject pdo) {
+
+ if (isGeoSearch(pdo)) {
+ final int minX = Integer.parseInt((String)
pdo.getValue(MIN_X).getString());
+ final int maxX = Integer.parseInt((String)
pdo.getValue(MAX_X).getString());
+
+ double restrictedRadius = ((maxX - minX) / 2) / 1000;
+ if(restrictedRadius < 1.0d ){
+ return 1;
+ }
+ return (int)Math.round(restrictedRadius);
+ }
+ throw new IllegalArgumentException("Given requestParameter object must
contain parameters: minX,maxX,minY,maxY");
+ }
}
\ No newline at end of file
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits