protected static SensorPost locateNewPost(SurveyStation parent) {
    final World world = parent.world() ;
    final int numAttempts = 5, bonus = parent.structure.upgradeLevel(
      SurveyStation.SENSOR_PERIMETER
    ) ;
    
    float range = World.SECTOR_SIZE / 2f, spacing = 10 ;
    range *= 1 + bonus ;
    final SensorPost post = new SensorPost(parent, 2 * (1 + bonus)) ;
    
    Tile picked = null ;
    float bestRating = 0 ;
    for (int n = numAttempts ; n-- > 0 ;) {
      
      final Tile t = Spacing.pickRandomTile(parent, range, world) ;
      if (t.blocked()) continue ;
      
      final SensorPost nearest = (SensorPost) world.presences.nearestMatch(
        SensorPost.class, t, spacing
      ) ;
      if (nearest != null) continue ;
      
      post.setPosition(t.x, t.y, world) ;
      if (! Spacing.perimeterFits(post)) continue ;
      
      float rating = 1 ;
      final Venue nearV = (Venue) world.presences.nearestMatch(
        Venue.class, t, -1
      ) ;
      if (nearV != null) rating += Spacing.distance(t, nearV) ;
      if (rating > bestRating) { picked = t ; bestRating = rating ; }
    }
    
    if (picked == null) return null ;
    post.setPosition(picked.x, picked.y, world) ;
    return post ;
  }