Addition of API location_bounds_contains_coordinates_on_edge
[platform/core/api/location-manager.git] / src / location_bounds.c
index 3106db0..041231f 100644 (file)
@@ -252,6 +252,42 @@ EXPORT_API bool location_bounds_contains_coordinates(location_bounds_h bounds, l
        return result;
 }
 
+EXPORT_API bool location_bounds_contains_coordinates_on_edge(location_bounds_h bounds, location_coords_s coords, double tolerance)
+{
+       if (__is_location_supported() == LOCATIONS_ERROR_NOT_SUPPORTED) {
+               //LCOV_EXCL_START
+               set_last_result(LOCATIONS_ERROR_NOT_SUPPORTED);
+               return FALSE;
+               //LCOV_EXCL_STOP
+       }
+
+       if (!bounds) {
+               set_last_result(LOCATION_BOUNDS_ERROR_INVALID_PARAMETER);
+               return FALSE;
+       }
+
+       if (coords.latitude < -90 || coords.latitude > 90 || coords.longitude < -180 || coords.longitude > 180) {
+               set_last_result(LOCATION_BOUNDS_ERROR_INVALID_PARAMETER);
+               return FALSE;
+       }
+
+       LocationPosition *pos = location_position_new(0, coords.latitude, coords.longitude, 0, LOCATION_STATUS_2D_FIX);
+       if (pos == NULL) {
+               //LCOV_EXCL_START
+               LOCATIONS_LOGE("LOCATION_BOUNDS_ERROR_OUT_OF_MEMORY(0x%08x) : fail to location_position_new", LOCATION_BOUNDS_ERROR_OUT_OF_MEMORY);
+               set_last_result(LOCATION_BOUNDS_ERROR_OUT_OF_MEMORY);
+               return FALSE;
+               //LCOV_EXCL_STOP
+       }
+       location_bounds_s *handle = (location_bounds_s *) bounds;
+       gboolean on_path = location_boundary_on_path(handle->boundary, pos, tolerance);
+       location_position_free(pos);
+       bool result = on_path ? TRUE : FALSE;
+
+       set_last_result(LOCATION_BOUNDS_ERROR_NONE);
+       return result;
+}
+
 EXPORT_API int location_bounds_get_type(location_bounds_h bounds, location_bounds_type_e *type)
 {
        LOCATIONS_NOT_SUPPORTED_CHECK(__is_location_supported());