@@ -166,39 +166,40 @@ def publish_geofence_ok(self):
166166 self ._geofence_status_pub .publish (self ._geofence_msg )
167167
168168
169- def _geopoint_poly_to_map (self , poly : list [GeoPoint ]) -> list [tuple [float , float , float ]]:
170- if self ._utm_frame is None :
171- self ._node .get_logger ().error ("Cannot transform geofence polygon to map frame because UTM frame is not set yet" )
172- return []
173-
174- transformed_poly = []
175- utm_to_map_transform = self ._tf_buffer .lookup_transform (self ._map_frame , self ._utm_frame , Time ())
176- for point in poly :
177- ps = convert_latlon_to_utm (point )
178- try :
179- transformed_ps = do_transform_point (ps , utm_to_map_transform )
180- transformed_poly .append ((transformed_ps .point .x , transformed_ps .point .y , point .altitude ))
181- except Exception as e :
182- self ._node .get_logger ().error (f"Error transforming geofence polygon point to map frame: { e } " )
183- return []
184-
185- return transformed_poly
186169
187170 def _publish_geofence_polygons (self ):
188171 self ._geofence_polygons_msg .header .stamp = self ._node .get_clock ().now ().to_msg ()
189172 self ._geofence_polygons_msg .header .frame_id = self ._map_frame
190173
174+ def geopoint_poly_to_map (poly : list [GeoPoint ]) -> list [tuple [float , float , float ]]:
175+ if self ._utm_frame is None :
176+ self ._node .get_logger ().error ("Cannot transform geofence polygon to map frame because UTM frame is not set yet" )
177+ return []
178+
179+ transformed_poly = []
180+ utm_to_map_transform = self ._tf_buffer .lookup_transform (self ._map_frame , self ._utm_frame , Time ())
181+ for point in poly :
182+ ps = convert_latlon_to_utm (point )
183+ try :
184+ transformed_ps = do_transform_point (ps , utm_to_map_transform )
185+ transformed_poly .append ((transformed_ps .point .x , transformed_ps .point .y , point .altitude ))
186+ except Exception as e :
187+ self ._node .get_logger ().error (f"Error transforming geofence polygon point to map frame: { e } " )
188+ return []
189+
190+ return transformed_poly
191+
192+ map_fences = [geopoint_poly_to_map (fence ) for fence in self ._fences ]
193+ map_islands = [geopoint_poly_to_map (island ) for island in self ._islands ]
194+
191195 def map_poly_to_polygon_msg (map_poly : list [tuple [float , float , float ]]) -> Polygon :
192196 polygon_msg = Polygon ()
193197 if len (map_poly ) < 3 :
194198 self ._node .get_logger ().error ("Invalid polygon, must be a list of at least 3 GeoPoints transformed to map frame" )
195199 return polygon_msg
196200 polygon_msg .points = [Point32 (x = point [0 ], y = point [1 ], z = point [2 ]) for point in map_poly ]
197201 return polygon_msg
198-
199- map_fences = [self ._geopoint_poly_to_map (fence ) for fence in self ._fences ]
200- map_islands = [self ._geopoint_poly_to_map (island ) for island in self ._islands ]
201-
202+
202203 self ._geofence_polygons_msg .geofence = [map_poly_to_polygon_msg (fence ) for fence in map_fences ]
203204 self ._geofence_polygons_msg .islands = [map_poly_to_polygon_msg (island ) for island in map_islands ]
204205
0 commit comments