Skip to content

Commit ff98edd

Browse files
authored
Clean up benchmark code (#270)
1 parent d0ab6c9 commit ff98edd

File tree

1 file changed

+3
-84
lines changed

1 file changed

+3
-84
lines changed

benchmarks/benchmarks.jl

Lines changed: 3 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -62,87 +62,6 @@ end
6262
plot_trials(circle_area_suite)
6363

6464

65-
# ## Vancouver watershed benchmarks
66-
#=
67-
68-
Vancouver Island has ~1,300 watersheds. LibGEOS uses this exact data
69-
in their tests, so we'll use it in ours as well!
70-
71-
We'll start by loading the data, and then we'll use it to benchmark various operations.
72-
73-
=#
74-
75-
# The CRS for this file is EPSG:3005, or as a PROJ string,
76-
# `"+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"`
77-
# TODO: this doesn't work with WellKnownGeometry. Why?
78-
wkt_geoms = LG.readgeom.(eachline("/Users/anshul/Downloads/watersheds.wkt"), (LG.WKTReader(LG.get_global_context()),))
79-
vancouver_polygons = GI.getgeom.(wkt_geoms, 1); #.|> GO.tuples;
80-
81-
import SortTileRecursiveTree as STR
82-
tree = STR.STRtree(vancouver_polygons)
83-
query_result = STR.query(tree, GI.extent(vancouver_polygons[1]))
84-
85-
GO.intersects.((vancouver_polygons[1],), vancouver_polygons[query_result])
86-
87-
go_vp = GO.tuples.(vancouver_polygons[1:2])
88-
@be GO.union($(go_vp[1]), $(go_vp[2]); target = $GI.PolygonTrait())
89-
@be LG.union($(vancouver_polygons[1]), $(vancouver_polygons[2]))
90-
91-
all_intersected = falses(length(vancouver_polygons))
92-
accumulator = deepcopy(vancouver_polygons[1])
93-
all_intersected[1] = true
94-
i = 1
95-
# query_result = STR.query(tree, GI.extent(accumulator))
96-
# for idx in query_result
97-
# println("Assessing $idx")
98-
# if !all_intersected[idx] && LG.intersects(vancouver_polygons[idx], accumulator)
99-
# println("Assimilating $idx")
100-
# result = LG.union(vancouver_polygons[idx], accumulator#=; target = GI.PolygonTrait()=#)
101-
# # @show length(result)
102-
# accumulator = result#[1]
103-
# all_intersected[idx] = true
104-
# end
105-
# end
106-
display(poly(vancouver_polygons[all_intersected]; color = rand(RGBf, sum(all_intersected))))
107-
display(poly(accumulator))
108-
@time while !(all(all_intersected)) && i < length(vancouver_polygons)
109-
println("Began iteration $i")
110-
query_result = STR.query(tree, GI.extent(accumulator))
111-
for idx in query_result
112-
if !(all_intersected[idx] || !(LG.intersects(vancouver_polygons[idx], accumulator)))
113-
println("Assimilating $idx")
114-
result = LG.union(vancouver_polygons[idx], accumulator#=; target = GI.PolygonTrait()=#)
115-
# @show length(result)
116-
accumulator = result#[1]
117-
all_intersected[idx] = true
118-
end
119-
end
120-
display(poly(vancouver_polygons[all_intersected]; color = rand(RGBf, sum(all_intersected))))
121-
println("Finished iteration $i")
122-
# wait_for_key("Press any key to continue to the next iteration.")
123-
i += 1
124-
end
125-
126-
fig = Figure()
127-
ax = Axis(fig[1, 1]; title = "STRTree query for polygons", aspect = DataAspect())
128-
for (i, result_index) in enumerate(query_result)
129-
poly!(ax, vancouver_polygons[result_index]; color = Makie.wong_colors()[i], label = "$result_index")
130-
end
131-
Legend(fig[1, 2], ax)
132-
fig
133-
134-
135-
136-
# TODO:
137-
# - Vancouver watersheds:
138-
# - Intersection on pre-buffered geometry
139-
# - Polygon union by reduction (perhaps pre-sort by border order, so we don't end up with useless polygons)
140-
# - Queries using STRTree.jl
141-
# - Potentially using a prepared geometry based approach to multithreaded reductive joining
142-
# - Implement multipolygon joining. How? Query intersection or touching for each individual geometry,
143-
# and implement a
144-
145-
14665
## Segmentization
14766

14867

@@ -180,9 +99,9 @@ n_points_values = round.(Int, exp10.(LinRange(0.7, 6, 15)))
18099
circle_union_suite["LibGEOS"][n_points] = @be LG.union($lg_circle_left, $lg_circle_right)
181100
end
182101

183-
plot_trials(circle_difference_suite)
184-
plot_trials(circle_intersection_suite)
185-
plot_trials(circle_union_suite)
102+
plot_trials(circle_difference_suite; legend_position = (2, 1), legend_kws = (; orientation = :horizontal, nbanks = 2))
103+
plot_trials(circle_intersection_suite; legend_position = (2, 1), legend_kws = (; orientation = :horizontal, nbanks = 2))
104+
plot_trials(circle_union_suite; legend_position = (2, 1), legend_kws = (; orientation = :horizontal, nbanks = 2))
186105

187106
usa_poly_suite = BenchmarkGroup()
188107
usa_difference_suite = usa_poly_suite["difference"] = BenchmarkGroup(["title:USA difference", "subtitle:Tested on CONUS"])

0 commit comments

Comments
 (0)