diff --git a/lib/topo/contains.ex b/lib/topo/contains.ex index f83746b..a9bb560 100644 --- a/lib/topo/contains.ex +++ b/lib/topo/contains.ex @@ -16,7 +16,7 @@ defmodule Topo.Contains do | %Geo.Polygon{} | %Geo.MultiPolygon{} - @spec contains?(geo_struct, geo_struct) :: boolean + @spec contains?(geo_struct | %Geo.GeometryCollection{}, geo_struct) :: boolean def contains?(%Geo.Point{} = a, %Geo.Point{} = b), do: a == b def contains?(%Geo.Point{} = a, %Geo.MultiPoint{} = b), do: contains_all?(a, b, Geo.Point) def contains?(%Geo.Point{}, _), do: false @@ -25,6 +25,10 @@ defmodule Topo.Contains do def contains?(%Geo.MultiPoint{} = a, %Geo.MultiPoint{} = b), do: contains_all?(a, b, Geo.Point) def contains?(%Geo.MultiPoint{}, _), do: false + def contains?(%Geo.GeometryCollection{geometries: geometries}, b) do + Enum.any?(geometries, &contains?(&1, b)) + end + def contains?(%Geo.LineString{} = a, %Geo.Point{} = b) do cond do List.first(a.coordinates) == List.last(a.coordinates) ->