From a473912e8d9de3f0f265b8c39c50fa8e1240fe1f Mon Sep 17 00:00:00 2001 From: Steijn van Date: Thu, 24 Sep 2020 14:50:01 +0200 Subject: [PATCH 1/6] debug for complex linestrings --- flopy/utils/gridintersect.py | 47 +++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/flopy/utils/gridintersect.py b/flopy/utils/gridintersect.py index a5ceda6a0..096d10eb3 100644 --- a/flopy/utils/gridintersect.py +++ b/flopy/utils/gridintersect.py @@ -710,7 +710,7 @@ def _intersect_linestring_structured(self, shp, keepzerolengths=False): nodelist, lengths, vertices = [], [], [] ixshapes = [] for ls in lineclip: - n, l, v, ix = self._get_nodes_intersecting_linestring(ls) + n, l, v, ixs = self._get_nodes_intersecting_linestring(ls) nodelist += n lengths += l # if necessary, transform coordinates back to real @@ -722,26 +722,30 @@ def _intersect_linestring_structured(self, shp, keepzerolengths=False): ): v_realworld = [] for pt in v: + pt = np.array(pt) rx, ry = transform( - [pt[0]], - [pt[1]], + pt[:, 0], + pt[:, 1], self.mfgrid.xoffset, self.mfgrid.yoffset, self.mfgrid.angrot_radians, inverse=False, ) v_realworld.append([rx, ry]) - ix_realworld = rotate( - ix, self.mfgrid.angrot, origin=(0.0, 0.0) - ) - ix_realworld = translate( - ix_realworld, self.mfgrid.xoffset, self.mfgrid.yoffset - ) + ixs_realworld = [] + for ix in ixs: + ix_realworld = rotate( + ix, self.mfgrid.angrot, origin=(0.0, 0.0) + ) + ix_realworld = translate( + ix_realworld, self.mfgrid.xoffset, self.mfgrid.yoffset + ) + ixs_realworld.append(ix_realworld) else: v_realworld = v ix_realworld = ix vertices += v_realworld - ixshapes += ix_realworld + ixshapes += ixs_realworld else: # linestring is fully within grid ( nodelist, @@ -758,9 +762,10 @@ def _intersect_linestring_structured(self, shp, keepzerolengths=False): ): v_realworld = [] for pt in vertices: + pt = np.array(pt) rx, ry = transform( - [pt[0]], - [pt[1]], + pt[:, 0], + pt[:, 1], self.mfgrid.xoffset, self.mfgrid.yoffset, self.mfgrid.angrot_radians, @@ -972,7 +977,7 @@ def _check_adjacent_cells_intersecting_line( intersect = linestring.intersection(pl) ixshape.append(intersect) length.append(intersect.length) - if intersect.geom_type == "MultiLineString": + if hasattr(intersect, "geoms"): x, y = [], [] for igeom in intersect.geoms: x.append(igeom.xy[0]) @@ -999,7 +1004,7 @@ def _check_adjacent_cells_intersecting_line( intersect = linestring.intersection(pl) ixshape.append(intersect) length.append(intersect.length) - if intersect.geom_type == "MultiLineString": + if hasattr(intersect, "geoms"): x, y = [], [] for igeom in intersect.geoms: x.append(igeom.xy[0]) @@ -1026,7 +1031,7 @@ def _check_adjacent_cells_intersecting_line( intersect = linestring.intersection(pl) ixshape.append(intersect) length.append(intersect.length) - if intersect.geom_type == "MultiLineString": + if hasattr(intersect, "geoms"): x, y = [], [] for igeom in intersect.geoms: x.append(igeom.xy[0]) @@ -1053,7 +1058,7 @@ def _check_adjacent_cells_intersecting_line( intersect = linestring.intersection(pl) ixshape.append(intersect) length.append(intersect.length) - if intersect.geom_type == "MultiLineString": + if hasattr(intersect, "geoms"): x, y = [], [] for igeom in intersect.geoms: x.append(igeom.xy[0]) @@ -1302,9 +1307,10 @@ def _transform_geo_interface_polygon(self, polygon): # transform shell coordinates shell_pts = [] for pt in shell: + pt = np.array(pt) rx, ry = transform( - [pt[0]], - [pt[1]], + pt[:, 0], + pt[:, 1], self.mfgrid.xoffset, self.mfgrid.yoffset, self.mfgrid.angrot_radians, @@ -1316,9 +1322,10 @@ def _transform_geo_interface_polygon(self, polygon): if holes: holes_pts = [] for pt in holes: + pt = np.array(pt) rx, ry = transform( - [pt[0]], - [pt[1]], + pt[:, 0], + pt[:, 1], self.mfgrid.xoffset, self.mfgrid.yoffset, self.mfgrid.angrot_radians, From eebeb46fd4ef63cfe8ecc77c5cc6e16ce2139f62 Mon Sep 17 00:00:00 2001 From: Steijn van Date: Fri, 25 Sep 2020 11:21:46 +0200 Subject: [PATCH 2/6] check on geoms attribute instead of geom_type --- flopy/utils/gridintersect.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flopy/utils/gridintersect.py b/flopy/utils/gridintersect.py index 096d10eb3..db6d0a69d 100644 --- a/flopy/utils/gridintersect.py +++ b/flopy/utils/gridintersect.py @@ -892,7 +892,7 @@ def _get_nodes_intersecting_linestring(self, linestring): ixshapes.append(intersect) length = intersect.length lengths.append(length) - if intersect.geom_type == "MultiLineString": + if hasattr(intersect, "geoms"): x, y = [], [] for igeom in intersect.geoms: x.append(igeom.xy[0]) From 3b7ea478a3e5bb682884b09ad922c01a0fccb091 Mon Sep 17 00:00:00 2001 From: Steijn van Date: Fri, 25 Sep 2020 12:54:16 +0200 Subject: [PATCH 3/6] fix long line; variable names --- flopy/utils/gridintersect.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/flopy/utils/gridintersect.py b/flopy/utils/gridintersect.py index db6d0a69d..96089fb25 100644 --- a/flopy/utils/gridintersect.py +++ b/flopy/utils/gridintersect.py @@ -738,12 +738,13 @@ def _intersect_linestring_structured(self, shp, keepzerolengths=False): ix, self.mfgrid.angrot, origin=(0.0, 0.0) ) ix_realworld = translate( - ix_realworld, self.mfgrid.xoffset, self.mfgrid.yoffset + ix_realworld, + self.mfgrid.xoffset, self.mfgrid.yoffset ) ixs_realworld.append(ix_realworld) else: v_realworld = v - ix_realworld = ix + ixs_realworld = ixs vertices += v_realworld ixshapes += ixs_realworld else: # linestring is fully within grid From 566b90dfcb1f1c63c788f7f4327da69e5396db6e Mon Sep 17 00:00:00 2001 From: Steijn van Date: Fri, 25 Sep 2020 16:29:33 +0200 Subject: [PATCH 4/6] travis fix _transform_geo_interface_polygon --- flopy/utils/gridintersect.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/flopy/utils/gridintersect.py b/flopy/utils/gridintersect.py index 96089fb25..fa45f05d7 100644 --- a/flopy/utils/gridintersect.py +++ b/flopy/utils/gridintersect.py @@ -1308,10 +1308,9 @@ def _transform_geo_interface_polygon(self, polygon): # transform shell coordinates shell_pts = [] for pt in shell: - pt = np.array(pt) rx, ry = transform( - pt[:, 0], - pt[:, 1], + [pt[0]], + [pt[1]], self.mfgrid.xoffset, self.mfgrid.yoffset, self.mfgrid.angrot_radians, @@ -1323,17 +1322,14 @@ def _transform_geo_interface_polygon(self, polygon): if holes: holes_pts = [] for pt in holes: - pt = np.array(pt) rx, ry = transform( - pt[:, 0], - pt[:, 1], + [pt[0]], + [pt[1]], self.mfgrid.xoffset, self.mfgrid.yoffset, self.mfgrid.angrot_radians, inverse=False, ) - holes_pts.append((rx, ry)) - geoms.append(holes_pts) # append (shells, holes) to transformed coordinates list geom_list.append(tuple(geoms)) return geom_list From 02bd6ab8dc0598abc30c56145afa11a16d0c0555 Mon Sep 17 00:00:00 2001 From: Steijn van Date: Fri, 25 Sep 2020 16:31:02 +0200 Subject: [PATCH 5/6] black /w line lengthh 79 --- flopy/utils/gridintersect.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/flopy/utils/gridintersect.py b/flopy/utils/gridintersect.py index fa45f05d7..2e78bb621 100644 --- a/flopy/utils/gridintersect.py +++ b/flopy/utils/gridintersect.py @@ -739,7 +739,8 @@ def _intersect_linestring_structured(self, shp, keepzerolengths=False): ) ix_realworld = translate( ix_realworld, - self.mfgrid.xoffset, self.mfgrid.yoffset + self.mfgrid.xoffset, + self.mfgrid.yoffset, ) ixs_realworld.append(ix_realworld) else: @@ -1229,16 +1230,12 @@ def _intersect_polygon_structured(self, shp): v_realworld = [] if intersect.geom_type.startswith("Multi"): for ipoly in intersect: - v_realworld += ( - self._transform_geo_interface_polygon( - ipoly - ) + v_realworld += self._transform_geo_interface_polygon( + ipoly ) else: - v_realworld += ( - self._transform_geo_interface_polygon( - intersect - ) + v_realworld += self._transform_geo_interface_polygon( + intersect ) intersect_realworld = rotate( intersect, self.mfgrid.angrot, origin=(0.0, 0.0) From 8249987683b7d4ade1a99eba3508acf1a3935ec2 Mon Sep 17 00:00:00 2001 From: Steijn van Date: Fri, 25 Sep 2020 17:22:22 +0200 Subject: [PATCH 6/6] rerun black after update from black 19.10 to black 20.8 --- flopy/utils/gridintersect.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/flopy/utils/gridintersect.py b/flopy/utils/gridintersect.py index 2e78bb621..83364755c 100644 --- a/flopy/utils/gridintersect.py +++ b/flopy/utils/gridintersect.py @@ -1230,12 +1230,16 @@ def _intersect_polygon_structured(self, shp): v_realworld = [] if intersect.geom_type.startswith("Multi"): for ipoly in intersect: - v_realworld += self._transform_geo_interface_polygon( - ipoly + v_realworld += ( + self._transform_geo_interface_polygon( + ipoly + ) ) else: - v_realworld += self._transform_geo_interface_polygon( - intersect + v_realworld += ( + self._transform_geo_interface_polygon( + intersect + ) ) intersect_realworld = rotate( intersect, self.mfgrid.angrot, origin=(0.0, 0.0)