HAYASHI Kentaro
null+****@clear*****
Fri Nov 2 16:46:49 JST 2012
HAYASHI Kentaro 2012-11-02 16:46:49 +0900 (Fri, 02 Nov 2012) New Revision: 2ea20d8e4e0509df2c948bf1f84c2fc25baa46fe https://github.com/groonga/groonga/commit/2ea20d8e4e0509df2c948bf1f84c2fc25baa46fe Log: test: support to generate calculated distance from 3rd quadrant to 1st one Modified files: test/command/tools/geo/generate-grntest-data.rb Modified: test/command/tools/geo/generate-grntest-data.rb (+59 -31) =================================================================== --- test/command/tools/geo/generate-grntest-data.rb 2012-11-02 15:05:52 +0900 (0690035) +++ test/command/tools/geo/generate-grntest-data.rb 2012-11-02 16:46:49 +0900 (7cd65d6) @@ -597,15 +597,26 @@ class GrnTestData @latitude_end.to_i) end (north_distance + south_distance).floor - when "1st_to_3rd" + when "1st_to_3rd", "3rd_to_1st" longitude_delta = @longitude_end_degree - @longitude_start_degree latitude_delta = @latitude_end_degree - @latitude_start_degree slope = latitude_delta / longitude_delta.to_f intercept = @latitude_start_degree - slope * @longitude_start_degree longitude_on_equator = -intercept / slope * GRN_GEO_RESOLUTION + if @longitude_start_degree > @longitude_end_degree + first_longitude = @longitude_start.to_i + first_latitude = @latitude_start.to_i + third_longitude = @longitude_end.to_i + third_latitude = @latitude_end.to_i + else + first_longitude = @longitude_end.to_i + first_latitude = @latitude_end.to_i + third_longitude = @longitude_start.to_i + third_latitude = @latitude_start.to_i + end if longitude_on_equator > 0 - first_distance = calculate_distance(@longitude_start.to_i, - @latitude_start.to_i, + first_distance = calculate_distance(first_longitude, + first_latitude, longitude_on_equator, 0) intermediate_distance = calculate_distance(longitude_on_equator, @@ -614,12 +625,12 @@ class GrnTestData intercept * GRN_GEO_RESOLUTION) third_distance = calculate_distance(0, intercept * GRN_GEO_RESOLUTION, - @longitude_end.to_i, - @latitude_end.to_i) + third_longitude, + third_latitude) (first_distance + intermediate_distance + third_distance).floor elsif longitude_on_equator < 0 - first_distance = calculate_distance(@longitude_start.to_i, - @latitude_start.to_i, + first_distance = calculate_distance(first_longitude, + first_latitude, 0, intercept * GRN_GEO_RESOLUTION) intermediate_distance = calculate_distance(0, @@ -628,18 +639,18 @@ class GrnTestData 0) third_distance = calculate_distance(longitude_on_equator, 0, - @longitude_end.to_i, - @latitude_end.to_i) + third_longitude, + third_latitude) (first_distance + intermediate_distance + third_distance).floor else - first_distance = calculate_distance(@longitude_start.to_i, - @latitude_start.to_i, + first_distance = calculate_distance(first_longitude, + first_latitude, 0, 0) third_distance = calculate_distance(0, 0, - @longitude_end.to_i, - @latitude_end.to_i) + third_longitude, + third_latitude) (first_distance + third_distance).floor end when "equator" @@ -712,34 +723,51 @@ class GrnTestData 180 * GRN_GEO_RESOLUTION, latitude_on_180 * GRN_GEO_RESOLUTION) (east_distance + west_distance).floor - when "1st_to_3rd" - rounded_longitude = @longitude_end_degree + 360 - rounded_latitude = @latitude_end_degree - longitude_delta = rounded_longitude - @longitude_start_degree - latitude_delta = rounded_latitude - @latitude_start_degree + when "1st_to_3rd", "3rd_to_1st" + if @longitude_start_degree > @longitude_end_degree + rounded_longitude_degree = @longitude_end_degree + 360 + rounded_latitude_degree = @latitude_end_degree + base_longitude_degree = @longitude_start_degree + base_latitude_degree = @latitude_start_degree + base_longitude = @longitude_start.to_i + base_latitude = @latitude_start.to_i + third_longitude = @longitude_end.to_i + third_latitude = @latitude_end.to_i + else + rounded_longitude_degree = @longitude_start_degree + 360 + rounded_latitude_degree = @latitude_start_degree + base_longitude_degree = @longitude_end_degree + base_latitude_degree = @latitude_end_degree + base_longitude = @longitude_end.to_i + base_latitude = @latitude_end.to_i + third_longitude = @longitude_start.to_i + third_latitude = @latitude_start.to_i + end + longitude_delta = rounded_longitude_degree - base_longitude_degree + latitude_delta = rounded_latitude_degree - base_latitude_degree slope = latitude_delta / longitude_delta.to_f - intercept = @latitude_start_degree - slope * @longitude_start_degree + intercept = base_latitude_degree - slope * base_longitude_degree latitude_on_180 = (slope * 180 + intercept) * GRN_GEO_RESOLUTION longitude_on_equator = (-intercept / slope) inverted_longitude = (360 - longitude_on_equator) * GRN_GEO_RESOLUTION longitude_on_equator *= GRN_GEO_RESOLUTION if latitude_on_180 > 0 - first_distance = calculate_distance(@longitude_start.to_i, - @latitude_start.to_i, + first_distance = calculate_distance(base_longitude, + base_latitude, GRN_GEO_180DEGREE_RESOLUTION, latitude_on_180) intermediate_distance = calculate_distance(GRN_GEO_180DEGREE_RESOLUTION, latitude_on_180, inverted_longitude, 0) - third_distance = calculate_distance(- �� longitude_end.to_i, - @latitude_end.to_i, + third_distance = calculate_distance(-third_longitude, + third_latitude, inverted_longitude, 0) (first_distance + intermediate_distance + third_distance).floor elsif latitude_on_180 < 0 - first_distance = calculate_distance(@longitude_start.to_i, - @latitude_start.to_i, + first_distance = calculate_distance(base_longitude, + base_latitude, longitude_on_equator, 0) intermediate_distance = calculate_distance(longitude_on_equator, @@ -748,18 +776,18 @@ class GrnTestData latitude_on_180) third_distance = calculate_distance(-GRN_GEO_180DEGREE_RESOLUTION, latitude_on_180, - @longitude_end.to_i, - @latitude_end.to_i) + third_longitude, + third_latitude) (first_distance + intermediate_distance + third_distance).floor else - first_distance = calculate_distance(@longitude_start.to_i, - @latitude_start.to_i, + first_distance = calculate_distance(base_longitude, + base_latitude, GRN_GEO_180DEGREE_RESOLUTION, 0) third_distance = calculate_distance(-GRN_GEO_180DEGREE_RESOLUTION, 0, - @longitude_end.to_i, - @latitude_end.to_i) + third_longitude, + third_latitude) (first_distance + third_distance).floor end end -------------- next part -------------- HTML����������������������������... Télécharger