From 1f43422a039169082780f2931959a9d4eead0897 Mon Sep 17 00:00:00 2001 From: kaaboaye Date: Wed, 11 Sep 2019 13:49:59 +0200 Subject: [PATCH] add geometry collection support for contains --- lib/topo/contains.ex | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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) ->